地址0x8048080的意义

时间:2011-05-08 16:56:22

标签: gdb nasm

为什么当我在gdb中调试asm源时,为起始入口点选择的地址为0x8048080?这只是一个相对偏移量,而不是指令的实际内存偏移量,对吗?

2 个答案:

答案 0 :(得分:2)

解决0x8048080没有特别重要意义,但地址0x08048000有一个。

后一个地址是默认地址,ld启动Linux / x86上的第一个PT_LOAD段。在Linux / x86_64上,默认值为0x400000,您可以使用“自定义”链接描述文件更改默认值。您还可以使用.text标记更改-Wl,-Ttext,0xNNNNNNNN部分的开头位置。

ld0x08048000开始后,它为程序头添加了空间,并根据其内置的链接描述文件继续链接其余的可执行文件,如果您传入,则可以看到-Wl,--verbose到您的链接线。

对于您的计划,程序标题的大小始终为0x80,因此您的.text部分始终从0x8048080开始,但是没有普遍性。

当我链接一个简单的int main() { return 0; }程序时,我会&_start == &.text0x80483000x8048178 0x8048360,具体取决于我使用的编译器。

答案 1 :(得分:1)

0×8048080是Linux ld链接器使用的虚拟内存中的默认入口点。您可以将其更改为您想要的任何内容。

了解更多详情,请查看:http://eli.thegreenplace.net/2011/01/27/how-debuggers-work-part-2-breakpoints/