【问题标题】:Choosing the virtual address of the stack in a x64 Windows program在 x64 Windows 程序中选择堆栈的虚拟地址
【发布时间】:2009-07-28 19:16:35
【问题描述】:

我正在开发一个迄今为止一直是 32 位的 Windows 程序代码库。我正在尝试使这个代码库 64 位干净。通过设置“AllocationPreference”注册表值在堆管理器中打开“自上而下”分配非常有助于发现代码错误地将指针强制向下转换为 32 位值(如整数)并返回,从而丢失x64 上指针值的最高有效一半。为了获得类似的调试好处,我想强制我的进程的堆栈虚拟地址远高于 2**32。有没有办法在 Windows Vista x64 上做到这一点?对于它的价值,我正在使用 Visual Studio 2008 来构建这个代码库。

【问题讨论】:

  • 如何开启“top down heap manager”?
  • 为什么不启用警告并在编译时修复它们?

标签: windows stack 64-bit


【解决方案1】:

我不确定 Windows x64 的情况,但我很确定对于任何 64 位应用程序,堆栈指针已经从一个非常大的 64 位地址开始,应用程序代码处于低位地址和堆在中间的某个地方。这或多或少是进程内存的“传统”布局。我知道在我的 MacBook 上,我得到的堆栈指针地址远高于 32 位限制。我建议您编写一个小型测试应用程序来打印堆栈分配变量的地址,这应该可以为您提供堆栈在虚拟内存中的位置的良好参考点。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2011-06-01
    • 2017-12-05
    • 2012-08-09
    • 2012-05-16
    • 2013-10-08
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多