linux – 运行ltrace时没有输出
发布时间:2020-12-14 01:20:45 所属栏目:Linux 来源:网络整理
导读:正如标题所说,ltrace在我的系统上无法正常工作. 在大多数情况下,它没有输出,例如 $ltrace ls[usual ls output]+++ exited (status 0) +++$gcc hello.c$ltrace ./a.outHello world!+++ exited (status 0) +++ 我正在使用最新的ltrace版本(来自包0.7.3-5.1ubun
正如标题所说,ltrace在我的系统上无法正常工作.
在大多数情况下,它没有输出,例如 $ltrace ls [usual ls output] +++ exited (status 0) +++ $gcc hello.c $ltrace ./a.out Hello world! +++ exited (status 0) +++ 我正在使用最新的ltrace版本(来自包0.7.3-5.1ubuntu4),我甚至尝试从源代码重新编译,没有任何区别. 奇怪的是,从Internet下载的二进制文件似乎工作正常,正确显示库调用. 我错过了什么?有人能够重现这个问题吗? 解决方法
这可能与使用“relro now”编译的二进制文件有关.我创建了一个快速测试程序(我正在使用Ubuntu 16.04):
int main() { write(0,"hellon",6); return 0; } 如果我用gcc -O2 test.c -o test编译它,那么ltrace工作: $ltrace ./test __libc_start_main(0x400430,1,0x7ffc12326528,0x400550 <unfinished ...> write(0,6hello ) = 6 +++ exited (status 0) +++ 但是当我用gcc -O2 test.c -Wl,-z,relro -Wl,-z编译时,现在-o test2然后它不会: $ltrace ./test2 hello +++ exited (status 0) +++ 您可以使用Ubuntu上的pax-utils包中的scanelf来检查二进制文件是否已编译: $scanelf -a test* TYPE PAX PERM ENDIAN STK/REL/PTL TEXTREL RPATH BIND FILE ET_EXEC PeMRxS 0775 LE RW- R-- RW- - - LAZY test ET_EXEC PeMRxS 0775 LE RW- R-- RW- - - NOW test2 注意LAZY(ltrace工作)与NOW(ltrace没有). 这里有一些讨论(但没有解决方案): https://bugzilla.redhat.com/show_bug.cgi?id=1333481 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |