IDA позволяет вручную определять тип данных для параметров и переменных, определенных во внешних библиотеках типов: Пара вопросов: 1) Откуда он берет эти библиотеки (интересует место хранения и формат). 2) Существует ли возможность создавать библиотеки самостоятельно. Было бы просто замечательно, если, скажем, один раз определить описание vtable, а затем на базе этой инфы IDA самостоятельно переводил смещения в соответствующие ссылки на члены или методы. Заранее спасибо.
Совсем забыл: Возможно ли как-нибудь для структур определить типы C вместо асмовских байта слова и двойного слова, например float, double, чтобы затем при переводе в С-псевдокод они интерпретировались правильно.
>> 1) Откуда он берет эти библиотеки (интересует место хранения и формат). хранится в библиотеке типов в файлах .til с насколько я знаю недокументированным форматом. При сохранении базы пакуется в файл .idb. Чтобы сохранить нужно вручную перенести файл .til из папки с базой и потом подгружать её через окно Type libraries (файл должен быть в папке til). В нем хранятся определения функций, структур и перечислений. >>2) Существует ли возможность создавать библиотеки самостоятельно. конечно, существуют два пути - Сохранить til файл проекта и потом подгружать его - Экспортировать typeinfo в idc файл через меню File->Produce File->Dump typeinfo to IDC также существует утилита tilib которая позволяет создавать отдельные til файлы через парсинг си-хидеров. Те перекрывает функциональность иды, но создает отдельный файл )) также есть возможность автоматом подгружать определенные файлы til/ids при нахождении определенных сигнатур флирта (.sig)
izl3sa Спасибо за подробный ответ. Парсинг С-хидеров - это вообще замечательно, а то меня уже несколько утомляет ввод структур и типов вручную Назрел еще один вопрос: Например, при декомпиляции получаем псевдокод (последовательность floats) Код (Text): float v14; // [sp-54h] [bp-5Ch]@2 float v15; // [sp-50h] [bp-58h]@2 float v16; // [sp-4Ch] [bp-54h]@2 float v17; // [sp-48h] [bp-50h]@2 float v18; // [sp-44h] [bp-4Ch]@2 float v19; // [sp-40h] [bp-48h]@2 float v20; // [sp-3Ch] [bp-44h]@2 float v21; // [sp-38h] [bp-40h]@2 float v22; // [sp-34h] [bp-3Ch]@2 float v23; // [sp-30h] [bp-38h]@2 float v24; // [sp-2Ch] [bp-34h]@2 float v25; // [sp-28h] [bp-30h]@2 float v26; // [sp-24h] [bp-2Ch]@2 float v27; // [sp-20h] [bp-28h]@2 float v28; // [sp-1Ch] [bp-24h]@2 float v29; // [sp-18h] [bp-20h]@2 но мне точно известно, что этот ряд ни что иное, как struct D3DXMATRIX (sizeof(D3DXMATRIX) == sizeof(float)*16). Позволяет ли IDE в окне псевдокода объединить эту последовательность из 16 floats в struct D3DXMATRIX? Это бы несколько улучшило читабельность псевдокода.
хоспаде ) хэкс-рэйс меня никогда не радовал )) и я им не пользуюсь (и не советую). Но полагаю, что о типах он берет инфу из til. Поэтому необходимо просто 1) Добавить структуру D3DXMATRIX в окне структур 2) В окне стэка нужной функции применить эту структуру к локальным переменным с нужного адреса - Alt-Q ну и обозвать как-нибудь подобающе. 3) Есчо раз жмакнуть на f5 ) и посмотреть на вывод.
сейчас посмотрел на 5.5, где поставлен хекс-рэйс. Он не берет инфу из тила к сожалению, но если по типу переменной шелкнуть правой кнопкой мыши, то там интересные пункты будут - Set lvar type (Y), им и можно задавать типы переменных и структур, но автоматом перекрываемые переменные не становятся членами структуры почемуто. Тк не использую хекс-рейс, то мне не хочется разбиратся каким образом его можно заставить нормально работать, есчо раз советую смотреть в асм коде все, оно наглядней, как показывает практика, а сворачиваемость нод в graph view позволяет убрать некоторую избыточность листинга. >>Парсинг С-хидеров - это вообще замечательно, а то меня уже несколько утомляет ввод структур и типов вручную Ctrl-F9 или File->Load File-> Parse C header Но там существует ряд ограничений + необходимо настроить пути поиска, чтобы пользоваться инклудами. Часто приходится править трудные для иды места руками, благо она показывает где именно спотыкается.
Если нужно что-то быстро найти и поправить, то да: асм удобнее. А вот при декомпиляции с последующим переписыванием на C++ этот плагин незаменим Сокращает объем работы в разы. Если бы он еще из PDB инфу о наследовании вытаскивал и расставлял указатели в vtable - цены бы ему не было Это да Уже проверил Да, я обратил внимание. Он еще с макросами работать не умеет. Но, все равно удобнее, чем ручной ввод. А на счет структуры не так страшно. Потом руками поправлю.
В тему. Может кто знает, как задавать такие типы как PVOID? Например, объявлена структура - SOME_STRUCT. Как задать тип PSOME_STRUCT?..
Решил не создавать новую тему, вопрос по макросам в псевдокоде, напр.: Код (Text): LOWORD(x) __SETO__(x,x) и т.п. По поводу LOWORD не сложно догадаться, а вот __SETO__ заводит в тупик. Есть ли какой-нибудь справочник (в официальном мануале не нашел)? Сильно не бейте Я с IDA работаю не так давно
Спасибо, нашел по ключевым словам: #define __SETO__(x, y). Только у меня файла defs.h почему-то не оказалось, как и прочих хидеров Но уже закачал