linux - 地址0x8048080的意义

标签 linux x86 gdb ld memory-layout

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

最佳答案

地址0x8048080没有特殊意义,但地址0x08048000有特殊意义。

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

ld0x08048000 开始后,它会为程序头添加空间,并继续根据其内置链接描述文件链接可执行文件的其余部分,您可以在可以查看您是否将 -Wl,--verbose 传递到链接行。

对于您的程序,程序头的大小似乎始终为0x80,因此您的.text部分始终以开始0x8048080,但这绝不是通用的。

当我链接一个简单的int main() { return 0; } 程序,我在 0x80483000x80481780x8048360 处得到 &_start == &.text,取决于我使用的编译器。

关于linux - 地址0x8048080的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928869/

相关文章:

linux - git ssh 要求 gitlab 提供密码

c++ - 处理 GLIBC 版本

java - 在 Linux 和 Windows 上编写 Java 文件时的额外新行

程序集 imul 签名

程序集弹出空堆栈

gdb - 堆栈从堆栈中间展开

linux - RS232 控制台通信 - 将波特率设置为 1 MBaud

assembly - 在汇编/编译/链接时构建静态 IDT 和 GDT 所需的解决方案

c - 使用 gdb 调试 Unix 管道

c++ - 无法进入类方法gdb