【问题标题】:Different ESP between terminal tabs or terminals终端标签或终端之间的不同 ESP
【发布时间】:2017-12-22 20:46:43
【问题描述】:

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

【问题讨论】:

  • 堆栈内容可能因执行而异,例如因为环境变量。

标签: assembly shellcode aslr


【解决方案1】:

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

esp 在进入_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 上方占用不同数量的空间。

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 2021-05-02
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2020-05-19
    相关资源
    最近更新 更多