一个小程序的运行
一段简单的代码
main.c
#include<stdio.h>
int sum(int *a, int n);
int array[2] = {
1, 2};
int main()
{
int val = sum(array, 2);
printf("%d\n",val);
return val;
}
sum.c
int sum(int *a, int n)
{
int i, s = 0;
for (i = 0; i < n; i++) {
s += a[i];
}
return s;
}
这是一个很简单的数组求和小程序,我想通过它来了解一下程序执行的一些过程。
程序的的执行和解释
首先我们用gcc尝试着编译一下这段程序。
输入指令gcc -o prog main.c sum.c。
执行结果就是直接生成了一个可执行的名为proc的文件,然后./proc运行这个文件,然后就输出了结果
3
编译和反编译objdump
接着我继续用gcc -S sum.c main.c,运行这个程序,结果就是生成了两个sum.s 和main.s的文件,然后我发现这两个文件可以用文本编辑器vim打开,打开后发现是汇编代码。
.file "sum.c"
.text
.globl sum
.type sum, @function
sum:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -24(%rbp)
movl %esi, -28(%rbp)
movl $0, -4(%rbp)
movl $0, -8(%rbp)
jmp .L2
.L3:
movl -8(%rbp), %eax
cltq
leaq 0(,%rax,4), %rdx
movq -24(%rbp), %rax
addq %rdx, %rax
movl (%rax), %eax
addl %eax, -4(%rbp)
addl $1,