C0nceal

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

我记得当初有写这个在某个地方啊= =找不到了...
就是一些二进制文件知识和exp中一些代码
在libc中,就开始很常见的使用elf=ELF('/pwn')
write_plt=elf.plt['write']
......got.....got.........这两是用来查询[]内函数的plt和got的地址并赋值给左边变量,还有相似的main=elf.sym['main']也是一样的。

text:这个表段包含程序的可执行指令,也就是代码段。它是可执行文件中最重要的部分之一,包含了程序的逻辑和功能实现
data:这个表段用于存储程序中已初始化的全局变量和静态变量。它们在程序运行时会被加载到内存中,并保持其值不变,直到程序显式地修改它们

plt:.plt 是程序链接表,它包含用于动态链接的跳转指令。当程序调用一个外部函数时,如果这个函数是动态链接的,那么程序会首先跳转到 .plt 中相应的条目。每个 .plt 条目包含一个跳转到 .got.plt(全局偏移表)中相应条目的指令,以及一些用于动态链接器解析函数地址的指令。.plt 的第一个条目通常用于动态链接器的解析函数 _dl_runtime_resolve,而后续的条目则用于具体的外部函数调用
plt.got:.got 包含全局变量的地址。对于动态链接的程序,.got.plt(注意与 .got 区分)用于存储动态链接过程中解析出的外部函数的地址。在程序第一次调用外部函数时,.got.plt 中存储的是 .plt 中相应条目的地址,而不是实际的函数地址。动态链接器在解析过程中会将 .got.plt 中的地址更新为实际的函数地址,以便后续调用时直接跳转到正确的函数(这就是为毛libc一定要知道这两的原因么)
extern:extern 是一个关键字,用于在程序中声明一个变量或函数是在另一个文件中定义的。使用 extern 声明的变量或函数,可以在当前文件中被访问,但其定义和分配存储空间是在程序的其他部分。这在多文件编程中非常有用,允许一个文件中的代码访问另一个文件中定义的全局变量或函数

bss:包含未初始化的全局变量和静态变量,这个节在文件中不占用空间,但在内存中会被初始化为零
rodata:包含只读数据,如字符串常量
symtab:符号表,包含文件中定义的所有符号(函数、变量等)
strtab:字符串表,通常用于存储符号表中的字符串
init 和 fini:包含程序初始化和终止时执行的代码
got:全局偏移表,用于支持位置无关代码

呃,差不多是这点。

posted on 2024-11-18 18:19  C0ncea|  阅读(2)  评论(0编辑  收藏  举报