我有一个程序让我们称之为“SampleApplication”(只有1个exe文件) . 我将以两种方式浏览这个程序的.text部分
-
从其他程序打开文件“SampleApplication.exe”,浏览 Headers ,查找.text部分并逐字节地将数据写入文件 .
-
运行SampleApplication.exe,其中包含获取其模块指针的指令,通过 Headers 查找它的.text部分,并将此部分逐字节打印到其他文件 .
现在,当我以64位模式编译应用程序时,这些文件是相同的 - 写入的字节是相同的 . BUT when I compile in 32bit mode 有些字节不同 . 我有理由(如下所述)相信这些字节是地址的一部分 . 我的问题是为什么他们不同?
我可以提供的其他信息:
- 当程序在ram中时,始终字节64(dec)和65(dec)(在光盘上)分别变为n和n 1 . 例:
运行程序
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
- 我用反汇编检查了那些字节代表什么 . 它们似乎代表了内存地址 . 例如字节
在ram(注意小endianess)
68 60 24 05 00
push (052460)
在光盘上:
68 60 24 40 00
push (402460)
(40为64的十六进制)
任何人都可以告诉我详细情况发生了什么?我真的需要深入了解这种机制 .