Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Long FindText (long ea,long flag,long y,long X,char str);

Эта очень полезная и мощная функция для глобального поиска подстроки во всем дизассемблируемом тексте. Сюда входят не только строковые выражения, но и символьное представление инструкций, имен, комментариев, меток и перекрестных ссылок. Словом, равносильно тому, как если бы мы вывели результат работы в дизассемблера в LST файл - отчета и искали бы в нем требуют подстроку.

Заметим, что чаще все же так и поступают потому что то FindText работает достаточно медленно и не поддерживает символы-джокеры, как, например hiew. Очень часто критерии поиска настолько сложны, что не могут быть реализованы через ‘FindText’. Поэтому приходится прибегать к созданию хитрых скриптов для весьма изощренного поиска.

Однако, в ряде случаев ‘FindText’ все же хватает для повседневых задач и легче использовать несколько вызовов этой функции с разными параметрами, чем прибегать к нештатным средствам.

Младший бит флага задает направление поиска. Если он установлен, то поиск будет идти от младших адресов к старшим и наоборот.

Первый, считая от нуля, бит флагов указывает на чувствительность функции к регистру. Если он установлен, то заглавные и строчечные символы будут различаться.

Координаты ‘x’ и ‘y’ применимы только к многострочным комментариям (ExtLinA\ExtLinB) в остальных жу случаях они игнорируются и могут быть равны нулю.

‘srt’ задает подстроку поиска.

seg000:005A 88 04 mov [si], al

seg000:005C 46 inc si

seg000:005D E2 E7 loop loc_0_46

seg000:005F BE EC 01 mov si, 1ECh

seg000:0062 E8 78 00 call sub_0_DD

Message("%x \n",

FindText(0x1005A,1,0,0,"loop")

);

1005D

В случае ошибки поиска функция возвращает константу BADADDR.

Операнд

пояснения

ea

Линейный адрес

flag

==flag

Направление поиска

1

Поиск «вперед»

0

Поиск «назад»

Return

==return

Пояснения

!=BADADDR

Линейный адрес найденного текстового вхождения

==BADADDR

Ошибка

Char Demangle(char name, long disable_mask)

Функция «размангляет» переданное ей имя name в соответствии с заданными настойками disable_mask (см. таблицу ).

Если функция не может разманглить имя, она возвращает пустую строку. IDA Pro поддерживает спецификации Watcom, Microsoft и Borlad. Перечни символов используемых для замангления имен содержатся в поле “MangleChars” конфигурационного файла <ida.cfg>

MangleChars = "$:?([.)]" // watcom

"@$%?" // microsoft

"@$%"; // borland

Пример использования:

Message(“>%s\n”,Demangle(“??1streambuf@@UAE@XZ”, MNG_DEFNONE));

a) вызов функции Demangle для «размангления» имени “??1streambuf@@UAE@XZ”

>public: virtual __thiscall streambuf::~streambuf(void)

b) результат

флаг

#

пояснения

MNG_NOPTRTYPE

0x00000001

не показывать ни far, ни near, ни huge модификаторы

MNG_DEFNEAR

0x00000000

не показывать near модификатор

MNG_DEFFAR

0x00000002

не показывать far модификатор

MNG_DEFHUGE

0x00000004

не показывать huge модификатор

MNG_DEFNONE

0x00000006

показывать модификаторы near, far, huge (если установлен MNG_NOPTRTYPE. модификаторы не будут отображаться)

MNG_NODEFINIT

0x00000008

не показывать ничего, кроме главного имени

MNG_NOUNDERSCORE

0x00000010

не показывать символы прочерка

MNG_NOTYPE

0x00000020

не выполнять преобразование типов передаваемых параметров и базового класса

MNG_NORETTYPE

0x00000040

не показывать тип значения, возвращаемого функцией

MNG_NOBASEDT

0x00000080

не показывать базовый тип

MNG_NOCALLC

0x00000100

нигде не преобразовывать типы

MNG_NOSCTYP

0x00000400

не показывать ключевые слова public, private, protect

MNG_NOTHROW

0x00000800

не показывать описатель throw

MNG_NOSTVIR

0x00001000

не показывать ключевые слова static и virtual

MNG_NOECSU

0x00002000

не показывать ключевые слова class, struct, union, enum

MNG_NOCSVOL

0x00004000

не показывать ключевые слова const и volatile

MNG_NOCLOSUR

0x00008000

не показывать ключевого слова __closure

MNG_SHORT_S

0x00010000

заменять signed int на sint

MNG_SHORT_U

0x00020000

заменять unsigned int на uint

MNG_ZPT_SPACE

0x00040000

не показывать пробелы после запятых

MNG_IGN_ANYWAY

0x00080000

игнорировать суффикс _nn в конце имен

MNG_IGN_JMP

0x00100000

игнорировать префикс j_ в начале имен

MNG_MOVE_JMP

0x00200000

переносить префикс j_ и в замангленные имена

Это две предварительно определенные сокращенные и полные формы записи. Для просмотра и модификации активируйте пункт меню (~Options\ Demangled names...)

??? #верстальщику – change table

аргумент

пояснения

name

замангленное имя

disable_mask

маска (смотри таблицу ???)

return

=return

пояснения

!=””

размангленное имя

==””

ошибка

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]