来自wiki 可执行文件和可链接格式:
这些段包含运行时执行文件所必需的信息,而段包含用于链接和重定位的重要数据.整个文件中的任何字节最多只能由一个部分拥有,并且可能存在不属于任何部分的孤立字节.
但是段和段之间有什么区别?在可执行的ELF文件中,段是否包含一个或多个部分?
我正在学习汇编和低级编程,并阅读有关它的书.据说我们可以将任何数据放在elf文件的.text部分中,但当然我们不能因为页面/段的不同权限而改变它.但是没有告诉那里,因为在.text部分内部有数据的原因是什么.许多C++程序员也告诉我g ++编译器
static const char DATA[] = "SOME DATA";
Run Code Online (Sandbox Code Playgroud)
也在.text部分内.我想知道,为什么不将这些数据放在.rodata部分,目的是什么?如果使用.text,那么.rodata中应该存储什么?
主要问题是在长模式下的这种行为.
我不太明白变量如何存储在文本部分以及如何操作它们.不应该所有变量都在.data部分中,并且不是.text部分只读的所有部分吗?那么这段代码是如何工作的呢?
[代码取自Shellcoder的手册 ]
Section .text
global _start
_start:
jmp short GotoCall
shellcode:
pop esi
xor eax, eax
mov byte [esi + 7], al
lea ebx, [esi]
mov long [esi + 8], ebx
mov long [esi + 12], eax
mov byte al, 0x0b
mov ebx, esi
lea ecx, [esi + 8]
lea edx, [esi + 12]
int 0x80
GotoCall:
call shellcode
db '/bin/shJAAAAKKKK'
Run Code Online (Sandbox Code Playgroud)