gpt4 book ai didi

C 缓冲区溢出 - 返回地址不能用 ASCII 表示

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

我试图溢出 64 字节的缓冲区。
通过调用 gets

填充缓冲区

我的理解是总共需要写入65个字节来填充缓冲区,然后再写入另外4个字节来填充栈帧指针。
接下来的 4 个字节应该覆盖返回地址。

然而,我希望写入的地址是804846A

  • 这与 0x0804846A 相同吗?如果是这样,我发现很难输入 04 (^D)
  • 是否应该以相反的顺序输入? (6A 84 04 08)?
    • 我运行的一些初始实验的输入是 ZZZZZ..(64 次)..AAAABBBB最终使 ebp 寄存器成为 0x42414141

有问题的架构是 x86。

更新:我设法使 ASCII 代码 0x040x08 正常工作。问题似乎出在 0x84 上。我尝试从 http://www.ascii-code.com 复制对应于 0x84 的符号这显然是 。然而,C 似乎将此符号解析为大于 1 字节的表示。

我还尝试使用 ä,如 http://www.theasciicode.com.ar 中所述
这也导致表示大于 1 个字节。

最佳答案

您似乎依赖于特定编译器和 CPU 架构的实现细节。例如:

  • 并非所有 CPU 架构都使用帧指针。
  • 不同 CPU 的字节顺序不同,这会影响您是否需要“反转”字节。
  • 堆栈元信息(帧指针等)相对于给定局部变量的位置在编译器之间会有所不同,甚至在使用不同优化选项的同一编译器之间也会有所不同。

关于C 缓冲区溢出 - 返回地址不能用 ASCII 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19528543/

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