Как же бесит, что в случае отсутствия дампа при BSOD, даже в том случае, если была возможность определить имя модуля (оно хотя бы выводится!), не выводится фактическая база загрузки модуля. Какой смысл в virtual offset на современных 64-битных ОС с полноценно работающим ASLR? Бессмысленно знать последние 12 бит адреса? В чем сложность-то написать
(
Read more... )
Comments 25
Reply
Reply
В IDA загрузить и посмотреть код.
Кучу багов в своем/чужом коде так разбирал/находил.
> Так-то вроде логично - вот смещение в развернутом, отмаппированном модуле, где бы он ни был развернут.
Без знания реальной базы мэппинга этот виртуальный адрес = %random%, просто мусор. Ничего не дает вообще.
Вычисление фактического адреса:
RelativeOffset = MappedAddress - AslrMappedImageBase
Дальше в файле: PeImageBase + RelativeOffset
Reply
Вообще, ну её такую жизнь без дампа. Все же возможность "посмертного" дебага пмсм IDA не заменит.
Reply
Reply
Пусть "не-нуб" расскажет как узнать адрес, не имея базы.
Reply
Reply
Это хорошо еще, что в моем случае это access violation, т.е. там операнды, связанные с [].
Но вот реальный пример: драйвер, 36 мегабайт, ~140 подходящих операндов на указанных 12-бит адресах (т.е. отфильтровано уже по самым жестким критериям, осталось ~140 адресов).
Одно дело разобрать баг (пытаться понять причины), когда понимаешь где он происходит, другое дело ПРЕДПОЛАГАТЬ баг в 140 (!) местах - это просто бессмысленная трата времени.
Reply
https://theins.ru/news/242271
Reply
Reply
Leave a comment