Набор статей и руководств по дизассемблеру IDA


Обнаруженные баги


Вы удивлены, что даже в такой программе как IDA Pro есть баги ? Но ведь это всего лишь программа, почему бы в ней не быть багам ? Кроме того, до сих пор нет единого мнения, какие же именно и сколько инструкций составляют так называемый "x86 ассемблер", и с каждой новой моделью от Intelа и производителей клонов положение только ухудшается... Но обо всём по порядку.

  1. Я нашёл некоторые неопределённые itype (внутренние instruction codes). Это, видимо, не следует считать багом, но всё равно неприятно. Такими являются: 100, 143, 144, 145

  2. Очень большое количество багов описывается в великолепной статье Криса Касперски "ТОНКОСТИ ДИЗАССЕМБЛИРОВАНИЯ" (http://dore.on.ru/articles/disass.pdf). Я не буду пересказывать всю статью, но меня особенно поразило, что IDA не умеет дизассемблировать инструкции, манипулирующие управляющими и отладочными регистрами, несмотря на то, что прекрасно их ассемблирует !
  3. IDA не умеет ассемблировать все 3DNow!, MMX & SSE инструкции, что не мешает ей правильно их дизассемблировать, и даже заполнять для них структуру insn_t.
  4. Ещё более плохие новости: IDA Pro не понимает некоторых слабо документированных (или вообще недокументированных) инструкций. Даже бесплатный Netwide Assembler умеет ассемблировать/дизассемблировать следующие не понимаемые IDA Pro инструкции:

    IBTS XBTS SMI UD1 (часто называют также как UD) UD2

    Между прочим, UD2 описана в 24319102.pdf - "Intel Architecture Software Developer's Manual. Volume 2: Instruction Set Reference".

    Ещё больше недокументированных (и не опознаваемых IDA Pro) инструкций можно найти в этом документе от Potemkin's Hackers Group: http://d1.ifmo.ru/library/dosint/OPCODES/OPCODES.HTM

    Краткий перечень не опознаваемых IDA Pro инструкций, но опознаваемых Biew (взять можно на http://biew.sourceforge.net) :

    ПроцессорИнструкцияOpcode

    386umov0F (10-13)
    AMD K6syscall0F 05
    sysret0F 07
    AMD K7pf2iw0F 0F/rm/1C
    pfnacc0F 07/rm/8A
    pfpnacc0F 0F/rm/8E
    pi2fw0F 0F/rm/0C
    pswapd0F 0F/rm/BB
    Cyrix486smintold0F 7E
    Cyrix686rdshr0F 36
    smint0F 38
    wrshr0F 37
    i387SL MobilefnstdwDF E1
    fnstsgDF E2
    Cyrix 487frichopDD FC
    frinearDF FC
    frint2DB FC
    <
    Что из всего этого следует ? Вы всегда должны иметь под рукой все вышеперечисленные документы и не доверять слепо всему, что показывает IDA Pro (особенно когда она помечает кусок памяти как data, хотя Вы уверены, что это code).

    Почему же IDA Pro, коммерческий продукт, проигрывает бесплатным Nasmу & Biew ? Мы имеем классический случай проявления недостатков закрытой системы - исходные код Nasmа & Biew публично доступны, и любой, нашедший баг, легко может его исправить. Код же IDA Pro являет собой жуткую коммерческую тайну, и все вопросы/жалобы могут задавать исключительно зарегистрированные пользователи, причём без всякой надежды на ответ. Происходит же это не потому, что Ильфак Гильфанов такой жадный (хотя общаться с ним практически невозможно). Дело в том, что DataRescue - западная компания, и в ней действует западный стандарт на поддержку клиентов. А в этих ISO-стандартах жалобы клиента, не купивший продукт, принципиально не рассматриваются, даже если несчастный клиент нашёл баг в программе управления ядерным реактором, ежеутренне порождающий пару Чернобылей. По моему глубокому убеждению, это не есть правильно, ибо именно такая схема и порождает монстров наподобие Winblows NT или UnixWare 7 - заточены только функции, за которые заплачены деньги. Всё остальное в расчёт просто не берётся, хотя множество серьёзных багов лежат на поверхности, ежедневно отравляя жизнь - и поделать с ними ничего нельзя, ведь это закрытые системы, у Вас просто нет доступа к исходным кодам...


    Содержание раздела