当前位置: 首页 > 面试题库 >

运行ltrace时无输出

董鸣
2023-03-14
问题内容

如标题所示,ltrace在我的系统上无法正常工作。在大多数情况下,它不显示任何输出,例如

$ltrace ls
[usual ls output]
+++ exited (status 0) +++

$gcc hello.c
$ltrace ./a.out
Hello world!
+++ exited (status 0) +++

我使用的是最新的ltrace版本(来自package 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 testltrace进行编译,则可以:

$ 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上scanelfpax-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



 类似资料:
  • ltrace 是一个调试程序,可在它退出之前执行指定命令来拦截和记录动态库调用和信号接收过程。它还可以拦截并打印系统调用。要跟踪的项目不需要重新编译,可以直接在二进制文件上使用。

  • 问题内容: 我有要在Java程序中运行的rsync命令…我面临的问题是rsync需要输入密码,而我不了解如何将此密码传递给rsync命令才能工作? 问题答案: 我将发布此代码示例: 但是维尼特·雷诺兹领先于我。 正如Vineet Reynolds指出的那样,使用这种方法将需要另外一段代码来检测rsync何时需要密码。因此,使用外部密码文件似乎是一种更简单的方法。 PS:可能存在与编码有关的问题,可

  • win11 go run .会生成exe文件到缓存目录,每次都弹出防火墙很烦,能不能指定生成目录? 谢谢

  • 我尝试在两个Jenkins构建上运行,而不是:它为两个项目返回完全相同的设置。但其中一个部署在Nexus上而另一个没有... edit:也没有显示任何有用的差异。除了项目名称和一些依赖项之外,它们是相同的。 在第二个项目的情况下,它从未部署在Nexus上。所以元数据还不存在。但我尝试跟踪nexus文件,当Jenkins在第二个项目上运行时,它从未命中。我没有那个电话的踪迹。 有人有主意吗? 编辑:

  • 问题内容: 我决定尝试使用npm脚本作为构建工具,到目前为止,我还是喜欢它。我想解决的一个问题是,当运行脚本运行jshint时,如果没有通过处理,我会收到很多“ npm ERR!”!线。我想抑制这些,因为短绒棉的输出更有意义。 是否有一种全局设置此属性的好方法,并且有一种方法可以针对每次运行的脚本进行设置? 问题答案: 所有脚本: 您可以通过以下几种方式将日志级别设置为,从而通过整体抑制npm的输

  • 问题 你写了个脚本,运行时需要一个密码。此脚本是交互式的,因此不能将密码在脚本中硬编码, 而是需要弹出一个密码输入提示,让用户自己输入。 解决方案 这时候Python的 getpass 模块正是你所需要的。你可以让你很轻松的弹出密码输入提示, 并且不会在用户终端回显密码。下面是具体代码: import getpass user = getpass.getuser() passwd = getpa