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;
}
编译:
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/


0 0
原创粉丝点击