日期:2014-05-16  浏览次数:20636 次

objdump导出文件查看方法
本帖最后由 lgbxyz 于 2013-03-16 20:50:57 编辑
※这是一个通过objdump命令导出的文件的一部分。

① 内容被分成3列,除了第三列是汇编外,前2列是什么有 ?
② 当程序执行到9fc04时产生了SIGABRT信号,有什么原因?
PS:__stack_chk_fail_local应该是linux系统的函数吧,程序中没有调用过,什么情况系统会自动调用该函数?
------------------------------------------------------------------------------------
0009fbf0 <__stack_chk_fail_local>:
__stack_chk_fail_local():
   9fbf0: 55                    push   %ebp
   9fbf1: 89 e5                 mov    %esp,%ebp
   9fbf3: 53                    push   %ebx
   9fbf4: e8 37 a0 f6 ff        call   9c30 <__i686.get_pc_thunk.bx>
   9fbf9: 81 c3 fb 5c 00 00     add    $0x5cfb,%ebx
   9fbff: e8 40 9c f6 ff        call   9844 <__stack_chk_fail@plt>
   9fc04: 90                    nop
   9fc05: 90                    nop
   9fc06: 90                    nop
   9fc07: 90                    nop
   9fc08: 90                    nop
------------------------------------------------------------------------------------
------解决方案--------------------
引用:
引用:第一列:内存地址
第二列:汇编对应的机器码
第三列:汇编

再请教一下:
①运行一个out文件,是先将这个out的内容load到内存中了吗?
(因为试过等程序启动后,删除out文件,程序还能正常运行) 

②>>>>>>第一列:内存地址
→是每条汇编语句对应一个内存地址吗?
那么该地址中对应的存储内容就是第二列的……

①这个应该是都被load进去了吧。。另一方面linux系统下的文件系统采用的引用计数的方式,打开一个文件后会+1,,rm一下会-1..只有当引用计数为0时,才真正删除了文件。。正在运行中的文件处于打开状态+1了,所以rm后虽然看不到了,但确实存在。当运行结束后-1,,才会真正删除。
比如用lsof恢复误删除的文件就是利用的此方法。http://tech.ccidnet.com/art/302/20071203/1294921_1.html

②对。