У меня есть программа, которая позволяет называть ее «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 05 00
push (052460)
находятся на диске:
68 60 24 40 00
push (402460)
(40 является шестнадцатеричным для 64)
Кто-нибудь может рассказать мне подробно, что происходит? Мне действительно нужно глубокое понимание этого механизма.
Задача ещё не решена.
Других решений пока нет …