PTRACE_PEEKTEXT return 值和不可打印的字符

PTRACE_PEEKTEXT return value and non-printable characters

我试图在没有选项的情况下实现 STRACE,但我遇到了 SYSCALL 参数的问题,例如: STRACE 中的 SYSCALL 0(读取)->

    read(3, "7ELF[=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=]>[=12=][=12=][=12=][=12=]0q[=12=][=12=][=12=][=12=][=12=]"..., 832) = 832

1 - 我不知道第二个参数中的这个字符串到底是什么。

2- 当我尝试用 PTRACE_PEEKTEXT return 这个字符串并将其放入 (char *) 时,它 return 与 STRACE 相同,但类型有问题,它是 returns 个整数,其中一些是可打印的,一些是不可打印的,例如: PEEK_TEXT: returned 0,我把它改成ASCII然后放到buffer中; 但有时 PTRACE return 像 'E' 69 这样的 ASCII 已经可以打印了。 问题是我不知道如何将 PEEK_TEXT return 值正确地放入缓冲区

3- 同样在 strace 中,您看到由 '' 分隔的值,但 PEEK_TEXT 从未 returned ''

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

另一个问题:见this q&a。 PEEK_TEXT 除了原始数据,return 什么都没有。它没有解释为“数字”,它不是文本,除非你指的是有一些 ascii 文本的地址。您不应该以任何方式解释数据。将它直接放入缓冲区(来自保存 return 值的长变量的 memcpy),但请注意一次 returned 不止一个字节。

另一个问题的答案涉及错误检查。