По созданию указателей на структуру в структуре Ida

Тема в разделе "WASM.RESEARCH", создана пользователем neutronion, 15 июн 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Привет! Начал немного дисасмить, столкнулся с такой проблемой:
    Создаю структуру в Ида. В этой структуре есть простые типы int, double
    и т.п. и есть сложные типа других структур. Если структура вложена в другую структуру, то нет проблем в ида это хорошо видно вот так struct_1.struct_2.field1. Однако, есть желание получить такой же вид, но уже
    с указателями на структуру в структуре. К сожалению пока не понял как это сделать, так как пойнтеры в структуре ида им просто присваивает тип dd,
    что естественно неудобно. Как рабочий вариант, я создают на этот указатель коммент, который указывает на реальную структуру, но в коде это не очень удобно отражается. У кого-нибудь есть приемлемое решение как показать структуру в коде, если есть только указатель на эту структуру в другой структуре. Уф. Надеюсь понятно объяснил.
     
  2. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    есть Edit->FieldType->Offset->Offset (struct), но непонятно, что вы хотите увидеть в коде?
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Допустим есть такие структуры:
    Код (Text):
    1. 00000000 mystruct        struc ; (sizeof=0x10)
    2. 00000000 field_0         dw ?
    3. 00000002 field_2         dw ?
    4. 00000004 pport           dd ?
    5. 00000008 RegistryPath    UNICODE_STRING ?
    6. 00000010 mystruct        ends
    7. 00000010
    8. 00000000 ; ---------------------------------------------------------------------------
    9. 00000000
    10. 00000000 PPORT           struc ; (sizeof=0xC)
    11. 00000000 field_0         dd ?
    12. 00000004 field_4         dd ?
    13. 00000008 field_8         dd ?
    14. 0000000C PPORT           ends
    В коде происходит чтение из поля field_4 структуры pport указательн на которую находится в mystruct. В коде это будет выглядеть примерно так:
    Код (Text):
    1.    mov eax,[ebp + mystruct.pport]
    2.    mov edx,[eax + 4]  //здесь поле field_4
    3.     //читается, что не удобно, лучше было
    4.     //бы так:
    5.     mov edx,[mystruct.pport.field_4]
     
  4. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    можно так
    mov edx, [eax + PPORT.field_4]
    правое меню Structure Offset
     
  5. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Это понятно, только тогда это не наглядно, что pport является частью структуры mystruct.
    Получается как-будто это отдельная структура, что запутывает.
     
  6. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    А разве является? там же поле указателя на PPORT (то есть, dd), а не само поле типа PPORT.
    То есть, обращение не mystruct.pport.field_4, а mystruct.pport->field_4.
     
  7. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Верно, вот такого вида и хочется добиться от Иды
     
  8. reversecode

    reversecode Guest

    Публикаций:
    0
    на креклабе есть специальная тема о использовании ida
    где уже помоему все возможные вопросы обсудили
    покрайней мере ваш там тоже есть
    сходите и почитайте
     
  9. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Разобрался. Можно сделать так
    было так:
    Код (Text):
    1. 00000000 mystruct        struc ; (sizeof=0x10)
    2. 00000000 field_0         dw ?
    3. 00000002 field_2         dw ?
    4. 00000004 pport           dd ?
    5. 00000008 RegistryPath    UNICODE_STRING ?
    6. 00000010 mystruct        ends
    стало так:
    Код (Text):
    1. 00000000 mystruct        struc ; (sizeof=0x10)
    2. 00000000 field_0         dw ?
    3. 00000002 field_2         dw ?
    4. 00000004 pport.PPORT           dd ?
    5. 00000008 RegistryPath    UNICODE_STRING ?
    6. 00000010 mystruct        ends
    pport.PPORT теперь тип поля через точку. При щелчке на имени PPORT автоматически выходим на описание этого поля.