почему раздел .text на диске и в оперативной памяти отличается?

У меня есть программа, которая позволяет называть ее «SampleApplication» (только 1 EXE-файл). Я прохожу раздел этой программы .text двумя способами

  1. Откройте файл «SampleApplication.exe» из другой программы, просмотрите заголовки, найдите раздел .text и запишите байты данных в файл.

  2. Запустите SampleApplication.exe, в котором есть инструкции для получения указателя на его модуль, просмотрите заголовки, чтобы найти его раздел .text, и распечатайте этот раздел побайтно в другой файл.

Теперь, когда я компилирую приложения в 64-битном режиме, эти файлы идентичны — записанные байты одинаковы. НО, когда я компилирую в 32-битном режиме некоторые байты разные. У меня есть причины (описанные ниже) полагать, что эти байты являются частями адресов. У меня вопрос, почему они разные?

Другая информация, которую я могу предоставить:

  1. Всегда байты 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
  1. Я разобрался с разборкой, что представляют эти байты. Кажется, они представляют адрес памяти. Например, байты

в оперативной памяти (обратите внимание, немного порядка)

68 60 24 05 00
push (052460)

находятся на диске:

68 60 24 40 00
push (402460)

(40 является шестнадцатеричным для 64)

Кто-нибудь может рассказать мне подробно, что происходит? Мне действительно нужно глубокое понимание этого механизма.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]