我已经看到ESP寄存器中的地址在终端的第一个选项卡和第二个选项卡之间不同。此外,ESP有时会在重新启动虚拟机后发生变化。ASLR和其他保护装置已关闭。这里发生了什么?
发布于 2017-12-23 05:43:28
在Linux中,环境变量和参数位于进程条目堆栈的顶部(最高地址)。
进入_start的esp指向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大小不同的空间量。
https://stackoverflow.com/questions/47947193
复制相似问题