C++ 为什么光盘上的.text部分和ram中的不同?
我有一个程序,让我们称之为“SampleApplication”(仅1个exe文件)。我将以两种方式浏览本程序的.text部分C++ 为什么光盘上的.text部分和ram中的不同?,c++,windows,executable,loader,relocation,C++,Windows,Executable,Loader,Relocation,我有一个程序,让我们称之为“SampleApplication”(仅1个exe文件)。我将以两种方式浏览本程序的.text部分 从其他程序中打开文件“SampleApplication.exe”,浏览标题、查找.text部分并将数据逐字节写入文件 运行SampleApplication.exe,其中包含获取其模块指针的指令,通过标题查找其.text部分,并将该部分逐字节打印到其他文件 现在,当我以64位模式编译应用程序时,这些文件是相同的——写入的字节是相同的但是当我以32位模式编译时,有些字节
a) 64 -> 5, 65 -> 6;
另一个程序执行
b) 64 -> 5, 65 -> 6; // bytes are the same
重新编译sampleApplication,然后再次运行它
c) 64 -> 17, 65 -> 18; // or 31, 32 or 34, 35 or many other combinations
68 60 24 40 00
push (402460)
(40是十六进制表示64)
有人能详细告诉我发生了什么吗?我真的需要深入了解这种机制。地址空间布局随机化?可以停用。我停用了它,仍然是相同的“问题”地址修复。IIRC 64位不需要它们,32位则需要。解码一些指令,看看它们是什么,或者只是调试程序,看看汇编程序。你能详细说明一下“地址修正。IIRC 64位不需要它们,32位需要它们吗?”@RichardCritten如果你能把它变成一个答案,我会很高兴把它标记为最佳答案。
68 60 24 40 00
push (402460)