Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VA和内存地址_C++_Memory Address_Portable Executable_Coff - Fatal编程技术网

C++ VA和内存地址

C++ VA和内存地址,c++,memory-address,portable-executable,coff,C++,Memory Address,Portable Executable,Coff,这应该是一个简单的问题:我知道对于PE,VA=RVA+imagebase,现在我试图在反汇编程序中找到一个字符串,正好位于.text部分的0042720E imagebase是400000,2720E是RVA,到目前为止还可以 但为什么在调试器中加载exe时,指令映射的内存是0140720E 0140720E(我在ram中看到的)和0042720E(VA)的区别是FE0000,这是为什么?我遗漏了什么吗?实际上只有两种可能性:发生了重新分配或您的RVA错误。更可能的情况是重新分配,尤其是由于AS

这应该是一个简单的问题:我知道对于PE,VA=RVA+imagebase,现在我试图在反汇编程序中找到一个字符串,正好位于.text部分的0042720E

imagebase是400000,2720E是RVA,到目前为止还可以

但为什么在调试器中加载exe时,指令映射的内存是0140720E



0140720E(我在ram中看到的)和0042720E(VA)的区别是FE0000,这是为什么?我遗漏了什么吗?

实际上只有两种可能性:发生了重新分配或您的RVA错误。更可能的情况是重新分配,尤其是由于ASLR而在windows vista或windows 7上运行时。根据您连接的方式和使用的调试器,可以让调试器调整报告的地址以匹配PE中指定的基本节加载地址,ollydbg就是其中之一(您必须通过ollydbg启动应用程序,对于DLL也是如此)

实际上只有两种可能性:发生重新分配或您的RVA错误。更可能的情况是重新分配,尤其是由于ASLR而在windows vista或windows 7上运行时。根据您连接的方式和使用的调试器,可以让调试器调整报告的地址以匹配PE中指定的基本节加载地址,ollydbg就是其中之一(您必须通过ollydbg启动应用程序,DLL也是如此)

您在什么平台上运行?win32,PE是便携式的executable@Paul:该特定的.exe是否包含基重定位表?您不会相信,但它是使用visual studio 2010构建的hello world应用程序。无论如何,是的,有一个重新定位目录假设您使用VS进行调试,请在调试->窗口->模块中检查映像的基址。默认情况下,Visual Studio中内置的PE将启用地址空间布局随机化。您在哪个平台上运行?win32,PE是可移植的executable@Paul:该特定的.exe是否包含基重定位表?您不会相信,但它是使用visual studio 2010构建的hello world应用程序。无论如何,是的,有一个重新定位目录假设您使用VS进行调试,请在调试->窗口->模块中检查映像的基址。默认情况下,VisualStudio中内置的PEs会启用地址空间布局随机化。这对VS调试器也有效吗?地址似乎是最合适的same@Paul:否,VS调试器不执行任何此类转换;它按原样报告VAs。如果ASLR正在运行,则“模块”窗口应显示加载模块的实际基址,从那里您可以应用RVA。是的,它确实显示添加到RVA的地址,该地址正好给出指令地址。那个地址是什么?imagebase+somethingrandom?@Paul:它只是虚拟内存中操作系统加载程序决定映射模块的位置。当模块选择ASLR并加载到启用ASLR的Windows(Vista+)版本时,加载程序将忽略首选基址(PE可选标头中的ImageBase),而是选择其他位置。我不确定Windows决定新位置的确切过程是否记录在案;我必须用谷歌搜索。这对VS调试器也有效吗?地址似乎是最合适的same@Paul:否,VS调试器不执行任何此类转换;它按原样报告VAs。如果ASLR正在运行,则“模块”窗口应显示加载模块的实际基址,从那里您可以应用RVA。是的,它确实显示添加到RVA的地址,该地址正好给出指令地址。那个地址是什么?imagebase+somethingrandom?@Paul:它只是虚拟内存中操作系统加载程序决定映射模块的位置。当模块选择ASLR并加载到启用ASLR的Windows(Vista+)版本时,加载程序将忽略首选基址(PE可选标头中的ImageBase),而是选择其他位置。我不确定Windows决定新位置的确切过程是否记录在案;我得用谷歌搜索。