全部博文(930)
分类: C/C++
2008-10-16 22:55:32
节头部表
|
.strtab
|
.line
|
.debug
|
.rel.data
|
.rel.text
|
.symtab
|
.bss
|
.data (3)
|
.rodata
|
.text (1)
|
ELF头
|
节
|
含义
|
.text
|
已编译程序的机器代码
|
.rodata
|
只读数据,如pintf和switch语句中的字符串和常量值
|
.data
|
已初始化的全局变量
|
.bss
|
未初始化的全局变量
|
.symtab
|
符号表,存放在程序中被定义和引用的函数和全局变量的信息
|
.rel.text
|
当链接器吧这个目标文件和其他文件结合时,.text节中的信息需修改
|
.rel.data
|
被模块定义和引用的任何全局变量的信息
|
.debug
|
一个调试符号表。
|
.line
|
原始C程序的行号和.text节中机器指令之间的映射
|
.strtab
|
一个字符串表,其内容包含.systab和.debug节中的符号表
|
#include
#include
#include
int z = 9;
int a;
static int b =10;
static int c;
void swap(int* x,int* y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int x=4,y=5;
swap(&x,&y);
printf(“x=%d,y=%d,z=%d,w=%d\n”,x,y,z,b);
return 0;
}
|
变量
|
存储区域
|
a
|
.bss
|
b
|
.data
|
c
|
.bss
|
x
|
stack
|
y
|
stack
|
temp
|
stack
|
z
|
.data
|
swap
|
.text
|
main
|
.text
|
x=……
|
.rodata
|
.file "var.c"
.globl z
.data #数据段
.align 4
.type z, @object
.size z, 4
z:
.long 9
.align 4
.type b, @object
.size b, 4
b:
.long 10
.text #代码段
.globl swap
.type swap, @function
swap:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl (%eax), %eax
movl %eax, -4(%ebp)
movl 8(%ebp), %edx
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, (%edx)
movl 12(%ebp), %edx
movl -4(%ebp), %eax
movl %eax, (%edx)
leave
ret
.size swap, .-swap
.section .rodata #只读段
.LC0:
.string "x=%d,y=%d,z=%d,w=%d\n"
.text #代码段
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $4, -4(%ebp)
movl $5, -8(%ebp)
leal -8(%ebp), %eax
movl %eax, 4(%esp)
leal -4(%ebp), %eax
movl %eax, (%esp)
call swap
movl b, %eax
movl %eax, 16(%esp)
movl z, %eax
movl %eax, 12(%esp)
movl -8(%ebp), %eax
movl %eax, 8(%esp)
movl -4(%ebp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
movl $0, %eax
leave
ret
.size main, .-main
.comm a,4,4
.local c
.comm c,4,4
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)"
|
字段名
|
含义
|
Num
|
序号
|
Value
|
符号地址。
可重定位目标文件:距定义目标文件的节的起始位置的偏移
可执行目标文件:一个绝对运行的地址
|
Size
|
目标的大小
|
Type
|
要么是数据,要么是函数,或各个节的表目
|
Bind
|
符号是全局的还是本地的
|
Vis
|
目前还没有查到资料,待以后改正
|
Ndx
|
通过索引来表示每个节
ABS:不该被重定位的符号
UND:代表未定义的符号(在其他地方定义)
COM:未初始化的数据目标
|
Name
|
指向符号的名字
|
……
.comm a,4,4
.local c
.comm c,4,4
……
|