终端选项卡或终端之间的不同 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。
我发现 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。