堆栈分配随机偏移 C++ Windows

问题描述

首先这是在 Windows 64 位上。据我了解,一旦您进入一个函数,就会分配堆栈内存。所以在这种情况下,整数应该在开始时分配。由于 ASLR,堆栈的位置在多次运行中会有所不同,但是我希望堆栈限制的偏移量保持不变。我写了一个函数 GetThreadStackAddresses获取当前线程的上下堆栈地址。但是,我注意到整数对堆栈限制的偏移量也非常随机。 Windows 是否也会向堆栈指针添加随机偏移量?还有什么可能导致这种情况?感谢您的回答。

int main()
{
    int someInt = 123;

    Process::Stack stack{};
    if (!Process::GetThreadStackAddresses(GetCurrentProcess(),GetCurrentThread(),stack))
    {
        return 1;
    }
    std::cout << "stackLimit: 0x" << std::hex << std::uppercase << stack.Limit << std::endl;
    std::cout << "stackBase: 0x" << std::hex << std::uppercase << stack.Base << std::endl;
    std::cout << "someInt: (0x" << std::hex << std::uppercase << (uintptr_t)&someInt << ") = " << std::dec << someInt << std::endl;
    std::cout << "someInt Offset to Limit: 0x" << std::hex << std::uppercase << (uintptr_t)&someInt - stack.Limit << std::endl;
    std::cout << "someInt Offset to Base: 0x" << std::hex << std::uppercase << stack.Base - (uintptr_t)&someInt << std::endl;
}

这是我在不同运行中得到的输出

stackLimit: 0x1000FD000
stackBase: 0x100100000
someInt: (0x1000FFCCC) = 123
someInt Offset to Limit: 0x2CCC
someInt Offset to Base: 0x334

stackLimit: 0x5B3B11D000
stackBase: 0x5B3B120000
someInt: (0x5B3B11F88C) = 123
someInt Offset to Limit: 0x288C
someInt Offset to Base: 0x774

stackLimit: 0x52887FD000
stackBase: 0x5288800000
someInt: (0x52887FF9AC) = 123
someInt Offset to Limit: 0x29AC
someInt Offset to Base: 0x654

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)