Почему каждый раз, когда я разбираю один и тот же .exe-файл, одна и та же команда находится по тому же адресу? И какой адрес (RAM? HDD? Virtual?)?Адрес инструкции по сборке
ответ
Основная идея состоит в том, что для обеспечения переносимости программ и обеспечения возможности запуска различных программ в одной и той же системе без столкновения то, что вы видите, в основном представляет собой относительные адреса, которые ОС переводит на реальные адреса при запуске программы ,
Причина, по которой вам необходимо иметь адреса, - это инструкции, которые ссылаются на адреса других инструкций, таких как переходы.
Нет причин. Именно так и работал исполняемый/связывающий формат на этом O/S. Каждая архитектура отличается, например, даже на x86 и x64, исполняемые файлы могут быть загружены на случайный виртуальный адрес или один и тот же каждый раз. Дисассемблер будет либо давать смещение в файле, либо виртуальный адрес, который является только базовым адресом, определенным во время выполнения + смещением файла, и, возможно, смещением раздела. Это высоко архитектура зависит, поэтому я не могу дать конкретный ответ ...
Тот факт, что существуют разные способы сделать что-то, вовсе не означает, что нет причин. – danben
@ danben: на x86 данные всегда получают один и тот же виртуальный адрес, потому что инструкции непосредственно указывают на эти VA, более удобно это делать в x86, так вот как это делается. Однако для библиотек виртуальный адрес должен быть перемещаемым, иначе вы столкнетесь с конфликтами. На x64 так же легко ссылаться на относительные адреса. Таким образом, ** нет причин ** использовать прямую адресацию и, таким образом, тот же VA каждый запуск, это просто сделано, потому что именно так разработчикам было похоже на это ... хотя все классные дети в наши дни используют ASLR, поэтому нет как и в случае статического VA. –
Мое единственное дело в том, что вам нужно что-то делать *, чтобы избежать столкновений/повышения безопасности, что, я считаю, ответ на вопрос OP - я не думаю, что он спрашивал о достоинствах одного метода другой. – danben
Я не вижу, как это имеет какое-либо отношение к виртуальным адресам. Загрузчик ОС изменяет адреса функций на основе местоположения загрузки изображения в памяти, независимо от того, как адреса разрешены (фактически или нет). –
Это правда; Я думаю, что я смешивал понятия. Отредактировал мой ответ, чтобы удалить эту часть. – danben