Анимация
JavaScript


Главная  Библионтека 

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

будут отображаться)

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 m ask

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

return

=return

пояснения

!=""

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

==""

ошибка

ВЗАИМОДЕЙСТВИЕ С ПОЛЬЗОВАТЕЛЕМ ALMA MATER

Изначально IDA проектировалась, как интерактивная среда, то есть тесно взаимодействующая с пользователем.

Однако, для скриптов большинство интерфейсных функций не доступно. Нельзя, например, сконструировать диалог или создать свой пункт меню. В распоряжении пользователя оказывается набор функций, обеспечивающий примитивный ввод - вывод. То есть простейшие диалоговое окна запроса параметров и вывода результатов своей деятельности на экран.



Впрочем, этого в большинстве случаев оказывается достаточно, потому что большинство скриптов предназначено для работы в автономном режиме.

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

Вот для этого и существует набор специальных функций, ютящихся под одной крышей, только потому, что они попали под критерий «взаимодействие с пользователем». В отличие от всех, описанных выше, они не относятся к какому-то определенному объекту и не понятно какой частью архитектуры IDA они являются.

Но они есть, и следовательно, будут тщательно рассмотрены о описаны. Для облегчения понимания введем некоторую дополнительную классификацию, хотя она, конечно, будет весьма условна.

Итак, одна группа функций взаимодействует с курсором на экране. Что есть курсор с точки зрения IDA? Это указатель текущей строки, которая связана с некоторым объектом, точнее с линейным адресом его начала.

То есть при работе с курсором IDA не рассматривает его экранные координаты, а только линейный адрес памяти, на который этот курсор указывает.

Часто бывает так, что несколько строк расположены по одному и тому же линейному адресу.

Например:

.text:00401020

.text:00401020 ; S U B R O U T I N E

.text:00401020

.text:00401020 ; Attributes: library function bp-based frame .text:00401020

.text:00401020 public start

.text:00401020 start proc near

.text:00401020

.text:00401020 var 20 = dword ptr -20h

.text:00401020 var 1C = dword ptr -1Ch

.text:00401020 var 18 = dword ptr -18h

.text:00401020 var 14 = dword ptr -14h

.text:00401020 var 4 = dword ptr -4 .text:00401020

.text:00401020 push ebp

Все эти стоки совершенно идентичны с точки зрения IDA, поэтому в которой бы из них не находился курсор, при попытке определить его положение, всегда вернется адрес 0х401020, что в общем-то неудивительно.

Но вот далеко не однозначно, на какую строку переместится курсор при попытке изменить его положение. Оказывается, что на первую в которой присутствует инструкция или команда.

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

Другая группа функций работает с выделением, то есть отмеченным блоком на экране. Собственно это наиболее популярный способ передачи скрипту входных данных для работы, а точнее диапазона адресов.

Этим заведуют всего две функции, - SelStart и SelEnd. К сожалению, выделение программно доступно «Только на чтение» и выделить регион самостоятельно скрипт не может.

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



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

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

МЕТОДЫ

Функция Назначение

char AskStr (char defval,char prompt)

Запрашивает у пользователя строку

char AskFile (long forsave,char mask,char prompt)

Создает диалоговое окно для выбора имени файла

long AskAddr (long defval,char prompt)

Запрашивает у пользователя адрес

long AskLong (long defval,char prompt)

Запрашивает у пользователя число типа long

long AskSeg (long defval,char prompt

Запрашивает сегмент у пользователя

char AskIdent (char defval,char prompt);

Запрашивает у пользователя ввод имени идентификатора

long AskYN (long defval,char prompt)

Создает модальный диалог Yes \ No \ Cancel

void Message (char format,...);

Выводит строку в окно сообщений

void Warning (char format,...)

Функция выводит предупреждающий диалог

void Fatal (char format,...)

Выводит фатальный диалог

long ScreenEA ();

Возвращает линейный адрес строки, на которой стоит курсор

long SelStart ();

Возвращает линейный адрес начала выделенной области

long SelEnd ();

Возвращает линейный адрес конца выделенной области

success Jump (long ea)

Изменяет позицию курсора в окне дизассемблера

void Wait ();

Функция ожидает конца автоанализа

long AddHotkey(char hotkey, char

Добавляет новую горячую клавишу



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