Linux下objdump查看C程序编译后的汇编代码

首先要用-g选项编译,再用objdump -S 文件名。
比如一个简单的C程序:
void print(char* content)
{
    printf("Content : %sn",content);
}
main()
{
    printf("Hello worldn");
    print("This is function print().n");
    return 0;
}
编译:
gcc test.c -g
再用objdump看:
objdump -S a.out
....
....
08048368 :
void print(char* content)
{
8048368: 55 push %ebp
8048369: 89 e5 mov %esp,%ebp
804836b: 83 ec 08 sub $0x8,%esp
printf("Content : %sn",content);
804836e: 83 ec 08 sub $0x8,%esp
8048371: ff 75 08 pushl 0x8(%ebp)
8048374: 68 a8 84 04 08 push $0x80484a8
8048379: e8 32 ff ff ff call 80482b0 < printf@plt>
804837e: 83 c4 10 add $0x10,%esp
}
8048381: c9 leave
8048382: c3 ret
08048383:
main()
{
8048383: 55 push %ebp
8048384: 89 e5 mov %esp,%ebp
8048386: 83 ec 08 sub $0x8,%esp
8048389: 83 e4 f0 and $0xfffffff0,%esp
804838c: b8 00 00 00 00 mov $0x0,%eax
8048391: 83 c0 0f add $0xf,%eax
8048394: 83 c0 0f add $0xf,%eax
8048397: c1 e8 04 shr $0x4,%eax
804839a: c1 e0 04 shl $0x4,%eax
804839d: 29 c4 sub %eax,%esp
printf("Hello worldn");
804839f: 83 ec 0c sub $0xc,%esp
80483a2: 68 b6 84 04 08 push $0x80484b6
80483a7: e8 04 ff ff ff call 80482b0 < printf@plt>
80483ac: 83 c4 10 add $0x10,%esp
print("This is function print().n");
80483af: 83 ec 0c sub $0xc,%esp
80483b2: 68 c3 84 04 08 push $0x80484c3
80483b7: e8 ac ff ff ff call 8048368 
80483bc: 83 c4 10 add $0x10,%esp
return 0;
80483bf: b8 00 00 00 00 mov $0x0,%eax
}
....
....
有C代码和汇编的对照,太方便了。Linux确实是学习的天堂。

http://blog.itpub.net/53720/viewspace-813256/


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值