2016 - 2024

感恩一路有你

shellcode加载器 elf可执行文件如何动态加载一个so?

浏览量:2709 时间:2021-03-12 14:41:33 作者:admin

elf可执行文件如何动态加载一个so?

有三种方法:1。在elf的末尾插入外壳代码,然后修改elf文件的最后一个pt,通过增加段头来加载段的长度。将DT_uinitsection或DT_initarray的指针指向您的外壳代码,这也是一般增强技术的方法。2将此ELF文件a打包到另一个ELF文件B中。在完成B中的操作后,加载a。如果不想将a释放到文件系统中,则必须自己实现链接器。纳加的增援也做了同样的事。三。修改ELF文件中的动态部分并添加一个新的DT类型的部分。所需的节点还应在strsz部分中写入要加载到DT的so的名称,因为ELF文件中的所有地址都是死的,所以可能没有空位置供您插入新节点。您可能需要删除现有节点才能插入新节点。如果您熟悉llvm,那么可以使用llvm将ELF文件转换为与地址无关的LIR语言,然后对其进行修改。

c语言程序经过编译后,每条指令都有一个内存地址,那两个程序如果有相同内存地址的指令怎么办?

将程序的代码、数据和堆栈作为一块完整的砖块。编译器是一个制砖机,它安排了这个砖的内部结构。

划线系统只是一块砖,不会有互相覆盖的矛盾。

如果您运行多任务处理,则会有更多的砖块。但在这个时候,操作系统通常是用来管理砖块的。堆放砖块时,每一块砖块都会给出不同的起始坐标,以确保两块砖块不占一个空间。

早期的DOS操作系统规定每个程序块的高度不应超过1米。编译器制作的每个程序块都使用偏移地址0000H ffffh来区分单元,但是当操作系统将程序块移动到物理内存时,它会给每个程序块一个不同的段起始地址,偏移地址是物理地址。所以没有重叠。

当然,还有编译器。除了构建砖块外,编译器还将生成一个规范标签,告知操作系统砖块的厚度,这样操作系统就可以在不浪费空间的情况下很好地堆叠砖块。不同的操作系统有不同的标签格式,所以windows程序不能直接在Linux下运行。

后来,MMU出现在处理器、内存管理单元中,程序地址空间和物理地址空间之间的转换变得更加复杂。但是,确保不同的程序不覆盖自己的空间是一项基本要求。

程序可能会覆盖其他程序空间,这可能是恶意代码造成的。CPU的安全特性越来越强,这是很少见的。

shellcode加载器 shellcode原理 shellcode是什么

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。