2011-01-10 2 views
0

У меня есть исполняемый файл (скажем notepad.exe). Я пытаюсь создать карту функций для этого исполняемого файла. Поэтому, когда я запускаю этот исполняемый файл, он загружается в некоторый адрес (базовый адрес модуля). Теперь каждая функция будет иметь некоторое смещение внутри модуля. Я пытаюсь однозначно идентифицировать каждую функцию по их смещению (где начинается код функции) внутри модуля. Считаете ли вы, что это смещение всегда будет оставаться неизменным, независимо от того, на каком компьютере я запускаю исполняемый файл?Смещение функции внутри модуля остается неизменным всегда?

+0

Неясно, какие нагрузки какие. Просьба уточнить. Кроме того, какова конечная цель? – jweyrich

+0

@jweyrich: Я имел в виду, что процесс загружается внутри памяти. Я не знаю, кто его загружает. конечной целью является однозначная идентификация каждой функции внутри программы по ее смещению. – Bruce

ответ

1

Windows имеет, так как Vista, функцию, известную как рандомизация размещения адресного пространства, где база исполняемых файлов помещается в случайные стартовые адреса. Цель состоит в том, чтобы пресечь некоторые виды атак безопасности. В настоящее время не происходит никакой внутренней рандомизации функций, но нет ничего, что помешало бы этому в новой версии Windows.

+0

Я знаю об ASLR, но я думал, что это было сделано только для загруженных DLL не для исполняемых файлов. Более того, я заметил, что база моего исполняемого файла была одинаковой, даже если я запускаю ее на разных машинах. Итак, по вашему мнению, смещение должно оставаться неизменным, не так ли? – Bruce

+0

@Bruce: справа, смещения должны оставаться неизменными. Microsoft использует инструмент для оптимизации компоновки базовых блоков в своих исполняемых файлах (http://www.microsoft.com/windows/cse/bit_projects.mspx); это в корне противоречит переупорядочению/рандомизации функции, поэтому я ожидаю, что это будет безопасное предположение, что теперь смещения функций являются неизменными. – EmeryBerger

Смежные вопросы