调试httpd进程

逆向工程 数据库 动态分析
2021-06-27 01:04:33

我正在尝试检查使用 openssl 静态编译的 httpd 二进制文件的内存。当我列出 httpd 进程时,我得到:

$ ps aux|grep httpd
root     58539  0.0  0.7  75364  3740 ?        Ss   14:49   0:00 /opt/httpd/bin/httpd
daemon   58850  0.0  0.5 364328  2556 ?        Sl   14:58   0:00 /opt/httpd/bin/httpd
daemon   58914  0.0  0.5 364328  2548 ?        Sl   14:59   0:00 /opt/httpd/bin/httpd
daemon   58942  0.0  0.5 364328  2544 ?        Sl   14:59   0:00 /opt/httpd/bin/httpd

然后,我尝试单独附加到每个进程,并将断点应用于我尝试调试的函数。但是,断点永远不会被触发,尽管我知道正在调用该函数。我认为这个问题与在新进程上分叉 httpd 的内容有关,但我对如何继续感到有些困惑。即使进程分叉,是否有通用方法来确保触发我的断点?

1个回答

根据工作人员模型,您的 apache 被配置为使用它可能会产生一个新工作人员来处理您的请求,如果您的 bp 未命中。就像 Guntram 所说的那样,您可以通过使用该标志并使用以下命令启动 gdb禁用分叉并将 httpd 置于调试模式-X

gdb httpd -X

如果由于某种原因您需要调试多个工作人员配置的 httpd,您应该使用 gdb 选项,set follow-fork-mode ask或者set follow-fork-mode child如果您知道您想提前关注所有分叉。https://sourceware.org/gdb/onlinedocs/gdb/Forks.html)。这也将被视为“通用方法”,适用于不允许您在前台运行单个进程的程序。