gpt4 book ai didi

linux - 运行 ltrace 时没有输出

转载 作者:IT王子 更新时间:2023-10-29 01:08:19 24 4
gpt4 key购买 nike

正如标题所说,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),我什至尝试从源代码重新编译,没有任何区别。我使用的是 Ubuntu 16.10,内核 4.8.0-42-generic。 gcc 版本是 6.2.0

奇怪的是,从 Internet 下载的二进制文件似乎可以正常工作,正确显示库调用。

我错过了什么?有人能重现这个问题吗?

最佳答案

这可能与使用 -z now 编译的二进制文件有关。我创建了一个快速测试程序(我使用的是 Ubuntu 16.04):

int main() {
write(0, "hello\n", 6);
return 0;
}

如果我用 gcc -O2 test.c -o test 编译它,那么 ltrace 工作:

$ ltrace ./test 
__libc_start_main(0x400430, 1, 0x7ffc12326528, 0x400550 <unfinished ...>
write(0, "hello\n", 6hello
) = 6
+++ exited (status 0) +++

但是,当我使用 gcc -O2 test.c -Wl,-z,relro -Wl,-z,now -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

关于linux - 运行 ltrace 时没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43213505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com