gpt4 book ai didi

c++ - gdb 与 xxd 转储中的地址

转载 作者:行者123 更新时间:2023-11-28 02:20:50 39 4
gpt4 key购买 nike

我试图在 xxd 转储中找到一行代码。如果我用 gdb 打开可执行文件并在代码行添加断点,它会显示类似 0x8212224 的地址,但我的 xxd 转储仅达到 0x3040080。

有没有办法将 gdb 地址转换为转储中的内容?还是有更好的方法让我在 xxd 转储中获取地址?

最佳答案

I'm trying to find a line of code in an xxd dump.

为了什么?您真正想要实现的目标是什么?

很有可能,您可以使用 GDB 更轻松地实现这一点。

If I open the executable with gdb and add a breakpoint at the line of code, it shows an address like 0x8212224, but my xxd dump only goes as high as 0x3040080.

您需要比这更多地了解很多关于您的可执行文件。

运行此命令:readelf -l your_exe。这将向您显示您的可执行文件中有多个 LOAD 段,并将告诉您这些段在文件中的偏移量开始,这些段应出现在内存中的哪个虚拟地址,它们有多大, 他们应该得到什么样的保护。

例如:

$ readelf -l a.out

Elf file type is EXEC (Executable file)
Entry point 0x80482f0
There are 9 program headers, starting at offset 52

Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
INTERP 0x000154 0x08048154 0x08048154 0x00013 0x00013 R 0x1
[Requesting program interpreter: /lib/ld-linux.so.2]
LOAD 0x000000 0x08048000 0x08048000 0x0056c 0x0056c R E 0x1000
LOAD 0x000f08 0x08049f08 0x08049f08 0x00114 0x00118 RW 0x1000
DYNAMIC 0x000f14 0x08049f14 0x08049f14 0x000e8 0x000e8 RW 0x4
NOTE 0x000168 0x08048168 0x08048168 0x00044 0x00044 R 0x4
GNU_EH_FRAME 0x000490 0x08048490 0x08048490 0x0002c 0x0002c R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
GNU_RELRO 0x000f08 0x08049f08 0x08049f08 0x000f8 0x000f8 R 0x1

这告诉您程序可执行文本(第一个 LOAD 段)出现在内存中的地址 0x08048000 和文件中的偏移量 0。也就是说,xxd 将显示在文件中偏移 0x124 处的指令将出现在内存中的地址 0x08048124 处。

假设您的可执行文件链接到 0x08048000 的默认地址加载,内存中 0x8212224 处的指令将出现在偏移量 xxd 输出中的 >0x1ca224

关于c++ - gdb 与 xxd 转储中的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571207/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com