Winapi MapViewOffilex():将应用程序移植到x64是否需要我们为参数lpBaseAddress指定不同的地址(64位)?

Winapi MapViewOffilex():将应用程序移植到x64是否需要我们为参数lpBaseAddress指定不同的地址(64位)?,winapi,visual-c++,64-bit,Winapi,Visual C++,64 Bit,我正在将现有的win32应用程序移植到x64。 在其中一个模块中,我看到一个固定地址作为“lpBaseAddress”参数传递给MapViewOffilex()。传递的值为0x20000000 在其中一个移植指南中,我读到,在移植到x64时,我们应该远离这些“神奇数字”。 但是,使用基址0x20000000的代码是一个遗留代码,它是从许多其他模块调用的,用于共享内存分配。因此,在移植到x64时,我很犹豫是否要更改此地址的值 我想知道移植到x64的代码是否能在相同的基址下正常工作 作为旁注,我还看

我正在将现有的win32应用程序移植到x64。 在其中一个模块中,我看到一个固定地址作为“lpBaseAddress”参数传递给MapViewOffilex()。传递的值为0x20000000

在其中一个移植指南中,我读到,在移植到x64时,我们应该远离这些“神奇数字”。 但是,使用基址0x20000000的代码是一个遗留代码,它是从许多其他模块调用的,用于共享内存分配。因此,在移植到x64时,我很犹豫是否要更改此地址的值

我想知道移植到x64的代码是否能在相同的基址下正常工作

作为旁注,我还看到了当前的(x86)代码链接,即使用/base选项值0x1C000000调用链接器,ie-base:0x1C000000

这是否与我们可以从MapViewOffilex()请求的基址的有效值有关

如有任何见解/想法,将不胜感激

编辑
澄清一下,这个问题本身并不涉及任何地址。我想知道的是,在移植到x64平台时,是否可以重用传递给MapViewOffilex()的32位常量地址。对链接器选项“base”的引用是询问在链接时指定为基址的地址是否与我们传递给MapViewOffilex()的地址lpBaseAddress有任何关系

这有点不成问题。真正的问题是为什么文件必须映射到那个地址,我很难相信将“遗留”代码更改为更灵活是完全不可能的

使用特定的基址调用
MapViewOffilex
,真的非常危险。Windows永远无法保证能够满足该请求,因为即使这只是百分之一的错误(这是最严重的错误,不是吗?),该地址也将被占用。ASLR就是一个很好的例子,或者Windows可能已经把堆放在那里了,或者其他什么


因此,tl;医生:不要那样做。别这样。找到另一种方法。

没有任何细节,没有人能可靠地提供建议you@DavidHeffernan你想要什么样的细节?我很乐意提供任何有助于回答这个问题的细节。除了几个地址,我们没有任何细节。不知道这些地址是什么,为什么文件被映射到内存中,代码是什么样子。@DavidHeffernan我想你还不知道这个问题。这个问题不涉及任何地址本身。简单的问题是,在移植到x64平台时,是否可以重用传递给MapViewOffilex()的32位常量地址。引用链接器选项“base”是为了询问在链接时指定为基址的地址是否与我们在MapViewOffilex()中指定的地址有任何关系。我编辑了这个问题。请撤消你的否决票。在我看来,你没有提出一个恰当的问题。如果没有细节,我们无法告诉你那个地址是否合适。