首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ltrace在某些二进制文件上不起作用

ltrace在某些二进制文件上不起作用
EN

Stack Overflow用户
提问于 2012-10-16 00:09:57
回答 1查看 2.6K关注 0票数 5

根据手册页,ltrace应该拦截并记录任何执行进程上的动态库调用,但是它似乎不能在某些二进制文件上正常工作。

以下是在尝试跟踪strcpy时重现问题的方法。

我首先看到ltrace能够处理一些二进制文件(这里是wget):

代码语言:javascript
复制
# ltrace -e strcpy wget --help >/dev/null
strcpy(0x63cc23, "auth-no-challenge")            = 0x63cc23
strcpy(0x63cc38, "background")                   = 0x63cc38
[...]
strcpy(0x63cf26, "verbose")                      = 0x63cf26
strcpy(0x63cf31, "verbose")                      = 0x63cf31
+++ exited (status 0) +++

现在,相同的代码在httpd上不起作用:

代码语言:javascript
复制
# ltrace -e strcpy /usr/sbin/httpd -t >/dev/null
Syntax OK
+++ exited (status 0) +++

没有跟踪到库调用,尽管我们可以确认strcpy是使用gdb调用的:

代码语言:javascript
复制
# gdb --quiet --args /usr/sbin/httpd -t 
Reading symbols from /usr/sbin/httpd...(no debugging symbols found)...done.
(gdb) b strcpy
Breakpoint 1 at 0x15d08
(gdb) r
Starting program: /usr/sbin/httpd -t
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x2aaaaad1b000
[Thread debugging using libthread_db enabled]

Breakpoint 1, 0x00002aaaaca4d610 in strcpy () from /lib64/libc.so.6

我在Fedora 17上执行了这个。这是ltrace错误还是预期行为?

EN

回答 1

Stack Overflow用户

发布于 2012-10-16 01:07:40

为了实现预期的权限(setuid和好友)和正确的守护进程配置,httpd在启动后很快就会派生自己,然后原始进程就会退出(似乎是在调用strcpy()之前)。gdb自动遵循新的流程,ltrace可以遵循新流程,但您必须通过给它一些额外的选项来告诉它,例如ltrace -f

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12899644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档