Linux下objdump查看C程序编译后的汇编代码
来源:互联网 发布:车削编程 编辑:程序博客网 时间:2024/05/18 02:15
首先要用-g选项编译,再用objdump -S 文件名。
比如一个简单的C程序:
void print(char* content)
{
printf("Content : %sn",content);
}
main()
{
printf("Hello worldn");
print("This is function print().n");
return 0;
}
{
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
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
}
....
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/
0 0
- Linux下objdump查看C程序编译后的汇编代码
- 使用MPLAB编译C程序,查看生成的汇编代码
- Linux下的objdump反汇编工具
- Linux下objdump汇编与C源程序混合显示
- Linux下查看汇编代码
- 在linux下用gcc查看代码的【预处理】,【编译】,【汇编】和【链接】
- Linux下C程序的反汇编
- linux下C语言编译为汇编代码
- linux 下使用 objdump 反汇编
- linux下反汇编objdump实践
- Linux 下使用 objdump 反汇编
- objdump生成可读的汇编代码
- linux 反汇编objdump
- 如何查看JAVA程序的汇编代码
- [编译环境][gcc]16位程序中汇编代码与C语言代码的混合编译
- linux查看汇编代码
- Linux下c程序的编译方法:
- linux下c程序的编译过程
- SWAP空间不足的处理方法
- 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】
- android sharedPreference的用法
- 转:C语言中如何将二维数组作为函数的参数传递
- 【HDOJ 3555】Bomb
- Linux下objdump查看C程序编译后的汇编代码
- Jedis使用
- ThinkAndroid-简单、快速的 Android应用程序的开发框架
- pl/sql developer执行计划详解
- SSI框架搭建
- java读取.properties配置文件的几种方法
- 公钥、私钥、数字签名
- C语言 在已知字符串中找最长单词
- Android : 判断WebView是否已经滚动到页面底端