【发布时间】:2012-10-03 23:51:35
【问题描述】:
所以我一直在阅读有关缓冲区溢出和 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
谢谢。
【问题讨论】:
-
他不应该使用这样的幻数。告诉你应该是
i += sizeof(*addr_ptr)(即i += sizeof(long))会给你提示吗? -
谢谢,这确实有帮助。所以 4 可能会因系统而异,他基本上是将 addr_ptr 移动到数组的末尾,同时确保有足够的空间放置它?
-
理论上它可以通过系统,在我们将使用的任何系统上几乎可以肯定是 4 或 8,这就是他硬编码 4 的原因。(我认为当替代方案是时应该避免这样做如此简单,就像在这里一样。)
标签: c buffer-overflow