4

所以我一直在阅读有关缓冲区溢出和 Aleph One 关于堆栈粉碎的文章。我想我什么都懂,除了他的漏洞利用代码中的这一点:

ptr = buff;   
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
   *(addr_ptr++) = addr;

buff 和 ptr 是字符数组。addr 持有一个堆栈指针,该指针指向堆栈开始处内存中的一个位置。bsize 是 buff 的大小。它在做什么?为什么他说 i+=4?他设置 addr_ptr 等于什么,为什么?当我尝试将其打印出来时,我只会得到 NULL。

这是文章的链接:http: //insecure.org/stf/smashstack.html

谢谢。

4

1 回答 1

3

他每次移动 4 个字节以推进一个字(8 位 * 4 字节 = 32 位字)。请注意,他在您的代码示例后面的段落中评论了他的猜测和测试方法。

他在黑暗中射击,试图溢出缓冲区。addr_ptr 被设置为 ptr 的地址,然后在 for 循环中被沿着缓冲区推送。

于 2012-10-04T00:01:46.583 回答