节头部表 |
.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<stdio.h> #include<string.h> #include<stdlib.h> 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 …… |
文章评论(0条评论)
登录后参与讨论