C程序汇编运行模式简析
作者:网络转载 发布时间:[ 2015/3/9 14:33:30 ] 推荐标签:C 程序 堆栈
1. 汇编
在修习LINUX内核这门课的初始阶段,首先需要掌握的是汇编以及汇编程序对于堆栈的操作。
下面我们来分析一下一个简单地C程序是如何被汇编程序所表达的!
2. 得到汇编代码
首先,我们写一个简单地C程序,命名为exp1.c:
1 #include <stdio.h>
2
3 int g(int x)
4 {
5 return x+3;
6 }
7
8 int f(x)
9 {
10 return g(x);
11 }
12
13 int main()
14 {
15 return f(8)+1;
16 }
程序非常的简单,我们此时再通过编译指令将其编译为汇编程序:
1 gcc –S –o main.s main.c -m32
这样我们得到了这个简单C程序的汇编代码:
1 .file "exp1.c"
2 .text
3 .globl g
4 .type g, @function
5 g:
6 .LFB0:
7 .cfi_startproc
8 pushl %ebp
9 .cfi_def_cfa_offset 8
10 .cfi_offset 5, -8
11 movl %esp, %ebp
12 .cfi_def_cfa_register 5
13 movl 8(%ebp), %eax
14 addl $3, %eax
15 popl %ebp
16 .cfi_def_cfa 4, 4
17 .cfi_restore 5
18 ret
19 .cfi_endproc
20 .LFE0:
21 .size g, .-g
22 .globl f
23 .type f, @function
24 f:
25 .LFB1:
26 .cfi_startproc
27 pushl %ebp
28 .cfi_def_cfa_offset 8
29 .cfi_offset 5, -8
30 movl %esp, %ebp
31 .cfi_def_cfa_register 5
32 subl $4, %esp
33 movl 8(%ebp), %eax
34 movl %eax, (%esp)
35 call g
36 leave
37 .cfi_restore 5
38 .cfi_def_cfa 4, 4
39 ret
40 .cfi_endproc
41 .LFE1:
42 .size f, .-f
43 .globl main
44 .type main, @function
45 main:
46 .LFB2:
47 .cfi_startproc
48 pushl %ebp
49 .cfi_def_cfa_offset 8
50 .cfi_offset 5, -8
51 movl %esp, %ebp
52 .cfi_def_cfa_register 5
53 subl $4, %esp
54 movl $8, (%esp)
55 call f
56 addl $1, %eax
57 leave
58 .cfi_restore 5
59 .cfi_def_cfa 4, 4
60 ret
61 .cfi_endproc
62 .LFE2:
63 .size main, .-main
64 .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
65 .section .note.GNU-stack,"",@progbits
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11