我有一个程序让我们称之为“SampleApplication”(只有1个exe文件)。我将以2种方式阅读这个程序的.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 05 00
push (052460)
在光盘上:
68 60 24 40 00
push (402460)
(40为64的十六进制)
任何人都可以告诉我详细情况发生了什么?我真的需要深入了解这种机制。