免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10276 | 回复: 5
打印 上一主题 下一主题

[函数] 使用GDB如何查看某个函数的机器码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-21 14:20 |只看该作者 |倒序浏览
原始函数:

int   getx(int   x,int   y)  
{  
  return   x+y;  
}  

使用GDB查看 该函数的汇编代码

(gdb) disassemble getx


Dump of assembler code for function getx:
0x08048470 <getx+0>:    push   %ebp
0x08048471 <getx+1>:    mov    %esp,%ebp
0x08048473 <getx+3>:    mov    0xc(%ebp),%eax
0x08048476 <getx+6>:    add    0x8(%ebp),%eax
0x08048479 <getx+9>:    leave  
0x0804847a <getx+10>:   ret   
End of assembler dump.


请问不使用汇编机器码对照表的情况下,怎么才能直接在GDB中直接查看到这个函数的机器码?或者如何从原始的二进制文件或是运行时内存中查看到机器码呢?

论坛徽章:
0
2 [报告]
发表于 2006-12-21 14:47 |只看该作者
原帖由 shineyear 于 2006-12-21 14:20 发表
原始函数:

int   getx(int   x,int   y)  
{  
  return   x+y;  
}  

使用GDB查看 该函数的汇编代码

(gdb) disassemble getx


Dump of assembler code for function getx:
0x08048470 <get ...


看反汇编还是用objdump出来,用gdb设断点,然后打印寄存器的值。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2006-12-21 15:31 |只看该作者
有汇编码对照多好,为什么不要呢?

论坛徽章:
0
4 [报告]
发表于 2006-12-21 15:54 |只看该作者
原帖由 zx_wing 于 2006-12-21 14:47 发表


看反汇编还是用objdump出来,用gdb设断点,然后打印寄存器的值。




objdump 没用过,能讲的详细一些吗?谢谢

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2006-12-21 15:55 |只看该作者
man odpdump
objdump -D a.out看看

论坛徽章:
0
6 [报告]
发表于 2006-12-21 17:21 |只看该作者
哦,已经可以了,我使用的是 objdump --disassemble --show-raw-insn filename 这样可以把汇编和机器码一起打印,并带有函数名,可以很方便的找到对应函数的机器码,谢谢各位!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP