Memory 在gdb中设置断点对地址空间有什么影响?

Memory 在gdb中设置断点对地址空间有什么影响?,memory,gdb,breakpoints,Memory,Gdb,Breakpoints,我最近读到一篇关于缓冲区溢出的文章,其中提到设置断点会使内存地址偏移一点。我想前几天我在试图覆盖EIP时遇到了这个问题:当我没有设置断点时,该漏洞似乎有效,但当设置断点时,却导致了segfault。发生了什么事 谢谢 我最近读到一篇关于缓冲区溢出的文章,其中提到设置断点会使内存地址偏移一点 要么你不明白那篇课文在说什么,要么课文错了。很难说这两种可能性中哪一种是正确的,因为您没有提供文本链接或实际引用 更新: “正如我上面所说,我们的回信地址在 堆栈使用C(0x43)。但是,当您将断点设置为

我最近读到一篇关于缓冲区溢出的文章,其中提到设置断点会使内存地址偏移一点。我想前几天我在试图覆盖EIP时遇到了这个问题:当我没有设置断点时,该漏洞似乎有效,但当设置断点时,却导致了segfault。发生了什么事

谢谢

我最近读到一篇关于缓冲区溢出的文章,其中提到设置断点会使内存地址偏移一点

要么你不明白那篇课文在说什么,要么课文错了。很难说这两种可能性中哪一种是正确的,因为您没有提供文本链接或实际引用

更新:

“正如我上面所说,我们的回信地址在 堆栈使用C(0x43)。但是,当您将断点设置为 printf()地址可能会更改。“

那句话是假的。设置断点不能也不会更改存储
%ebp
和返回地址的堆栈位置

设置断点通常不会影响内存布局,但可能会影响页面保护:为了插入断点,调试器通常会执行
ptrace(ptrace\u POKETEXT,…)
。这可能会或可能不会导致断点可写的
.text
页面(取决于操作系统)

发生了什么事

您没有提供足够的数据来回答这个问题。

“正如我上面所说的,我们的返回地址在堆栈上被C(0x43)完全覆盖。但是,当您在printf()上设置断点时地址可能会更改。请确保使用disass main来确定其所在的地址。如果执行步骤,我们可以看到与上次检查相同的结果:”