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

Success MakeStr(long ea,long endea)

Функция преобразует последовательность бестиповых байт в ASCII-строку, автоматически назначая ей метку, стиль которой задается вызовом “SetLongPrm(INF_STRTYPE)” (см. описание функции SetLongPrm).

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

Аргумент endea задает линейный адрес конца строки. Если передать функции значение BADADDR, то IDA предпримет попытку вычислить адрес конца автоматически. Поддерживаются следующие типы строк – ASCIIZ-строки, заканчивающиеся символом нуля; PASCAL-строки, начинающиеся с байта, содержащего длину строки и DELPHI-строки, начинающиеся со слова (двойного слова), содержащего длину строки. Если строка не принадлежит ни к одному из этих трех типов, концом строки считается:

а) первый нечитабельный ASCII-символ. Перечень читабельных символов содержится в поле “AsciiStringChars” конфигурационного файла <ida.cfg>. Любой символ, не входящий в этот список, трактуется ограничителем длины строки. По умолчанию содержимое поля “AsciiStringChars” для кодировки cp866 следующее:

"\r\n\a\v\b\t\x1B"

" !\"#$%&'()*+,-./0123456789:;<=>?"

"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"

"`abcdefghijklmnopqrstuvwxyz{|}~"

"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"

"абвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐"

"└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀"

"рстуфхцчшщъыьэюя";

b) неинициализированный байт

c) голова элемента кода или данных

d) конец сегмента

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

Замечание: вплоть до версии 3.85 эта функция была реализована с ошибкой и передача значения BADADDR не приводила к автоматическому определиению конца строки.

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

seg000:0000 db 48h ; H

seg000:0001 db 65h ; e

seg000:0002 db 6Ch ; l

seg000:0003 db 6Ch ; l

seg000:0004 db 6Fh ; o

seg000:0005 db 2Ch ; ,

seg000:0006 db 20h ;

seg000:0007 db 53h ; S

seg000:0008 db 61h ; a

seg000:0009 db 69h ; i

seg000:000A db 6Ch ; l

seg000:000B db 6Fh ; o

seg000:000C db 72h ; r

seg000:000D db 0 ;

а) исходные данные – ASCIIZ-строка.

MakeStr(SegByName(“seg000”),BADADDR);

b) вызываем функцию MakeStr для преобразования цепочки бестиповых байтов в ASCII-строку с автоматическим определением ее конца

seg000:0000 aHelloSailor db 'Hello, Sailor',0

с) результат – успешное создание строки с автоматическим назначением метки, состоящей из допустимых в имени символов

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

аргумент

пояснения

ea

линейный адрес начала цепочки бестиповых байт или головы элемента данных

endea

!=BADADDR

линейный адрес коцна строки

==BADADDR

указание вычислять адрес конца строки автоматически

return

=return

пояснения

==1

успешное завершение операции

==0

ошибка

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

Интерактивный аналог: “~Edit\ASCII”; <A>

Замечение: при нажатии клавиши <A>, IDA пытаестя создать по текущему адресу, ASCII-строку автоматически определяя ее длину. Для явного задания требуемой длины, необходимо предварительно выделить соответствующую область курсорными клавишами, удерживаня нажатым <shift> или мышью, удерживая нажатой правую кнопку.

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