终端选项卡或终端之间的不同 ESP

Different ESP between terminal tabs or terminals

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

在 Linux 中,环境变量和参数在进程入口处位于堆栈的顶部(最高地址)。

esp_start 的入口处指向 argc,在其正上方是 argv[]。 (按值,不是指向 argv 的指针。CRT 启动代码必须 lea eax, [esp+4] 或其他东西才能获得 &argv[0],并将其传递给 main。)

上面是envp[]。 (我在 http://asm.sourceforge.net/articles/startup.html. See also the i386 System V ABI documentation 中找到了图表。)

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