IDA->Listing->SoftIce. Как?

Тема в разделе "WASM.RESEARCH", создана пользователем Oleg_SK, 7 ноя 2004.

  1. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Привет всем!

    Ребята, помогите мне разобраться вот с чем: как сделать так чтобы в SoftIce я мог видеть не голый ассемблерный листинг, а листинг, обработанный мною с помощью IDA? Что-то у меня не получается добиться этого:dntknw: Я делаю так:

    1. С помощью я IDA формирую MAP-файл;

    2. Потом я этот MAP-файл перегоняю в SYM-файл, с помощью утилитки IDASYM, которую я взял с этого сайта;

    3. Далее я этот SYM-файл перегоняю в NMS-файл, с помощью Symbol loader’а;

    4. На следующем шаге я открываю этот NMS-файл в Symbol loader’е и выполняю команду Load. Загрузка проходит нормально.

    5. Теперь я открываю сам EXE-файл и выполняю команду Load. Мне выдается предупреждение: An error occured during symbol translation/load. Load executable anyway? Я соглашаюсь на продолжение загрузки;

    6. Все, SoftIce показывает голый ассемблерный листинг, и я по идее могу (???) переключится в режим показа исходника, сработанного с помощью IDA, нажатием клавиши F3. Но этого переключения почему-то не происходит…

    Почему у меня не получается это сделать? Команда TABLE показывает что моя таблица символов активна, а команда SYM показывает, что исходник, судя по тем символам которые я вижу, загружен. В чем трабла? Может быть это происходит из-за того, что нужен PDB-файл. Если это так, то как мне его получить? (Исходников исследуемой проги у меня нет)



    З.Ы.: IDA PRO v4.5.0.762 PC и SoftIce v4.3.0

    З.З.Ы: Спасайте, я уже несколько дней мучаюсь с этой проблемой…
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    MAP-файл не содержит информации об "исходниках". NMS-файл, полученный из него, будет содержать только глобальные имена.



    Более полно превратить результаты дизассемблирования в NMS-файл позволяет IDA-плагин i2s.
     
  3. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    green

    Большое тебе спасибо за инфу, я этого не знал.
     
  4. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Ты все правильно делал, только exe-ник можно запускать просто так, без лоадера. Главное загрузить nms-файл. Теперь ты должен командой symloc положить таблицу символов на map-карту exe-ника. Т.е. допустим у тебя после ID'ы есть таблица вроде



    0001:00000040 unknown_libname_322

    0001:00000054 @$xp$11System@Byte

    0001:00000058 unknown_libname_323

    0001:00000068 @$xp$11System@Word

    ...

    0002:00000054 Buffer

    0002:00000074 Caption

    0002:000004C0 WndClass

    0002:000004F3 aMsSansSerif

    ... и т.д.



    делаеш так - map32 proga.exe, получаеш к примеру



    proga.exe .text 001B:00400000

    proga.exe .data 0023:00510000

    proga.exe .rsrc 0023:00620000



    теперь ложеш нужные тебе сегменты символов (0001:, 0002:) на нужные тебе секции проги вот так:



    symloc 1 1B 00400000 <- теперь символ @$xp$11System@Byte соответствует адресу 001B:00400054

    symloc 2 23 00510000 <- символ WndClass будет соответствовать адресу 0023:005104С0



    символы должны сразу появиться на экране. Надеюсь понятно пояснил?
     
  5. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Э-ээ, привет...
     
  6. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Godness

    Извини за задержку с ответом, я был в off-line... Спасибо за объяснение. Я сейчас попробую это сделать, и позже сообщу, что получилось... Кстати, сразу возникло два вопроса:

    1. Я так понимаю, что подобным образом прийдется накладывать каждую строку... Если процедурка не большая, то еще ладно, а что делать, если она большая (к примеру, 500 строк)?

    2. После того как я наложу все символы, как мне сохранить результат? Или в следующий раз все придется делать заново?
     
  7. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Godness

    Все получилось, ну почти все... С метками перехода и именами переменных все OK. Предыдущие два вопроса снимаются:))) Но непонятки все еще остались. Допустим, я вижу в листинге, полученном в IDA следующую инструкцию:

    cmp eax, 111h

    это мне не нравится, и я заменяю значение 111h, на WM_COMMAND и у меня получается

    cmp eax, WM_COMMAND

    все, теперь я хочу эту инструкцию увидеть в SoftICE именно в этом виде, но получаю облом. В символах загруженных в SoftICE вообще нет упоминания о WM_COMMAND... А эта инструкция отображается как обычно

    cmp eax, 111h

    Можно ли с этим что-то сделать или нет?
     
  8. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Привет всем!

    Я сейчас скачал и добавил в IDA новую версию плагина ida2sice_402. И попробовал поработать с ней. И, о чудо, получилось именно то, что мне нужно!!!! В SoftIce я увидел тот же листинг, который был в IDA! Причем со всеми изменениями, которые я туда внес! Одним словом - РУЛЕЗ!!! Причем, те действия, которые я описывал в своем первом посте уже не нужны (точнее, не нужны шаги: 1, 2 и 3), и то, что предложил Godness тоже не понадобилось. Все стало намного проще! green, спасибо за наводку!!!