相关疑难解决方法(0)

为什么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万
查看次数

如何正确使用简单的链接描述文件?可执行文件在运行时获取SIGKILL

我正在尝试了解更深层次的链接过程和链接器脚本...查看binutils文档我发现了一个简单的链接器脚本实现,我通过添加一些命令进行了改进:

OUTPUT_FORMAT("elf32-i386", "elf32-i386",
          "elf32-i386")
OUTPUT_ARCH(i386)

ENTRY(mymain)

SECTIONS
{
   . = 0x10000;
   .text : { *(.text) }
   . = 0x8000000;
   .data : { *(.data) }
   .bss : { *(.bss) }
}
Run Code Online (Sandbox Code Playgroud)

我的程序是一个非常简单的程序:

void mymain(void)
{
  int a;
  a++;
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试构建一个可执行文件:

gcc -c main.c
ld -o prog -T my_script.lds main.o
Run Code Online (Sandbox Code Playgroud)

但如果我尝试运行progSIGKILL在启动期间收到一个.我知道当编译程序并与命令链接时:

gcc prog.c -o prog
Run Code Online (Sandbox Code Playgroud)

最终的可执行文件是该产品也像其他的目标文件crt1.o,crti.ocrtn.o但对于我的情况?使用此链接描述文件的正确方法是什么?

linker gcc linker-scripts

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

为什么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
查看次数

C中的内存起始位置

我正在研究给定进程的内存布局.我注意到每个进程的起始内存位置不是0.在这个网站上,TEXT从0x08048000开始.一个原因可以是使用NULL指针区分地址.我只是想知道是否还有其他好的理由?谢谢.

c memory memory-layout

7
推荐指数
1
解决办法
1518
查看次数