- 论坛徽章:
- 0
|
最近在看elf文件格式方面的东西,有些地方有点迷惑:
1. 分段是把不同的节放到一起构成一个段,这么做的目的目是什么,有什么用吗?
2. 段里面包含相应的标志, 即程序头里面有如A E W等标志,但是因为两个段可能都包含了同一个节,那如果这个节的权限是只读,但是两个段的标注又不一样,这不就
冲突了么?如PT_LOAD段里面出了section .text还包含了只有A(ALLOCATE MEMROY)的节,那这个PT_LOAD段的标志是R(READ) + E(EXEC) 没有问题吗?
3. .section .data
output:
.ascii "Hello World\n"
.section .text
.globl _start
_start:
movl $1, %eax
movl $8, %ebx
int $0x80
编译: as -o a.o main.s ; ld a.o
读取elf: readelf -S a.out:
为什么data节的虚拟地址是0x8049080, 如果data段是接在text所在的段的后面的话,那虚拟地址应该是08048074(text节的起始地址)+0xc(text节的大小) = 08048080,
而不是0x8049080,为什么要对data段的虚拟地址+0x1000?有什么规定么?
4. 看到elf 的文档里面说: 节区的虚拟地址和文件位置offset要对align取模得到的值相等,为什么要这样?
谢谢大家了~~
六一儿童节快乐^_^
|
|