这可能与使用编译二进制文件有关
-z now。我创建了一个快速测试程序(我正在使用Ubuntu 16.04):
int main() { write(0, "hellon", 6); return 0;}如果我用
gcc -O2 test.c -o testltrace进行编译,则可以:
$ ltrace ./test __libc_start_main(0x400430, 1, 0x7ffc12326528, 0x400550 <unfinished ...>write(0, "hellon", 6hello) = 6+++ exited (status 0) +++
但是,当我使用
gcc -O2 test.c -Wl,-z,relro -Wl,-z,now -o test2它编译时,它不会:
$ ltrace ./test2 hello+++ exited (status 0) +++
您可以使用Ubuntu上
scanelf的
pax-utils软件包检查二进制文件是否像这样编译:
$ 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



