подскажите, как можно заставить воспринимать содержимое регистра как указатель на структуру, Аналогично директиве ASM-а - assume esi:PTR DRIVER_OBJECT ? Что бы она вместо смещений писала наименования полей структуры ?
Кажись, в ИДЕ такой фичи нет. Да и наверное быть не может - это же динамика, а ИДА только статику отображает.
PsM Ты можешь только переименовать регистр (для отдельной функции). Будет типа ecx_MY_STRUCT. А с полями структуры проблем нет. Описание структуры создаешь сам (если стандартного нет), а потом смещения [ecx+8] меняешь на [ecx+MY_STRUCT.field_8] (Edit -> Operand Type -> offset -> Offset (struct), hotkey T).
PsM Намекни, что в регистр загружается адрес структуры. Т.е. в случае mov reg, offset mem или lea reg, mem опиши mem как структурную переменную (Alt-Q). Если регистр загружается значением, возвращаемым ф-цией, задай соотв. прототип этой ф-ции (Y). По-моему IDA должна просечь.
Спасибо все получилось. Код (Text): ext:00010334 ; int __stdcall DriverEntry(PDRIVER_OBJECT DriverObject) .text:00010334 public _DriverEntry@8 .text:00010334 _DriverEntry@8 proc near .text:00010334 .text:00010334 var_50 = dword ptr -50h .text:00010334 SourceString = word ptr -28h .text:00010334 DeviceName = UNICODE_STRING ptr -8 .text:00010334 DriverObject = dword ptr 8 Для .text:00010334 DriverObject = dword ptr 8 (Edit -> Operand Type -> offset -> Offset (struct), hotkey T) не прокатывает . Может подскажите почему ? И еще попутно вопросик, что есть дополнительно к поставке к IDA 4.8 облегчающее ковыряние драйверов? Драйвер для PCI устройсва. Что можете посоваетовать ?
Еще вопросик подскажиет плиз как Код (Text): .text:00010429 mov [esi+(DRIVER_OBJECT.MajorFunction+8)], offset _dwTreeDrvClose@8 ; dwTreeDrvClose(x,x) привести к такому виду Код (Text): .text:00010429 mov [esi+(DRIVER_OBJECT.MajorFunction+IRP_MJ_CLOSE*4)], offset _dwTreeDrvClose@8 ; dwTreeDrvClose(x,x) ?
PsM нужно завести константы и потом применить их к числу 8 в твоей строке ps: поздно увидел "*4" - как сделать такое - хз
реверсирую драйвер, к PCI плате, написанно с очень большой долей вероятности на MS VC6 хочу сделать драйвер под линух, если конечно позволит время и хватит сил разобраться
PsM Пользуйся "ручным" (Edit -> Operand type -> "Manual..." (Alt-F1)) изменением операндов. Опиши константу 'IRP_MJ_CLOSE', как '2' (например, сделай соответствующий enum), а дальше введи в строке диалога вместо '8' выражение 'IRP_MJ_CLOSE*4'. IDA проверит правильность всего выражения и внесет исправленный операнд в базу. Единственное "но". Если я правильно помню, то IDA "русских" версий 4.7 и 4.8 имеет в этом блоке ошибку, и даже в случае правильного выражения все равно выдает сообщение об ошибке (международная 4.7 работает нормально). Если это так, но ты уверен в правильности, просто проигнорируй ошибку - поставь в диалоге флаг "Allow not matched operand".
PsM А, ну значит IDA её сама подключила. А что собственно интересует? Эта библиотека построена на основе ntddk.h, т.е. содержит определения типов (и макросов) из этого хэдера.
я в IDA не профессионал, разбирался с ней полность сам и могу не знать некоторых элементарных вещей... Я хотелось бы узнать что такое подключить библиотеку типов ntddk ? и еще попутно вопрос. При попытке скормить ntddk.h из микрософтовского DDK она не находит заголовочные файлы, в частности excpt.h, где мне можно указать для IDA пути к include директориям ?
Это значит, что определения из библиотеки становятся доступными для использования. Для этого в окне Type Libraries (Shift-F11) жмешь Ins и выбираешь желаемую библ из списка. Options->Compiler->Include dirs
Спасибо всем за помощь. Возник вопросик очередной вопросик. File/Load file/Parse C header file... Ctrl+F9 Обрабатываю файл - successfully compiled Где можно увидеть результаты обработки? Структуры определенные в обработанном заголовочном файле в IDA я не нашел... Константы определенные в нем тоже ... Может я не правильно понимаю назначение этого пункта ?
PsM Результаты обработки сохраняются в локальной библиотеке типов базы. Т.е. процедура стандартная - Ins->Add standard structure...
спасибо, со структурами все понятно. IDA define обрабатывает ? определения вида: #define ResNoCompression 0x00 ?