如何使string参数strace打印地址,而不是他们的价值?

我正在尝试使用strace来了解二进制程序如何使用内存。

然而, strace的默认输出,为了更加友好,打印所有char *缓冲区作为相应的string。

 read(3, "Tell me, Muse, of that man of ma"..., 4096) = 270 

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

如果两者都不可能,只打印string的地址而不是截断的内容也是可以的。

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

-e raw =阅读应该做你想要的。 应该不需要修改源代码。

百老汇@ 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