linux libc 2.23.so,IDA正确加载libc.so等动态库的调试信息

当使用IDA调试程序遇到libc符号信息缺失且伪代码可读性差的情况,可以通过修改DWARF调试信息来解决。具体步骤包括:利用objcopy修改.gnu_debuglink段,更新调试信息文件名,然后使用patchelf设置程序加载的libc路径。完成这些操作后,IDA即可正确加载调试信息,提高代码可读性。
摘要由CSDN通过智能技术生成

一、问题分析

在动态调试程序的时候,用gdb调试到libc的时候能正确加载符号信息,但同样的程序用IDA调试到libc的时候却缺失了libc中的许多符号,而且对应生成的伪代码可读性极差

这其实是IDA没有正确加载DWARF调试信息所导致的

解决方法是用objcopy把.gnu_debuglink段的内容从

libc-2.23.so改成其他名字,比如

libc-2.23.so.debug,再把.debug文件夹下DWARF调试信息的名字也从

libc-2.23.so改成

libc-2.23.so.debug,这样每次调到libc的时候IDA就能正确加载调试信息了

如图,虽然用的是带调试信息的libc,但是Load debug symbols的时候Output window会输出如下错误信息,这是因为加载了错误的

libc-2.23.so

271ac8a2e40f6ed86f59fe0cda27ba79.png

二、解决方案

切换工作目录到glibc-all-in-one/libs/2.23-0ubuntu10_amd64

然后执行以下命令,对libc进行修改

objcopy -R .gnu_debuglink ./libc-2.23.so

objcopy--add-gnu-debuglink=libc-2.23.so.debug ./libc-2.23.so

mv .debug/libc-2.23.so .debug/libc-2.23.so.debug

再执行以下命令修改要调试的文件,使其加载修改后的libc

patchelf --set-interpreter 你的目录/glibc-all-in-one/libs/2.23-0ubuntu10_amd64/ld-2.23.so 你的程序

patchelf--replace-needed libc.so.6 你的目录/glibc-all-in-one/libs/2.23-0ubuntu10_amd64/libc-2.23.so 你的程序

最后再用IDA来Start或者Attach你的程序

点击右侧的Modules->libc-2.23.so->Load debug symbols

d7be482e542415b78ab23e9eed5ae11f.png

等待左下角显示AU:idle加载完成,此时仍有Name信息加载不全的问题

再点击Modules->libc-2.23.so->Analyze module

然后耐心等待调试信息加载完成

6bca4fae6cd3b2e7a8e9e6ce3e2baca9.png

三、运行结果

最后的效果如下,_IO_FILE_plus_1等结构体都能被很好地识别,在右侧注释中有对应的成员信息,而且伪代码也能正常生成了

a6bdac6582ba9f85fc89f37a5dd72c3c.png

四、注意事项

apt里的patchelf是0.9版本的,有Bug

要自己到Github上编译0.10版本的才能正常使用

五、参考文献

原文:https://www.cnblogs.com/algonote/p/12729657.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值