gpt4 book ai didi

c - 当我在 GDB 中运行程序时,GDB 是如何显示程序的虚拟地址的?

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:53 27 4
gpt4 key购买 nike

我编译了一个简单的代码,然后用 GDB 运行它。

当我在 GDB 中运行我的简单程序时,GDB 会向我显示该程序的虚拟地址(在我的程序的可执行目标文件中定义)。

GDB 也是一个程序。所以GDB有自己的虚拟地址。因为GDB有自己的虚拟地址,当GDB mmap我的简单程序获得虚拟地址时,我的简单程序会在GDB的虚拟地址空间中有不同的虚拟地址。

但是 GDB 没有向我显示该地址。相反,GDB 显示我的简单程序的虚拟地址,它在我的简单程序的可执行目标文件中定义。

这是怎么发生的? GDB是否有虚拟到虚拟地址表?

最佳答案

gdb is a program too. so gdb have its own virtual address. because gdb have its own virtual address, when gdb run my simple program, my simple program will have different virtual address in the gdb's virtual address space.

很困惑。

在任何现代操作系统上,gdb 和您的程序在不同(虚拟)地址空间中运行,它们彼此无关,并且可以以任意方式重叠。

对于非位置无关的可执行文件,GDB 和您的程序都将加载到它们被链接到要加载的虚拟地址。您可以在 readelf -l/path/to/a.out 输出中看到该地址作为第一个 PT_LOAD 段的 VirtAddr。在 Linux/x86_64 上,该地址(默认情况下)是 0x400000

对于位置无关的可执行文件,第一个PT_LOAD段的地址通常为0,可执行文件被重定位。

如果您的二进制文件和 GDB 都是 PIE,它们都将被重定位,但同样它们不共享地址空间,因此可以重定位到完全相同的(虚拟)地址。

关于c - 当我在 GDB 中运行程序时,GDB 是如何显示程序的虚拟地址的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290531/

27 4 0
文章推荐: android - AOSP 4.3 : Emulator not starting after adding a HAL module
文章推荐: javascript - 制作带有链接的可点击
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com