我正在尝试溢出64字节的缓冲区
通过调用gets
我的理解是我需要写入总共65个字节来填充缓冲区,然后写入另外4个字节来填充堆栈帧指针。
接下来的4个字节应该覆盖返回地址。
但是,我想写的地址是804846A
。
0x0804846A
相同吗?如果是这样,我发现很难进入04(^ D)ebp
注册为0x42414141
有问题的架构是x86。
更新:我设法让ASCII代码0x04
和0x08
正常工作。问题似乎与0x84
有关。我尝试从http://www.ascii-code.com复制与0x84
对应的符号,这显然是„
。但是,C似乎将此符号解析为大于1个字节的表示。
我还尝试使用http://www.theasciicode.com.ar中提到的ä
这也导致表示大于1个字节。
答案 0 :(得分:1)
您似乎依赖于特定编译器和CPU架构的实现细节。例如: