Linux系统中main函数的执行过程

1. 问题:Linux如何执行main函数。

本文使用一个简单的C程序(simple.c)作为例子讲解。代码如下,

2. 编译

~#gcc -o simple simple.c

3. 查看可执行文件的基本信息

~#objdump -f simple

simple: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x080482d0

借助objdump这个工具,可以获得可执行文件的一些关键信息。

比如,simple文件的格式是“ELF32”,该文件的起始地址是0x80482d0,,等。

4. 什么是ELF

ELF是Executable and Linking Format的缩写,是Unix上常见的几种目标文件格式(及可执行文件格式)之一。

ELF的头部结构提供了ELF文件的基本信息,其数据结构可以在/usr/include/elf.h 中看到,如下所示:

其中,,e_entry存储了该执行文件的起始地址。

5. 关于起始地址

~#objdump -d simple

该命令可以得到simple的反汇编代码,可以看到,起始地址0x80482d0对应的是_start这个routine。这段代码所做的事情是,将ebp清0,调整esp的值,然后将一些数据压栈,最后调用一个函数。

艰苦能磨练人的意志。

Linux系统中main函数的执行过程

相关文章:

你感兴趣的文章:

标签云: