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

时间:2014-02-17 00:56:09

标签: linux debugging reverse-engineering strace

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

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

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

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

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

2 个答案:

答案 0 :(得分:17)

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

broadway @ creepspread:〜%strace -e raw = read ls 2>& 1 | grep ^ read
读取(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

答案 1 :(得分:1)

您可以下载the source of strace并将所有这些tprintf("%s", ...)修改为tprintf("%p", ...),并构建strace的本地副本。