我正在尝试可视化并理解如何利用 mpreferred-stack-boundary(更像是构建代码以在学校中利用它)。通过阅读 gcc 手册,它指出它根据 mpreferred-stack-boundary=number 对齐堆栈,其中 number 是以 2 为底的指数。默认情况下,number=4,因此堆栈的对齐方式为 2^4= 16字节。我不知道是不是咖啡因扰乱了我的大脑,但是我在类中看到的所有 shell 代码注入(inject)都要求我们在编译时使用 mpreferred-stack-boundary=2 ,这会将堆栈对齐 4 个字节。那么这是否意味着默认情况下放置在堆栈上的变量会尝试一次填充堆栈 16 个字节?另外,为什么我放置在缓冲区中的 shellcode 在边界设置为 2 时可以工作,但在默认模式下运行时却不起作用?
最佳答案
整个堆栈帧的大小将四舍五入为 16 字节,而不是每个单独的局部变量。 Shellcode 可以以任何一种方式工作,但代码是为特定布局编写的,因此您需要针对不同的布局使用不同的 shellcode。 – clown
关于c - 了解 mpreferred-stack-boundary=number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27371820/