反汇编一个简单的C程序并分析

反汇编一个简单的C程序并分析

C 源码:

int g(int x)
{ return x+1;
}

int f(int x)
{ return g(x);
}

int main(void)
{ return f(2) + 3;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

汇编源码:

1 g:
2   pushl   %ebp
3   movl %esp, %ebp
4   movl 8(%ebp), %eax
5   addl $1, %eax
6   popl %ebp
7   ret
8 f:
9   pushl   %ebp
10  movl %esp, %ebp
11  subl $4, %esp
12  movl 8(%ebp), %eax
13  movl %eax, (%esp)
14  call g
15  leave
16  ret
17 main:
18  pushl   %ebp
19  movl %esp, %ebp
20  subl $4, %esp
21  movl $2, (%esp)
22  call f
23  addl $3, %eax
24  leave
25  ret

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

执行过程:(从 main 开始)

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image


原创作品转载请注明出处


http://blog.luoyuanhang.cn

MOOC课程
《Linux内核分析》

Created By 罗远航

luoyhang003@hotmail.com

July 03,2015

文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/46746533

(完)