我正在尝试可视化并理解如何利用 mpreferred-stack-boundary(更像是构建代码以在学校中利用它)。通过阅读 gcc 手册,它指出它根据 mpreferred-stack-boundary=number 对齐堆栈,其中 number 是以 2 为底的指数。默认情况下,number=4,因此堆栈的对齐方式为 2^4= 16字节。我不知道是不是咖啡因扰乱了我的大脑,但是我在类中看到的所有 shell 代码注入都要求我们在编译时使用 mpreferred-stack-boundary=2 ,这会将堆栈对齐 4 个字节。那么这是否意味着默认情况下放置在堆栈上的变量会尝试一次填充堆栈 16 个字节?另外,为什么我放置在缓冲区中的 shellcode 在边界设置为 2 时可以工作,但在默认模式下运行时却不起作用?
整个堆栈帧的大小将四舍五入为 16 字节,而不是每个单独的局部变量。 Shellcode 可以以任何一种方式工作,但是代码是针对特定布局编写的,因此您需要针对不同的布局使用不同的 shellcode。 – 小丑
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)