gpt4 book ai didi

c - 用 gdb 调试 c 程序以显示十六进制地址

转载 作者:太空狗 更新时间:2023-10-29 12:33:02 26 4
gpt4 key购买 nike

我有一个关于调试 C 代码的问题。我做了研究,但它并不令我满意。我知道以下命令:

(gdb) x/x 'address' #show hexadecimal address

(gdb) x/100s 'address' #show next 100 decimals

(gdb) x/10b 0x0804846c-10 #show byte at 0x0804846c-10

(gdb) x/10b 0x0804846c+20 #show byte at 0x0804846c+20

(gdb) x/10x 0x0804846c show 10 addresses at 0x0804846c

(gdb) x/10x $esp #show next 10 addresses at esp register

但我想知道 x/10x $esp - 50 到底做了什么?我明白了吗?是否正确?

“它显示 $esp 之前的 50 个地址到它之后的 10 个地址”如果你告诉我完全纠正我,我将不胜感激...... :(

最佳答案

检查从地址 (ESP-50) 开始的 10 个十六进制单词。

当你执行 $esp-50 时,你在内存中向前看,因为堆栈从最大内存增长到最小内存。

试试这个来更好地理解 gdb 给你的是什么

x/10xw $esp-1 你在这里查看较低的内存地址,你正在从 $esp -1 读取 1byte ($esp -1 不在你的栈帧中,栈从大地址增长到你当前的小地址栈帧在 $esp 处结束,$esp -1 是一些随机内存)

x/10xw $esp//这会打印你真正想看的东西,打印所有从当前 $esp 及以下被压入堆栈的内容

x/10xw $esp+1//对于这个,你将丢失 1 个字节,因为还有 1 个字节被压​​入堆栈,但你正在跳过它

堆叠

 Lower Memory addresses
^$esp -1 random garbadge in memory
^$esp local function variables 0
^$esp +1 local variable 1
^ local variable 2
^ local variable 3
^ local variable 4
Higer Memory Addresses

所以当你说 x/10xw $esp gdb 打印 $esp 以下的所有内容(但下面意味着更高内存地址中的所有内容看图)

关于c - 用 gdb 调试 c 程序以显示十六进制地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189156/

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