一段可执行程序,如果存在Phdr ,则.text节就会存在于text段中。由于.text节保存了程序代码,所以节类型为SHT_PROGBITS。 .rodata节 .rodata节保存了只读的数据,如一行C语言代码中的字符串。由于.rodata节是只读的,所以只能存在于一个可执行文件的只读段中。因此,只能在text段(不是data段)中找到.ro
ApkModifie..ApkModifier这个apk编辑神器已经更新到1.9,已支持elf(.so)文件的rodata段字符常量修改,但是目前有长度限制,以后慢慢研究。
大部分的section在运行阶段没有被修改的需要,仅供读取或查询,例如符号表、哈希表、只读的代码段.text/.init等 全局数据.data/.bss在运行阶段有被修改的需要,.got和.got.plt在运行时如果做重定位符号地址确定,就也有被修改的需要,这些section被标记为运行时可写 还有些section运行时是否可写由架构自定义。例如.plt...
TBSS段(Thread-Local Storage Block)是ELF文件中的一个特殊段,用于存储线程本地存储(TLS)的未初始化数据。TLS是一种机制,用于在多线程程序中为每个线程分配独立的存储空间,以便线程可以独立地访问和修改这些数据。TBSS段中的数据在程序运行时会被初始化为零或默认值。 TDATA段(Thread-Local Data)也是ELF文件中的...
$ readelf -l a.out# .got在加载的时候,会和.data合并成为⼀个segment,然后加载在⼀起 由于代码段只读,我们不能直接修改代码段。有了GOT表,代码可以被所有进程共享。但在不同进程的地址空间中,各个动态库的绝对地址、相对位置都不同。反应到GOT表上,就是每个进程的每个动态库都有独立的GOT表,所以进程间不...
plt段内。 一般由连接器产生,存在于可执行文件或者动态库文件。 借助这两个辅助段可以动态修改对应.got和.got.plt段,从而实现运行时重定位。 .rel.data 常量区重定位信息 .rel.rodata 数据段重定位信息 详细解读 .text 通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,...
关于添加新区段,可以自己手动修改ELF文件头对应的索引增加区段,可以参见android so手动增加区段。我以前也写过windowsPE增加区段的轮子simpledpack,这次就不再自己造轮子了,直接用lief解析ELF了。这个库逻辑挺清晰的: lief.ELF.parse(path)-> ...
"00000597 R_386_RELATIVE *ABS*":.so文件.data段的第一项用于保存.data本身的位置,g.o的.bss节被安排在了libg.so的0x2018处,所以静态ld根据g.o中的R_386_32重定项,进一步精确了g4在libg.so的0x201c偏移处,但g5的内存地址,还需要加上libg.so的加载地址...
.data:保存了初始化的数据,这是普通程序数据的一部分,可以在程序运行时修改; .rodata:保存了只读数据,可以读但不可以修改,例如编译器将所有出现在printf中的静态字符串封装到该节; .init和.fini:保存了进程初始化和结束时所用的代码,这两个节通常是编译器自动添加的,无需应用程序员关注; ...
ELF格式data、bss、text段内容调查 ELF格式data、bss、text段内容调查 详情参考<<程序员的⾃我修养>> ⼏个特殊的sections说明:1. .bss,该section包含了在内存中的程序的未初始化的数据,当程序开始运⾏时,系统将⽤0来初始化该区域。该section不占⽤⽂件空间,该section type = SHT_NOBITS;2. ....