当前位置:   article > 正文

gcc查看汇编代码_已知汇编代码如下: fun: pushl %ebp movl %esp, %ebp movl 8(%

已知汇编代码如下: fun: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax sarl $2

1.gcc编译C语言程序

  1. #include <stdio.h>
  2. intmain()
  3. {
  4. printf(“helloworld\n”);
  5. return0;
  6. }

把上面的程序存为hello.c,然后用gcchello.c -o hello,然后./hello,即可看到运行结果

2.使用gcc查看汇编代码

先写一个C程序,内容为:

  1. #include <stdio.h>
  2. intsum(int x,int y)
  3. {
  4. intt=x+y;
  5. returnt;
  6. }

使用gcc-S sum.c,会产生sum.s的文件,使用catsum.s打开文件,就可以看到汇编代码

sum:

pushl %ebp

movl %esp,%ebp

subl $16,%esp

movl 12(%ebp),%eax

movl 8(%ebp),%edx

addl %edx,%eax

movl %eax,-4(%ebp)

movl -4(%ebp),%eax

leave

ret

3使用gcc生成目标代码文件,gcc -c sum.c,在当前目录下会产生sum.o的二进制代码,如果要打开这个文件,可以使用反汇编器,objdump-d sum.o,输出结果为:

00000000<sum>:

0: 55 push %ebp

1: 89e5 mov %esp,%ebp

3: 83ec 10 sub $0x10,%esp

6: 8b45 0c mov 0xc(%ebp),%eax

9: 8b55 08 mov 0x8(%ebp),%edx

c: 01d0 add %edx,%eax

e: 8945 fc mov %eax,-0x4(%ebp)

11: 8b45 fc mov -0x4(%ebp),%eax

14: c9 leave

15: c3 ret

这里产生了22个顺序排列的十六进制字节值,左侧为机器执行代码,右边为等价的汇编语言。

4.生成可执行文件的方法

写main()函数,

intmain()

{

return sum(1,2);

}

然后执行命令 gcc  -o obj sum.o main.c

使用命令objdump-d obj,输出为:

080483dc<sum>:

80483dc: 55 push %ebp

80483dd: 89e5 mov %esp,%ebp

80483df: 83ec 10 sub $0x10,%esp

80483e2: 8b45 0c mov 0xc(%ebp),%eax

80483e5: 8b55 08 mov 0x8(%ebp),%edx

80483e8: 01d0 add %edx,%eax

80483ea: 8945 fc mov %eax,-0x4(%ebp)

80483ed: 8b45 fc mov -0x4(%ebp),%eax

80483f0: c9 leave

80483f1: c3 ret

产生的目标文件汇编代码依然占用22个字节,但偏移地址与gcc-S sum.c的不同。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/80492
推荐阅读
相关标签
  

闽ICP备14008679号