gpt4 book ai didi

linux - ltrace 不适用于某些二进制文件

转载 作者:太空狗 更新时间:2023-10-29 11:15:34 31 4
gpt4 key购买 nike

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

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

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

# 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 上不起作用:

# ltrace -e strcpy /usr/sbin/httpd -t >/dev/null
Syntax OK
+++ exited (status 0) +++

虽然我们可以确认使用 gdb 调用了 strcpy,但没有跟踪库调用:

# 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 错误还是预期行为?

最佳答案

为了获得预期的权限(setuid 和 friend 们)和适当的守护进程配置,httpd 在启动后不久就会自行 fork ,然后原始进程退出(之前strcpy() 似乎被调用过)。 gdb 自动跟随新进程,ltrace 可以跟随它,但你必须通过给它一些额外的选项来告诉它,例如ltrace -f.

关于linux - ltrace 不适用于某些二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899644/

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