如何制作字符串参数的strace打印地址而不仅仅是它们的值?

m00*_*000 6 linux debugging reverse-engineering strace

我试图用来strace理解二进制程序如何使用内存.

但是,strace为了更加用户友好,默认输出将任何char *缓冲区打印为相应的字符串.

read(3, "Tell me, Muse, of that man of ma"..., 4096) = 270
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉strace打印其内容旁边的字符串的实际地址?

如果不可能同时打印两者,则只打印字符串的地址而不是截断的内容也可以.

Bri*_*ell 18

-e raw = read应该做你想要的.不需要进行源修改.

broadway @ creepspread:〜%strace -e raw =读取ls 2>&1 | grep ^读取
读取(0x3,0x7fff5ea52e78,0x340)= 0x340
读取(0x3,0x7fff5ea52e48,0x340)= 0x340
读取(0x3,0x7fff5ea52e18,0x340)= 0x340
读取(0x3,0x7fff5ea52de8,0x340)= 0x340
读取(0x3,0x7fff5ea52ca8,0x340)= 0x340
读取(0x3,0x7fff5ea52c48,0x340)= 0x340
读取(0x3,0x7fff5ea52c18,0x340)= 0x340
读取(0x3,0x7fef1433f000,0x400)= 0x136
读(0x3,0x7fef1433f000,0x400)= 0

  • -e raw = read -e read = all显示读取系统调用的未解码数据以及读取内容的十六进制转储.-e read的参数是文件描述符列表,因此您可以这样过滤它. (2认同)

Lee*_*hem 0

您可以下载 的源代码strace并将所有这些修改tprintf("%s", ...)tprintf("%p", ...),并构建strace.