Сейчас на форуме: _MBK_ (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› установка типа переменной в IDA Pro |
Посл.ответ | Сообщение |
|
Создано: 10 марта 2011 23:28 · Личное сообщение · #1 всем привет. Заранее извиняюсь, если вопрос тривиальный или глупый. Касается он работы с IDA Pro. (сразу скажу что в асме чайник поэтому под правой рукой лежит зубков). Задача стоит дезассемблировать несколько библиотек (если точнее штук 10, но я никуда не тороплюсь). IDA осваиваю методом проб и ошибок. Вопрос вот в чём, почему при установке типа переменной IDA выдаёт ошибку. В частности вот код выданный hex-rays void *v2; // esi@1 int v3; // eax@3 void (__thiscall *v4)(_DWORD, _DWORD, _DWORD, _DWORD); // eax@3 int v5; // esi@5 int v6; // eax@6 int v7; // eax@8 int v8; // [sp+14h] [bp-84h]@3 int v9; // [sp+18h] [bp-80h]@3 int v10; // [sp+1Ch] [bp-7Ch]@3 int v11; // [sp+20h] [bp-78h]@3 int v12; // [sp+24h] [bp-74h]@3 int v13; // [sp+28h] [bp-70h]@3 char v14; // [sp+2Ch] [bp-6Ch]@3 int v15; // [sp+30h] [bp-68h]@3 int v16; // [sp+34h] [bp-64h]@4 v2 = this; if ( *((_DWORD *)this + 2) ) { if ( (*(int (**)(void))(*(_DWORD *)this + 8))() ) { v4 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 4); v13 = 0; v12 = 0; v11 = 0; v10 = 0; v9 = 0; v8 = 0; v4(v2, l_hdc, &v8, &v10); ImageDevice__ImageDevice(&v14, l_hdc, 0); v3 = GdipSetPageUnit(v15, 2); if ( v3 ) v16 = v3; v5 = *((_DWORD *)v2 + 25); if ( v5 ) v6 = *(_DWORD *)(v5 + 4); else v6 = 0; v7 = GdipDrawImagePointRectI(v15, v6, v8, v9, v10, v11, v12, v13, 2); if ( v7 ) v16 = v7; ImageDevice___ImageDevice(&v14); } } к примеру я чётко понимаю что в методе GdipSetPageUnit первым параметром идёт указатель на GpGraphics, но при попытке установить тип для этой переменой IDA пишет - bad declaration ? Ещё почему IDA подцепила часть методов GDI+, а вот структуры описания нет ? Заранее всем спасибо за терпение. ![]() |
|
Создано: 11 марта 2011 13:53 · Личное сообщение · #2 |
|
Создано: 17 марта 2011 17:36 · Личное сообщение · #3 К. Касперский - Искусство дизассемблирования. Там есть всё. Кстати, при компилировании структуры расщепляются на составляющие их переменные, поэтому точно сказать что это - переменные или структура невозможно. А возможно только если это известная библиотечная структура, тогда можно опознать структуру по коду, который её обрабатывает. А вообще на низком уровне структура и несколько переменных - одно и то же. ![]() |
|
Создано: 17 марта 2011 17:41 · Личное сообщение · #4 С классом всё тоже самое... Его можно определить косвенным методом - найти конструктор, деструктор, указатель на таблице виртуальных функций, а главное - он выявляется наличием указателя this в функциях-членах. Причём на ассемблере всё это выглядит как набор переменных и вызовов функций. Поэтому IDA не ошиблась ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› установка типа переменной в IDA Pro |