PTRACE_peek文本返回值和不可打印字符

PTRACE_peek文本返回值和不可打印字符,c,strace,ptrace,C,Strace,Ptrace,我尝试在没有选项的情况下实现STRACE,但我在SYSCALL参数方面遇到问题,例如: STRACE中的系统调用0(读取)-> read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360q\2\0\0\0\0\0"..., 832) = 832 1-我不知道第二个参数中的字符串是什么 2-当我尝试使用PTRACE_PEEKTEXT返回此字符串,并将其放入(char*)中时,它确实返回与STRACE相同

我尝试在没有选项的情况下实现STRACE,但我在SYSCALL参数方面遇到问题,例如: STRACE中的系统调用0(读取)->

    read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360q\2\0\0\0\0\0"..., 832) = 832
1-我不知道第二个参数中的字符串是什么

2-当我尝试使用PTRACE_PEEKTEXT返回此字符串,并将其放入(char*)中时,它确实返回与STRACE相同的结果,但类型的问题是,它返回整数,其中一些是可打印的,一些是不可打印的,例如: PEEK_TEXT:返回0,我将其更改为ASCII,然后将其放入缓冲区; 但有时PTRACE会返回一个类似“E”69的ASCII码,它已经可以打印了。 问题是我不知道如何将PEEK_文本返回值正确地放入缓冲区


3-同样在strace中,您可以看到由“”分隔的值,但PEEK_TEXT从未返回“”

第二个“参数”中的字符串是
读取调用的返回值。这确实是一种奇怪的语法,但至少在
strace
输出中一直使用它。这并不意味着
read
与此文本一起作为参数提供

至于另一个问题:见。PEEK_TEXT只返回原始数据。它没有解释为“数字”,它不是文本,除非你提到的地址有一些ascii文本。您不应该以任何方式解释数据。将它直接放入缓冲区(memcpy来自一个保存返回值的长变量),但请注意,一次返回的字节不止一个


另一个问题的答案包括错误检查。

我知道,我还有一个问题,我如何知道寄存器指向的数据的大小和结尾,因此我无法将其放入我的文件中conditon@haxor12ptrace系统调用中提供的功能似乎非常基本,看起来您必须提取系统调用的所有相关参数,例如传递给
read
的缓冲区大小,然后使用该大小以及调用的返回值来确定应捕获的数据量。