gpt4 book ai didi

c - GDB检查命令混淆

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:13 25 4
gpt4 key购买 nike

这听起来可能难以置信,但我真的是在尝试理解代码的内部工作原理,而不是仅仅坚持更高层次的概念。

所以我的问题是这样的。我目前正在阅读“黑客攻击和利用的艺术”,当作者在解释 GDB 命令时,他来解释如何检查某个内存地址。

我的问题是命令的输出

(gdb) x/x $eip

我知道 x 代表十六进制,我不明白为什么它会显示:

0x8048384  <main+16>:  0x00fc45c7

如果我运行 i r eip 输出是 0x8048384,那么 x/x $eip 的两个输出不应该是0x8048384?

在相关主题上,诸如此类的目的是什么

(gbd) x/2x $eip

他说是检查同一个地址的多个单元,一个地址怎么会有多个单元?也许我误解了内存地址背后的概念。我认为一个内存位置只能容纳 1 个东西。

如果这看起来是个愚蠢的问题,我再次道歉。我很乐意感谢帮助和进一步研究的链接。我真的很想了解这一点。

最佳答案

在第一个例子(x/x $eip)中,显示的第一个值(0x8048384)是下一条要执行的指令的地址,而显示的第二个值(0x00fc45c7)是在该地址找到的值,即下一条要执行的指令的二进制值。

关于您的第二个示例 (x/2x $eip),“多个单元”不在同一地址,而是从给定地址开始...例如,显示的第一个值(假设 $eip 是与您的第一个示例相同)地址 0x8048384 仍为 0x00fc45c7,但下一个值将是下一个地址 0x8048388 中的任何值。 “x/x”非常适合转储地址范围内的值,即数组中的值等。

关于c - GDB检查命令混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990848/

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