相关疑难解决方法(0)

为什么在x86_64 ABI中选择地址0x400000作为文本段的开头?

文件中.27它说文本段从0x400000开始.为什么选择这个特定的地址?有什么理由吗?相同的地址被选择在GNU ldLinux:

$ ld -verbose | grep -i text-segment
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)

这是令人惊讶的,因为这个地址在32位x86可执行文件中更大:

$ ld -verbose | grep -i text-segment
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)

我读了这个问题,讨论为什么为i386选择了0x080xxxxx地址,但它没有解释x86_64的变化.在这个问题上很难找到任何解释.有人有线索吗?

linux memory x86-64 elf abi

32
推荐指数
1
解决办法
2259
查看次数

为什么ELF执行入口点虚拟地址为0x80xxxxx而不是0x0?

执行时,程序将从虚拟地址0x80482c0开始运行.此地址不指向我们的main()过程,而是指向_start由链接器创建的名为的过程.

到目前为止,我的谷歌研究只是让我得到了一些(含糊的)历史猜测:

有民间传说,0x08048000曾经是由加利福尼亚州圣克鲁斯市的一个团体颁布的*NIX到i386的端口上的STACK_TOP(也就是说,堆栈从接近0x08048000下降到0).这是因为128MB的RAM很昂贵,4GB的RAM是不可想象的.

任何人都可以确认/否认这个吗?

point elf virtual-address-space

19
推荐指数
2
解决办法
1万
查看次数

为什么ELF入口点0x8048000不能通过"ld -e"选项更改?

跟进为什么ELF执行入口点虚拟地址为0x80xxxxx而不是0x0?为什么Linux程序的虚拟内存地址为0x8048000开始?,为什么我不能ld使用与默认值不同的入口点ld -e

如果我这样做,我会得到一个segmentation fault返回代码139,即使对于默认入口点附近的地址.为什么?

编辑:

我会更具体地提出这个问题:

        .text
        .globl _start    
_start:
        movl   $0x4,%eax        # eax = code for 'write' system call   
        movl   $1,%ebx          # ebx = file descriptor to standard output
        movl   $message,%ecx    # ecx = pointer to the message
        movl   $13,%edx         # edx = length of the message
        int    $0x80            # make the system call
        movl   $0x0,%ebx        # the status returned by 'exit'
        movl   $0x1,%eax        # eax = code for …
Run Code Online (Sandbox Code Playgroud)

linker elf memory-layout

10
推荐指数
1
解决办法
7295
查看次数

为什么在将ELF的虚拟地址映射到虚拟空间之前就可以确定它?

链接目标文件以生成ELF文件,并确定其虚拟地址。例如,.text的虚拟地址为0x8048000。当ELF文件要映射到虚拟空间时,另一个ELF已经映射到该地址。操作系统应该做什么?为什么在将ELF的虚拟地址映射到虚拟空间之前就可以确定它的原因。

linux operating-system elf linux-kernel

5
推荐指数
1
解决办法
309
查看次数