微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决堆栈分配随机偏移 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 举报,一经查实,本站将立刻删除。