IDC

Тема в разделе "WASM.RESEARCH", создана пользователем sergegers, 21 ноя 2011.

  1. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    Как в IDC скрипте добавить к структуре поле, которое будет оффсетом? Или конвертировать? Вручную это делается Edit->Field Type->Offset->Offset (Data Segment) или Hot Key "O"
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Код (Text):
    1. struc_id = GetStrucIdByName("имя_структуры");
    2. AddStrucMember(struc_id, "имя_поля", смещение_в_структуре, FF_DWRD | FF_0OFF | FF_DATA,  0, 4, -1, 0, REF_OFF32);
    Если поле уже существует, SetMemberType аналогично
     
  3. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    спасибо. примерно так пытался делать, но, видимо, где-то ошибся в параметре
     
  4. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    Ещё вопрос. Мне нужно скопировать поле из одной структуры в другую. Существует ли функция, обратная SetMemberType, что-то вроде GetMemberType? Или, может быть, существуют функции работающие напрямую с C типами. Судя по интерфейсу, такие должны быть.
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    GetMemberQty и GetMember[Name|Flag|Offset|Size] в цикле с GetStrucNextOff? Про C-типы не понял. Вопрос про LoadTil/Til2Idb? Или про "Parse c header file"?
     
  6. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    Вопрос именно про IDA структуры. я хочу скопировать поле из одной IDA структуры в другую.
    Ну скажем у меня тип поля char * или WORD или MyStruct или void (__thiscall *MyFunc)(MyType *this, int iMyArg). Размер я могу узнать, а C тип, если это не структура, то как?
    Руками это можно сделать так: поставить курсор на поле структуры, затем "Y", появится формочка "Enter the type declaration". Туда можно ввести C тип. Если я введу туда тип, который больше по размеру, чем исходное поле, то соседнее поле смёрджится с изменяемым.
    Идеально было бы иметь функции string GetMemberType(int StructId, int MemberOffset) и SetMemberType(int StructId, int MemberOffset, string Type).
     
  7. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    ну что, никто не в курсе?