繁体   English   中英

堆栈对齐-缓冲区溢出测试

[英]Stack Alignment - Buffer Overflow Testing

我已经做了很多研究,试图理解这个话题,但是仍然有些困惑。 目前,我正在调查缓冲区溢出。 这是我正在查看的功能的示例:

int testFunction(char* sourceBuffer)
{
    unsigned char result = 0;
    char destinationBuffer[512];

    //do some insecure stuff with strcpy()
}

我正在使用以下设置进行编译:

gcc -g -z execstack -fno-stack-protector -o test test.c

据我所知,应该使用这些设置来禁用堆栈保护,canary值和编译器防护。 但是,在检查GDB中的内存时,这就是我的堆栈的外观:

HIGH

sourceBuffer...temp...etc...
RET address [4 bytes]
EBP address [4 bytes]

(8 bytes of mystery memory)

result [1 byte]
destinationBuffer[512 bytes]

LOW

我尝试阅读有关堆栈对齐/填充的文章,这篇文章特别有帮助: 堆栈分配,填充和对齐

默认对齐方式为16字节。 根据该答案,如果我将n = 2更改为看起来可行。 result只是EBP指针开始之前的1个字节。 这将使我能够根据需要利用缓冲区溢出到返回地址中。

我真的很难做到这一点。 如果默认情况下为16,那么堆栈最初是否设置为16个字节,那么RET和EBP指针每个都占用4个字节,所以只剩下8个字节了吗? 我只是对了解这一点而迷失了。

您的堆栈似乎是16字节对齐的。 如果有4个字节的RET和4个字节的EBP,那么您当然需要另外8个字节的填充,以保持16个字节的对齐方式,否则本地函数存储将不会以16个字节的倍数开始,那么您的堆栈就不会是16个字节对齐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM