Анимация
JavaScript
|
Главная Библионтека char GetInputFile () Возвращает имя дизассемблируемого файла long GetLongPrm (long offset); long GetShortPrm(long offset); long GetCharPrm (long offset); success SetLongPrm (long offset,long value); success SetShortPrm(long offset,long value); success SetCharPrm (long offset,long value); IDA предоставляет возможность не только чтения глобальных установок из скриптов, но даже их модификации. Для этого служат целых шесть приведенных выше функций. Это может показаться излишне сложным, но на самом деле все они сводятся к простому чтению \ записи непрерывного фрагмента памяти, в котором IDA и хранит свои настройки. Три функции чтения GetLongPrm, GetShortPrm, GetCharPrm отличаются только возвращаемым значением. Первая возвращает длинное целое, вторая короткое целое и последняя строку. В каком-то смысле все они взаимозаменяемы. Т.е. можно использовать GetLongPrm для чтения короткого целого, если потом «врачую» маскировать старшие биты возращенного значения. Обратите внимание, что GetCharPrm возвращает не строку, оканчивающуюся нулем, а только один байт. Чтение же всей строки целиком приходится осуществлять пошагово в цикле байт за байтом. Или можно воспользоваться GetLongPrm, читая строку по четыре байта за раз (это удобнее да и быстрее). offset это смещение внутри структуры, в которой IDA и хранит настойки. Ниже это будет подробно описано. А пока обратим внимание на то, что IDA не запрещает передавать функции произвольное смещение внутри структуры. Это часто становится источником неочевидных ошибок. Обычно такое происходит, когда используются фиксированные смещения элементов структуры, вместо определенных IDA значений. Ввиду того, что в следующих версиях эта структура, скорее всего, не останется без изменений, то необходимо использовать только определения IDA, иначе за работоспособность скрипта трудно будет поручиться. НАСТОЙКИ IDA Первые три байта хранят в себе слово IDA. Хотя это и не сообщается в документации, но нетрудно убедится, что это именно так и есть. Message("%s%s\n", GetShortPrm(O), GetCharPrm(2) INF VERSION Содержит, переменную типа Short хранящую версию базы IDA. Например: Message("%x \n", GetShortPrm(INF VERSION) INF PROCNAME Хранит восьмисимвольное имя выбранного типа процессора дизассемблируемого текста. Для процессоров серии 80x86 предусмотрены следующие соответствия:
Наиболее разумным (и быстрым) способом извлечения этого поля, вероятно, окажется чтение его с помощью GetLongPrm как показано ниже: Message("%s%s \n", GetLongPrm(INF PROCNAME), GetLongPrm(INF PROCNAME+4) p3ntel ПРИМЕЧАНИЕ: Это поле может только считываться. Все попытки его модификации посредством SetXXXPrm будут проигнорированы. INF LFLAGS Это однобайтовое поле хранит флаги, определяемые по умолчанию в IDP модуле для конкретной модели процессора, которые могут принимать следующие значения: LFLG PC FPP (0x1) Декодировать инструкции арифметического сопроцессора. LFLG PC FLAT (0x2) Плоская модель памяти плавающей запятой для Обратите внимание, что изменение последнего параметра может повлечь за собой непредсказуемую работу дизассемблера и привести к неверному анализу исследуемого файла! Пример использования: auto a; a=GetCharPrm(INF LFLAGS); Message("%x \n",a); if (a & LFLG PC FPP) Message ("Decode FPP \n"); if (a & LFLG PC FLAT) Message ("FLAT MODEL \n"); Decode FPP INF DEMNAMES Однобайтовое поле, определяющие каким образом IDA будет «заманглять» имена. Безболезненно может как считываться, так и модифицироваться. DEMNAM CMNT (0); Отображать замангленные имена как комментарии. Например: SetCharPrm(INF DEMNAMES,DEMNAFM CMNT); .text:00403E79 ?sputc@streambuf@@QAEHH@Z proc near ; streambuf::sputc(int) DEMNAM NAME (1) Заманглять в имена. Например: SetCharPrm(INF DEMNAMES,DEMNAFM NAME); .text:004 03E7 9 public: int thiscall streambuf::sputc(int) proc near DEMNAM NONE (2) Не заманглять и представлять имена как есть. SetCharPrm(INF DEMNAMES,DEMNAFM NONE); .text:00403E79 ?sputc@streambuf@@QAEHH@Z proc near При установке нового значения IDA автоматически начнет реанализ и внесет все изменения в дизассемблируемый текст. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 [ 124 ] 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |