端子卡舌或端子之间的ESP不同

时间:2017-12-22 20:46:43

标签: assembly shellcode aslr

我已经看到ESP寄存器中的地址在终端的第一个和第二个选项卡之间有所不同。此外,ESP有时会在重新启动VM后发生更改。 ASLR和其他保护措施都已关闭。这里发生了什么?

1 个答案:

答案 0 :(得分:3)

在Linux中,环境变量和args位于进程条目堆栈的顶部(最高地址)。

进入esp时{p> _start指向argc,正好在argv[]之上。 (按值,不是指向argv的指针.CRT启动代码必须lea eax, [esp+4]或其他东西才能获得&argv[0],并将其传递给main。)

高于envp[]。 (我在http://asm.sourceforge.net/articles/startup.html中找到了一个图表。另见the i386 System V ABI documentation。)

禁用ASLR时,映射为堆栈内存的区域的最高地址是固定的,但是不同大小的环境将占用初始esp之上的不同空间。