Обнаруженные баги
Вы удивлены, что даже в такой программе как IDA Pro есть баги ? Но ведь это всего лишь программа, почему бы в ней не быть багам ? Кроме того, до сих пор нет единого мнения, какие же именно и сколько инструкций составляют так называемый "x86 ассемблер", и с каждой новой моделью от Intelа и производителей клонов положение только ухудшается... Но обо всём по порядку.
- Я нашёл некоторые неопределённые itype (внутренние instruction codes). Это, видимо, не следует считать багом, но всё равно неприятно. Такими являются: 100, 143, 144, 145
- Очень большое количество багов описывается в великолепной статье Криса Касперски "ТОНКОСТИ ДИЗАССЕМБЛИРОВАНИЯ" (http://dore.on.ru/articles/disass.pdf). Я не буду пересказывать всю статью, но меня особенно поразило, что IDA не умеет дизассемблировать инструкции, манипулирующие управляющими и отладочными регистрами, несмотря на то, что прекрасно их ассемблирует !
- IDA не умеет ассемблировать все 3DNow!, MMX & SSE инструкции, что не мешает ей правильно их дизассемблировать, и даже заполнять для них структуру insn_t.
- Ещё более плохие новости: 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 386 umov 0F (10-13) AMD K6 syscall 0F 05 sysret 0F 07
AMD K7 pf2iw 0F 0F/rm/1C pfnacc 0F 07/rm/8A pfpnacc 0F 0F/rm/8E pi2fw 0F 0F/rm/0C pswapd 0F 0F/rm/BB Cyrix486 smintold 0F 7E Cyrix686 rdshr 0F 36 smint 0F 38 wrshr 0F 37 i387SL Mobile fnstdw DF E1 fnstsg DF E2 Cyrix 487 frichop DD FC frinear DF FC frint2 DB FC
Что из всего этого следует ? Вы всегда должны иметь под рукой все вышеперечисленные документы и не доверять слепо всему, что показывает IDA Pro (особенно когда она помечает кусок памяти как data, хотя Вы уверены, что это code).
Почему же IDA Pro, коммерческий продукт, проигрывает бесплатным Nasmу & Biew ? Мы имеем классический случай проявления недостатков закрытой системы - исходные код Nasmа & Biew публично доступны, и любой, нашедший баг, легко может его исправить. Код же IDA Pro являет собой жуткую коммерческую тайну, и все вопросы/жалобы могут задавать исключительно зарегистрированные пользователи, причём без всякой надежды на ответ. Происходит же это не потому, что Ильфак Гильфанов такой жадный (хотя общаться с ним практически невозможно). Дело в том, что DataRescue - западная компания, и в ней действует западный стандарт на поддержку клиентов. А в этих ISO-стандартах жалобы клиента, не купивший продукт, принципиально не рассматриваются, даже если несчастный клиент нашёл баг в программе управления ядерным реактором, ежеутренне порождающий пару Чернобылей. По моему глубокому убеждению, это не есть правильно, ибо именно такая схема и порождает монстров наподобие Winblows NT или UnixWare 7 - заточены только функции, за которые заплачены деньги. Всё остальное в расчёт просто не берётся, хотя множество серьёзных багов лежат на поверхности, ежедневно отравляя жизнь - и поделать с ними ничего нельзя, ведь это закрытые системы, у Вас просто нет доступа к исходным кодам...
Содержание раздела