Главная страница
Навигация по странице:

  • Родственные функции

  • Это повторяемый комментарий

  • Описание функций встроенного языка


    Скачать 2.86 Mb.
    НазваниеОписание функций встроенного языка
    Анкорobraz_mihlenia_-_dizassembler_IDA
    Дата29.09.2022
    Размер2.86 Mb.
    Формат файлаpdf
    Имя файлаobraz_mihlenia_-_dizassembler_IDA.pdf
    ТипСправочник
    #704305
    страница15 из 39
    1   ...   11   12   13   14   15   16   17   18   ...   39

    Это повторяемый комментарий seg000:0105 int 21h ; DOS - PRINT STRING seg000:0105 ; DS:DX -> string terminated by "$" seg000:0107 retn seg000:0107 ; ────────────────────────────────────────────────────────────────────────── seg000:0108 aHello db 'Hello,',0 ; DATA XREF: seg000:0102↑o seg000:0108 ; Это повторяемый комментарий с) результат – повторяемый комментарий создан – теперь он будет отображаться возле всех элементов, ссылающихся на метку aHello (обратите внимание на текст, выделенный в листинге жирным шрифтом)
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес головы элемента любого вида или бестипового байта comment строка повторяемого комментария
    =return пояснения
    ==1 операция выполнена успешно return
    ==0 ошибка
    Родственные функции: MakeComm, ExrLinA, ExtLinB
    Интерактивный аналог: “Edit\Comments\Enter repeatable comment”; <; void ExtLinA(long ea,long n,char line)
    Функция создает строку (или несколько строк) комментариев, отображаемых перед элементом (бестиповым байтом), расположенном по переданному функции линейному адресу ea.
    Комментарий располагается сначала строки и не предваряется символом «точка с запятой», поэтому, его необходимо указать самостоятельно.
    Аргумент n задает номер строки комментария и может принимать значения от 0 до
    500 включительно. IDA отображает комментарии начиная с нулевой до первой пустой строки. Т. е. если созадть нулевую, первую и третью строки комментария, IDA отобразит лишь первые две из них.
    Строка комментария может содержать как символы латиницы, так и символы кириллицы, однако, нормальное отображение кириллицы возможно только в той ипостаси
    IDA, в которой они были созданы.
    Для удаления всех строк комментария достаточно присвоить нулевой строке пустое значение – остальные строки хотя физически и останутся в базе, на экране отображаться не будут..

    144
    Замечание: отсутствие автоматического предварения комментария символом
    «точка с запятой», позволяет, используя данную функцию, помещать в
    ассемблерный листинг директивы и инструкции, заданные пользователем.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 int 21h ; а) исходные данные – требуется разместить комментарий перед инструкцией INT
    21h
    ExtLinA(SegByName(“seg000”)+0x105,0,”; Строка 1”);
    ExtLinA(SegByName(“seg000”)+0x105,1,”; Строка 2”); b) вызов функции ExtLinA для создания двух строк комментария seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 ; Строка 1 seg000:0105 ; Строка 2 seg000:0105 int 21h ; c) результат
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес головы элемента (бестипового байта) перед которым должен быть размещен комментарий n номер строки комментария от 0 до 500 включительно. line строка комментария
    Родственные функции: MakeComm, MakeRptCmt, ExtLinB, DelExtLnA
    Интерактивный аналог: “

    Edit\Comments\Edit extra anterior lines”; void ExtLinB(long ea,long n,char line)
    Функция создает строку (или несколько строк) комментариев, отображаемых после элемента (бестипового байта), расположенного по переданному функции линейному адресу ea.
    Комментарий располагается сначала строки и не предваряется символом «точка с запятой», поэтому, его необходимо указать самостоятельно.
    Аргумент n задает номер строки комментария и может принимать значения от 0 до
    500 включительно. IDA отображает комментарии начиная с нулевой до первой пустой строки. Т. е. если созадть нулевую, первую и третью строки комментария, IDA отобразит лишь первые две из них.
    Строка комментария может содержать как символы латиницы, так и символы кириллицы, однако, нормальное отображение кириллицы возможно только в той ипостаси
    IDA, в которой они были созданы.
    Для удаления всех строк комментария достаточно присвоить нулевой строке пустое значение – остальные строки хотя физически и останутся в базе, на экране отображаться не будут.

    145
    Замечание: отсутствие автоматического предварения комментария символом
    «точка с запятой», позволяет, используя данную функцию, помещать в
    ассемблерный листинг директивы и инструкции, заданные пользователем.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 int 21h ; а) исходные данные – требуется разместить комментарий после инструкции MOV
    DX, offset aHello
    ExtLinB(SegByName(“seg000”)+0x102,0,”; Строка 1”);
    ExtLinB(SegByName(“seg000”)+0x102,1,”; Строка 2”); b) вызов функции ExtLinB для создания двух строк комментария seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0102 ; Строка 1 seg000:0102 ; Строка 2 seg000:0105 int 21h ; c) результат
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес головы элемента (бестипового байта) перед которым должен быть размещен комментарий n номер строки комментария от 0 до 500 включительно. line строка комментария
    Родственные функции: MakeComm, MakeRptCmt, ExtLinA, DelExtLnB
    Интерактивный аналог: “Edit\Comments\Edit extra posterior lines”; void DelExtLnA(long ea,long n)
    Функция удаляет строку n много строчечного комментария, ранее помещенного перед элементом (бестиповым байтом), расположенным по линейному адресу ea. При этом, все строки с номерами, превосходящими n (если они существуют) отображаться не будут, но физически по-прежнему будут присутствовать в базе.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 ; Строка 1 seg000:0105 ; Строка 2 seg000:0105 ; Строка 3 seg000:0105 int 21h ; a) исходные данные – требуется удалить вторую (считая от одного) строку много строчечного комментария
    DelExtLnA(SegByName(“seg000”)+0x105,1); b) вызов функции DelExtLnA

    146
    seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 ; Строка 1 seg000:0105 int 21h ; c) результат - все строки, с номерами больше двух (считая от одного) не отображаются на экране
    ExtLinA(SegByName(“seg000”)+0x105,1,”; 2”); d) вызов функции ExtLinA для восстановления второй строки двух строк комментария seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 ; Строка 1 seg000:0105 ; 2 seg000:0105 ; Строка 3 seg000:0105 int 21h ; e) результат – все строки вновь отображаются на экране
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес элемента (бестипового байта) n удалямая строка комментария (от 0 до 500 включительно)
    Родственные функции: DelExtLnB
    Интерактивный аналог: “Edit\Comments\Edit extra anterior lines”; void DelExtLnB(long ea,long n)
    Функция удаляет строку n много строчечного комментария, ранее помещенного после элемента (бестипового байта), расположенного по линейному адресу ea. При этом, все строки с номерами, превосходящими n (если они существуют) отображаться не будут, но физически по-прежнему будут присутствовать в базе.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0102 ; Строка 1 seg000:0102 ; Строка 2 seg000:0102 ; Строка 3 seg000:0105 int 21h ; a) исходные данные – требуется удалить вторую (считая от одного) строку много строчечного комментария
    DelExtLnB(SegByName(“seg000”)+0x102,1); b) вызов функции DelExtLnA seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0102 ; Строка 1 seg000:0105 int 21h ; c) результат - все строки, с номерами больше двух (считая от одного) не отображаются на экране

    147
    ExtLinB(SegByName(“seg000”)+0x102,1,”; 2”); d) вызов функции ExtLinB для восстановления второй строки двух строк комментария seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0102 ; Строка 1 seg000:0102 ; 2 seg000:0102 ; Строка 3 seg000:0105 int 21h ; e) результат – все строки вновь отображаются на экране
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес элемента (бестипового байта) n удалямая строка комментария (от 0 до 500 включительно)
    Родственные функции: DelExtLnB
    Интерактивный аналог: “Edit\Comments\Edit extra posterior lines”; void MakeVar(long ea)
    Функция помечает элемент символом «звездочка», помещая его в начало строки.
    Повторный вызов функции не снимает пометку, и автору книги вообще не известно ни одного программного способа, позволяющего, эту пометку убрать. Интерактивно она снимается вызовом пункта «Mark item as variable» меню “Edit\Other”, который действует как триггер.
    Пример использования: seg000:0000 aHelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah a) исходные данные – требуется установить пометку
    MakeVar(SegByName(“seg000”)); b) вызов функции MakeVar для пометки seg000:0000*aHelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah с) результат – пометка установлена
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес элемента (бестипового байта)
    Родственные функции: нет
    Интерактивный аналог: “Edit\Other \Mark item as variable” char Name(long ea)
    Функция возвращает имя метки или функции, расположенной по линейному адресу
    ea, если с данным линейный адресом не связано ни одно имя, функция возвращает пустую

    148
    строку, сигнализируя об ошибке.
    Функция выполняет проверку на наличие недопустимых символов в имени метки
    (функции) и при наличии таковых, заменяет их символом, заданным в поле “SubstChar” конфигурационного файла . По умолчанию недопустимые символы заменяются знаком «прочерка». Перечень допустимых символов в именах метках определяется значением поля “NameChars” конфигурационного файла cfg> (см. таблицу 17)
    Замечание: при отображении имен меток (функций) в окне дизассемблера, IDA
    Pro всегда заменяет запрещенные символы знаком «прочерка». Т.е. функция
    Name возвращает имена в том виде, в каком они отображаются на экране. Для
    получения подлинного имени метки (функции) следует воспользоваться
    функцией GetTrueName платформа перечень символов, допустимых в именах меток (функций)
    "$?@"
    12
    “_0123456789"
    PC
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";
    "$_@?!"
    13
    "0123456789<>"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz"
    Java
    "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
    14
    "абвгдежзийклмнопрстуфхцчшщъыьэюя";
    "$_0123456789"
    TMS320C6
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz"
    "_0123456789."
    PowerPC
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz”
    Таблица 18 перечень символов, допустимых в именах меток
    Пример использования: seg000:0000 aHelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah a) исходные данные – требуется получить имя метки
    Message(“>%s\n”, Name(SegByName(“seg000”))); b) вызов функции Name для получения имени метки
    > aHelloIdaPro c) результат – имя метки получено
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес
    =return пояснения return
    !=”” имя метки, в том виде, в котором оно отображено на экране
    12
    Служебные символы ассемблера
    13
    Символы, определенные только для специальных режимов Java-ассемблера
    14
    Национальные (российские символы)

    149
    ==”” ошибка
    Родственные функции: MakeName, GetTrueName
    Интерактивный аналог: имя метки (функции) отображается справа от адреса char GetTrueName(long ea)
    Функция возвращает полное имя метки (функции), расположенной линейному адресу ea, не проверяя его на наличие недопустимых символов и не производя их автоматической замены (см. описание функции Name)
    Пример использования: seg000:0000 _HelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah a) исходные данные – требуется получить подлинное имя меткм
    Message(“>%s\n”, GetTrueName(SegByName(“seg000”))); b) вызов функции GetTrueName для получения имени метки
    >%HelloIdaPro c) результат – подлинное имя метки получено (сравните его с отображаемым на экране)
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес
    =return пояснения
    !=”” подлинное имя метки (функции) return
    ==”” ошибка
    Родственные функции: MakeName, Name
    Интерактивный аналог: нет char Comment(long ea)
    Функция возвращает строку постоянного комментария, расположенного по линейному адресу ea. Если с данным адресом не связан никакой комментарий, функция возвращает пустую строку, сигнализируя об ошибке.
    Пример использования: seg000:0000 mov ah, 9 ; Функция 0x9 – печать строки a) исходные данные – требуется получить постоянный комментарий
    Message(“>%s\n”,Comment(SegByName(“seg000”))); b) вызов функции Comment для получения постоянного комментария
    > Функция 0x9 – печать строки c) результат
    ??? #Верстальщику – change table аргумент пояснения

    150
    ea линейный адрес
    =return пояснения
    !=”” строка постоянного комментария return
    ==”” ошибка
    Родственные функции: MakeComment
    Интерактивный аналог: постоянный комментарий отображается справа от
    элемента char RptCmt(long ea)
    Функция возвращает строку повторяемого комментария, расположенного по линейному адресу ea. Если с данным адресом не связан никакой комментарий, функция возвращает пустую строку, сигнализируя об ошибке.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello ; Это повторяемый комментарий seg000:0105 int 21h ; DOS - PRINT STRING seg000:0105 ; DS:DX -> string terminated by "$" seg000:0107 retn seg000:0107 ; ────────────────────────────────────────────────────────────────────────── seg000:0108 aHello db 'Hello,',0 ; DATA XREF: seg000:0102↑o seg000:0108 ; Это повторяемый комментарий a) исходные данные – требуется получить строку повторяемого комментария
    Message(“>%s\n”,RptCmt(SegByName(“seg000”)+0x108))); b) вызов функции RptCmt для получения повторяемого комментария
    > Это повторяемый комментарий c) результат – строка повторяемого комментария
    Внимание: функция RptCmt ожидает именно адрес повторяемого комментария, а не адрес элементов, ссылающихся на элемент, связанный с повторяемым комментарием.
    Т.е. в приведенном выше примере вызов
    RptCmt(SegByName(“seg000”)+0x102)) вернул бы пустую строку.
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес
    =return пояснения
    !=”” строка повторяемого комментария return
    ==”” ошибка
    Родственные функции: MakeRptCmt
    Интерактивный аналог: повторяемый комментарий отображается справа от
    элемента, и всех ссылок на данный элемент char LineA(long ea,long num)
    Функция возвращает строку num многострочечного комментария, помещенного перед элементом, расположенным по линейному адресу ea.

    151
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0105 ; Строка 1 seg000:0105 ; Строка 2 seg000:0105 int 21h ; a) исходные данные – требуется получить первую строку многострочечного комментария
    Message(“>%s\n”,LineA(SegByName(“seg000”)+0x105,0))); b) вызов функции LineA для получения первой строки многострочечного комментария.
    > ; Строка 1 с) результат
    ??? #Верстальщику – change table аргумент пояснения ea линейный адрес n номер строки комментария от 0 до 500 включительно.
    =return пояснения
    !=”” строка повторяемого комментария return
    ==”” ошибка
    Родственные функции: LineB
    Интерактивный аналог: многострочечный комментарий отображается перед
    комментируемым элементном char LineB(long ea,long num)
    Функция возвращает строку num многострочечного комментария, помещенного за элементом, расположенным по линейному адресу ea.
    Пример использования: seg000:0100 mov ah, 9 seg000:0102 mov dx, offset aHello seg000:0102 ; Строка 1 seg000:0102 ; Строка 2 seg000:0105 int 21h ; a) исходные данные – требуется получить первую строку многострочечного комментария
    Message(“>%s\n”,LineB(SegByName(“seg000”)+0x102,0))); b) вызов функции LineB для получения первой строки многострочечного комментария.
    > ; Строка 1 с) результат
    ??? #Верстальщику – change table

    152
    аргумент пояснения ea линейный адрес n номер строки комментария от 0 до 500 включительно.
    =return пояснения
    !=”” строка повторяемого комментария return
    ==”” ошибка
    Родственные функции: LineA
    Интерактивный аналог: многострочечный комментарий отображается перед
    комментируемым элементном long LocByName(char name)
    Функция возвращает линейный адрес метки (имени функции) с именем name. Если ни одной метки (функции) с указанными именем не существует, функция возвращает значение BADADDR, сигнализируя об ошибке.
    Функция чувствительна к регистру символов и различает имена, набранные строчечными и прописными буквами.
    Внимание: функции требуется передавать подлинные имена меток, а не имена,
    отображаемые на экране, прошедшие через фильтр замены недопустимых
    символов (см. описание функции GetTrueName)
    Пример использования: seg000:0000 aHelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah a) исходные данные – требуется получить адрес метки “aHelloIdaPro”
    Message(“>%s\n”,atoa(LocByName(“aHelloIdaPro”))); b) вызов функции LocByName для получения адреса метки
    >seg000:0000 c) результат – адрес метки “aHelloIdaPro”
    ??? #Верстальщику – change table аргумент пояснения name имя метки (функции) с учетом регистра
    =return пояснения
    !=BADADDR линейный адрес метки (функции) return
    ==BADADDR ошибка
    Родственные функции: нет
    Интерактивный аналог: “View\Names”
    ??? all – дальше начинается не переработанный вариант
    ФУНКЦИИ

    153
    #Definition
    Как только подпрограммы стали неотъемлемой конструкцией любого языка, возникли проблемы с их классификацией.
    Начала всему положил BASIC, в котором операторы сплошь и рядом спутаны с переменными, функции с операторами, а подпрограммы представляют наименее развитую конструкцию языка.
    Затем было предложено называть подпрограмму, не возвращающую результатов своей работы
    1   ...   11   12   13   14   15   16   17   18   ...   39


    написать администратору сайта