我正在尝试使用strace
来理解二进制程序如何使用内存。
但是,为了更加用户友好,strace
的默认输出会打印任何char *
缓冲区作为相应的字符串。
read(3, "Tell me, Muse, of that man of ma"..., 4096) = 270
有没有办法告诉strace
打印其内容旁边的字符串的实际地址?
如果不能同时打印两者,只打印字符串的地址而不是截断的内容也可以。
答案 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
的本地副本。