У меня есть исполняемый файл (скажем notepad.exe). Я пытаюсь создать карту функций для этого исполняемого файла. Поэтому, когда я запускаю этот исполняемый файл, он загружается в некоторый адрес (базовый адрес модуля). Теперь каждая функция будет иметь некоторое смещение внутри модуля. Я пытаюсь однозначно идентифицировать каждую функцию по их смещению (где начинается код функции) внутри модуля. Считаете ли вы, что это смещение всегда будет оставаться неизменным, независимо от того, на каком компьютере я запускаю исполняемый файл?Смещение функции внутри модуля остается неизменным всегда?
ответ
Windows имеет, так как Vista, функцию, известную как рандомизация размещения адресного пространства, где база исполняемых файлов помещается в случайные стартовые адреса. Цель состоит в том, чтобы пресечь некоторые виды атак безопасности. В настоящее время не происходит никакой внутренней рандомизации функций, но нет ничего, что помешало бы этому в новой версии Windows.
Я знаю об ASLR, но я думал, что это было сделано только для загруженных DLL не для исполняемых файлов. Более того, я заметил, что база моего исполняемого файла была одинаковой, даже если я запускаю ее на разных машинах. Итак, по вашему мнению, смещение должно оставаться неизменным, не так ли? – Bruce
@Bruce: справа, смещения должны оставаться неизменными. Microsoft использует инструмент для оптимизации компоновки базовых блоков в своих исполняемых файлах (http://www.microsoft.com/windows/cse/bit_projects.mspx); это в корне противоречит переупорядочению/рандомизации функции, поэтому я ожидаю, что это будет безопасное предположение, что теперь смещения функций являются неизменными. – EmeryBerger
- 1. Смещение модуля, импортированного внутри функции
- 2. Значение маршрута остается неизменным
- 3. Matplotlib анимация остается неизменным
- 4. Выход остается неизменным
- 5. Почему значение «Список» остается неизменным?
- 6. Session.SessionID остается неизменным после таймаута?
- 7. панель цвет не остается неизменным
- 8. RefCount остается неизменным после вызова AtlUnadvise
- 9. экземпляр модуля внутри всегда блока
- 10. Смещение функции внутри проверяемого метода
- 11. Bool меняется и остается неизменным в Unity
- 12. OpenGl, C#, Тао. Цвет чертежа остается неизменным
- 13. Значение текста остается неизменным после изменения значения
- 14. Якорный наклон остается неизменным после нажатия ссылки
- 15. Выполнение размера окна рабочего стола остается неизменным
- 16. передачи по ссылке, адрес ссылки остается неизменным
- 17. Зацикливание функции внутри модуля
- 18. Смещение функции внутри функции в модуле Python с использованием Mock
- 19. Изменения названия Android, но фрагмент остается неизменным после замены commit
- 20. Размер штрих-кода DataMatrix остается неизменным независимо от полезной нагрузки
- 21. Почему образное изображение остается неизменным при изменении языка в Android?
- 22. Добавить или параметр строки запроса обновления - URL остается неизменным
- 23. Смещение элемента всегда 0
- 24. Как путь переименованного файла остается неизменным в java?
- 25. Использование JavaScript, так что фоновое изображение всегда остается неизменным при прокрутке (плюс другие запросы)
- 26. Вызов функции модуля внутри обратного вызова Nodejs
- 27. Добавить changemenner в ComboBox, когда значение остается неизменным
- 28. Изменение max_upload_filesize в php.ini, но оно остается неизменным в phpMyAdmin
- 29. Оптимизация запроса DB2 - почему вывод bash «time» остается неизменным?
- 30. DataSource остается неизменным после удаления строк в DataGridView
Неясно, какие нагрузки какие. Просьба уточнить. Кроме того, какова конечная цель? – jweyrich
@jweyrich: Я имел в виду, что процесс загружается внутри памяти. Я не знаю, кто его загружает. конечной целью является однозначная идентификация каждой функции внутри программы по ее смещению. – Bruce