Задав вопрос, не забудьте выслушать ответ
Apr 6, 2008 · CommentsСтранное
Не так давно приходит письмо с вопросом и довольно длинным уже шлейфом ответов и форвардов. Вопрос (мой вольный перевод): «Как в расширении для WinDbg определить разрядность кода в 32-х битном процессе, запущенном под Wow64?» Я в вопросах разработки плагинов для WinDbg не в зуб ногой, но все что касается Wow64 так или иначе касается и меня тоже.
Сканирую «простыню». Первый же ответ на оригинальное письмо говорит, что команда «.effmach» позволяет переключаться между 32-х битным и 64-х битным кодом. Ответ автора вопроса не устроил, и она предположила, что для определения разрядности кода можно сканировать заголовок PE файла. В таком виде это письмо попадает ко мне.
Пишу обстоятельный ответ, мол, заголовок PE файла использовать не получится, потому как в Wow64 процессе некоторые DLL 64-х разрядные, да и для AnyCPU .NET сборок это не работает. Но, говорю, вышеупомянутый «.effmach» это умеет, так почему бы не посмотреть, как это сделано?
В ответ получаю «Спасибо большое за ответ, но «.effmach» не подходит потому и потому. Но вот если я воспользуюсь заголовком PE файла…». Еще через пару писем выясняем, что пресловутый «.effmach» может еще и возвращать текущий режим. то что надо. Ну, думаю, разобрались. Как бы ни так!
Приходит следующее письмо с вопросом: «А можно ли для этой цели использовать функцию IsWow64Process?» Здрасте, приехали!
-
Нет, нельзя.
-
Но вот если я прочитаю заголовок PE файла вот так и вот так, то …
-
Это не работает для Wow64 на Itanium, да и для .NET процессов то же. Почему бы не воспользоваться «.effmach»?
-
А разве это не то же самое, что и IsWow64Process?
-
Нет.
После этого, собеседница, наконец, находит пример кода, который делает то, что нужно. Всего 28 вопросов-ответов и в дамках. Хотя правильный ответ был дан в первом же письме.