elf 可执行文件头的入口点
Entry Point of elf executable header
为什么 elf 的入口点是 0x8048320.
来自 This question, its the virual address used by the operating system kernel to map the process. But From This,映射进程(在 x86 处理器中)的虚拟地址是 0xc0000000
(用户 [ 的低 3GB =18=] 和内核的上 1GB space)。现在这个 0x8048320 起点地址背后的理论是什么。不应该是 0c0000000h
??
此致,
入口点不是可执行文件映射的开始。它是程序启动时将是运行的第一条指令的地址。因此,它通常位于 .text
部分的中间。
如果您使用 GCC 或兼容的编译器,它将是 libc
中函数 _start
的地址。那就是最终会调用你的 main()
.
的函数
根据您的示例,0x8048320
基地址 可能是 0x8000000
而 _start
的偏移量将是 0x48320
.
但是在我的机器中:
$ readelf -h /usr/bin/ls | grep Entry
Entry point address: 0x404030
所有这些虚拟地址通常由编译器 and/or 链接器决定。
为什么 elf 的入口点是 0x8048320.
来自 This question, its the virual address used by the operating system kernel to map the process. But From This,映射进程(在 x86 处理器中)的虚拟地址是 0xc0000000
(用户 [ 的低 3GB =18=] 和内核的上 1GB space)。现在这个 0x8048320 起点地址背后的理论是什么。不应该是 0c0000000h
??
此致,
入口点不是可执行文件映射的开始。它是程序启动时将是运行的第一条指令的地址。因此,它通常位于 .text
部分的中间。
如果您使用 GCC 或兼容的编译器,它将是 libc
中函数 _start
的地址。那就是最终会调用你的 main()
.
根据您的示例,0x8048320
基地址 可能是 0x8000000
而 _start
的偏移量将是 0x48320
.
但是在我的机器中:
$ readelf -h /usr/bin/ls | grep Entry
Entry point address: 0x404030
所有这些虚拟地址通常由编译器 and/or 链接器决定。