PTRACE_PEEKTEXT 返回值和不可打印字符

我正在尝试在没有选项的情况下实现 STRACE,但我在使用 SYSCALL 参数时遇到了问题,例如: STRACE 中的 SYSCALL 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_TEXT 返回值正确地放入缓冲区

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

shwgy123 回答:PTRACE_PEEKTEXT 返回值和不可打印字符

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

至于另一个问题:见this q&a。 PEEK_TEXT 除了原始数据外从不返回任何内容。它没有解释为“数字”,它不是文本,除非你指的是有一些 ascii 文本的地址。您不应以任何方式解释数据。将其直接放入缓冲区(来自保存返回值的 long 变量的 memcpy),但请注意一次返回多个字节。

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

本文链接:https://www.f2er.com/1192352.html

大家都在问