IDA Pro Вопросы по IDA PRO SDK

iva87

Новичок
Сообщения
64
Реакции
12
Есть ряд вопросов, на которые не удается найти ответы, например, хотелось бы воспользоваться функционалом поиска библиотечных функций по сигнатурам, для чего я написал конвертор из файлов библиотек компилятора в текстовые PAT-файлы. Далее с помощью штатного конветора ИДА из них получаю упакованные файлы сигнатур SIG (далее сжимаю их штатным архиватором сигнатур ИДА) и подключаю в IDA PRO (функции распознаются, но только в режиме Автоанализа, хотя желательно бы до него).
Хотелось бы далее создать TIL файлы, но моего компилятора нет в списке ИДА. Без этого TIL файлы не обрабатываются ИДА, а как добавить мой компилятор в списки ИДА, чтобы его можно было выбрать при настройке непонятно -- как принято решить такую задачу?
Надеюсь на помощь и подсказки специалистов
 

iva87

Новичок
Сообщения
64
Реакции
12
что у вас за компмилятор (сами написали? :))
у меня кросс-компилятор, которого нет в списке ИДА https://hex-rays.com/products/ida/tech/flirt/compilers/
это все понятно и мне известно, а вопрос был не в том как создать этой утилитой TIL-файл (это работает и файл создается) -- мне нужно как-то добавить в список компиляторов, которые ИДА позволяет выбрать в меню при попытке использовать сформированный мной TIL файл. Как это сделать?
 

iva87

Новичок
Сообщения
64
Реакции
12
в этом меню как добавить дополнительный компилятор?
 

Прикрепленные файлы:

sendersu

Мудрец
Сообщения
301
Реакции
581
Понятно
вообще-то сомнительно, что Ида настолько развита, что умеет формировать в динамике новый описать компилятора, ей неизвестный доселе,
но все же можете попробовать, есть в ее СДК пара тройка АПИ:

1652505050332.png

и структура описания компилятора
1652505107405.png
но вот главный вопрос - можно ли расширять поле comp_t

1652505191105.png
 

iva87

Новичок
Сообщения
64
Реакции
12
Понятно
вообще-то сомнительно, что Ида настолько развита, что умеет формировать в динамике новый описать компилятора, ей неизвестный доселе,
но все же можете попробовать, есть в ее СДК пара тройка АПИ:

Посмотреть вложение 1093

и структура описания компилятора

но вот главный вопрос - можно ли расширять поле comp_t
для меня это дело новое и я не понимаю пока как можно добавить дополнительное значение comp_t = 0хА (маска позволяет), но где и как это можно сделать?

здесь https://stackoverflow.com/questions/46174522/changing-compiler-in-idapython нашел пример костыля, как можно любому из существующих компиляторов изменить его параметры
Changing compiler in IDAPython:
def print_compiler(id):
    print '-'*(80)
    abbr = ida_typeinf.get_compiler_abbr(id)
    name = ida_typeinf.get_compiler_name(id)
    print "id: %d (%s)" % (id,abbr)
    print "Compiler: '%s'" % name
    im = idc.get_inf_attr(INF_COMPILER)
    print "Calling model: %02X" % im.cm
    print "Defauil alignments: %d" % im.defalign
    print "sizeof(int): %d\tsizeof(short): %d" % (im.size_i,im.size_s)
    print "sizeof(bool): %d\tsizeof(long): %d" % (im.size_b,im.size_l)
    print "sizeof(enum): %d\tsizeof(longlong): %d" % (im.size_e,im.size_ll)
    print "sizeof(long double): %d" % (im.size_ldbl)
    print "Predefined macros: '%s'" % ida_idp.cfg_get_cc_predefined_macros(id)
    print "Included directories: '%s'" % ida_idp.cfg_get_cc_header_path(id)
    print '-'*(80)

# Print Old Compiler settings by ID
print_compiler(idc.get_inf_attr(INF_COMPILER).id)

# Set Compiler defaults for Visual C++
im = idc.get_inf_attr(INF_COMPILER) # Get current settings
im.id = ida_typeinf.COMP_MS
im.cm = 0x03 | 0x00 | 0x30
im.defalign = 0
im.size_i = 4
im.size_b = 1
im.size_e = 4
im.size_s = 2
im.size_l = 4
im.size_ll = 8
im.size_ldbl = 8
# Replace predefined macros and included directories by id
# from IDA.CFG (see 'CC_PARMS' in Built-in C parser parameters)
ida_typeinf.set_c_macros(ida_idp.cfg_get_cc_predefined_macros(im.id))
ida_typeinf.set_c_header_path(ida_idp.cfg_get_cc_header_path(im.id))
# Resetting new settings :)
idc.set_inf_attr(INF_COMPILER, im.id)

# Print New Compiler settings by ID
print_compiler(im.id)
 
  • Понравилось
Реакции: mak

iva87

Новичок
Сообщения
64
Реакции
12
Возник новый вопрос по части карусели переключения разрядности типа данных.
Изначально в процессорном модуле было только следующее:
'a_byte': ".DB",
'a_word': ".DW",
'a_dword': ".DD",
карусель работает следующим образом: изначально или нажали <U> -- неопределено, нажали <D> -- данные с разрядностью один 8-битный Byte (DB), снова нажали <D> -- данные уже с разрядностью одно 16-битное Word (DW), снова нажали <D> -- данные уже с разрядностью одно 32-битное двойное DWord (DD), снова нажали <D> -- данные опять с разрядностью один 8-битный Byte (DB)... т.е. дальше по кругу
Понадобилось добавить 64-битные данные, соответственно, добавил в процессорный модуль дополнительную строку и получилось следующее:
'a_byte': ".DB",
'a_word': ".DW",
'a_dword': ".DD",
'a_qword': ".DQ",
однако, карусель работает по-прежнему, т.е. 64-битные данные не получается задать.

Как правильно решить задачу обеспечения возможности выбора в карусели дополнительной битности данных?
 

iva87

Новичок
Сообщения
64
Реакции
12
Options->Setup Data Type в правой группе выбираем типы данных для карусели
отлично сработало, но теперь попутный вопрос: можно ли это проверить/включить прямо из процессорного модуля через python?
 

iva87

Новичок
Сообщения
64
Реакции
12
для 24-битных данных хотел воспользоваться типом TriByte (в процессорном модуле '3byte'), но не работает -- зашел в Options->Setup Data Type и не вижу этого типа (см. снимок экрана) хотя у других пользователей судя по их фото присутствует такой тип (см. снимок экрана -- самый нижний тип)
Как можно вернуть/добавить этот тип отображения 24-битных данных (3 байта, последовательность которых при отображении можно задать параметром INF_TRIBYTE_ORDER)?
 

Прикрепленные файлы:

sendersu

Мудрец
Сообщения
301
Реакции
581
Очень интересно, в IDA SDK (7.7) даже такого типа нету...
1655984158843.png

Вполне вероятно тот 3 тип - 3байта существовал в старых версиях Ида, а в7ке его удалили

Upd
в SDK 6.8 еще находился -
1655984600508.png
 
Последнее редактирование:

iva87

Новичок
Сообщения
64
Реакции
12
Очень интересно, в IDA SDK (7.7) даже такого типа нету...
тип - 3байта существовал в старых версиях Ида, а в7ке его удалили
по ссылке https://hex-rays.com/products/ida/news/7_0/ для 7-й версии есть следующее:
BUGFIX: idaq64: IDC’s SetCharPrm(INF_TRIBYTE_ORDER, …) was not working
в конфиге по пути C:\Program Files\IDA 7.0\cfg (файл ida.cfg) есть следующее:
TRIBYTE_ORDER = 312 // Order of bytes for 3-byte data items
// Allowed values are permutations of 1,2,3
// 1 denotes the first byte, and so on.

что, вероятно, предполагает наличие такого функционала...
в SDK 6.8 еще находился -
можно ли как-то "вернуть" возможность использования такого функционала, например, добавлением отсутствующей строки:
#define dt_3byte 19 ////< 3-byte data
или что-то где-то еще дополнительно потребуется?
 

sendersu

Мудрец
Сообщения
301
Реакции
581
такой вопрос надо разрабам Ида задавать.. :)

тут нашлось еще такое -

>removed 'tribyte' from help page 'Setup data types'
>SDK: removed the following fields from idainfo: tribyte_order, lprefix, lprefixlen, cc.flags


https://pastebin.com/JeVJGv9w


2) #define INF_TRIBYTE_ORDER 125
нашел только в Ида 6.8
в 7.7 нету
 

iva87

Новичок
Сообщения
64
Реакции
12
removed 'tribyte'
вопрос надо разрабам Ида задавать
если вопрос "разрабам", то это скорее всего очень надолго...
а тогда возникает вопрос об альтернативных вариантах, например, коль уж, мне приходится делать свой процессорный модуль, то в нем, вероятно, можно будет поддержать вывод 24-битных данных (3byte), только непонятно пока как это делается, соответственно, вопроса два:
1) вывод immediate data в составе команды делать в out_insn: есть ли какие-то рекомендации или делать по наитию?
2) вывод непосредственно данных, например, в массивах или структурах, т.е. предположительно в out_data, но не смог найти ни рекомендаций, ни примеров: как выводить данные вне операндов команд в своем процессорном модуле?
 

sendersu

Мудрец
Сообщения
301
Реакции
581
Конкренто в вашей версии Ида есть еще поддержка три-байтов?
и даже если есть, то со временем у вас будет вопрос - как будет работать ваш модуль на более новых версиях софта...

Как вариант - можете глянуть в сторону custom data types, тут вот расписали что да как делать
https://hex-rays.com/blog/custom-data-types-and-formats/
 

iva87

Новичок
Сообщения
64
Реакции
12
как будет работать ваш модуль на более новых версиях софта...
Как вариант - можете глянуть в сторону custom data types, тут вот расписали что да как делать
https://hex-rays.com/blog/custom-data-types-and-formats/
похоже, что это "то что надо", однако, еще бы эти произвольные форматы как-то умудриться впихнуть в карусель перебора типа данных или хотя бы завесить на комбинацию кнопок...
 

iva87

Новичок
Сообщения
64
Реакции
12
Уважаемые специалисты,
продолжаю возиться со своим процессорным модулем для ИДА -- возник вопрос с красотой отображения, для которой хотелось бы вставлять такой разделитель, как на снимке экрана, однако, ничего не получается известными мне методами из ctx.out_
Подскажите, пожалуйста, как это можно сделать на IDApython (в SDK не смог найти ни описания, ни примеров...)
 

Прикрепленные файлы:

iva87

Новичок
Сообщения
64
Реакции
12
Первое что приходит в голову - вставлять как комментарий...
для такого действия есть много АПИ в СДК, например
https://www.hex-rays.com/products/ida/support/idadoc/204.shtml
0) многострочные обычные строчные комментарии (по вашей ссылке) мне известны, но ими я пользуюсь для других случаев, а для разделения разных процедур в коде они мне не подходят, т.к. располагаются правее дизассемблированной команды с операндами, хотя работают отлично и понятным образом (обычные простые по кнопке <:> или из Питона set_cmt(ea, comment, 0) и повторяемые по кнопке <;> или из Питона set_cmt(ea, comment, 1), которые можно из Питона считывать get_cmt(ea, 0/1) и добавлять append_cmt(ea, comment, 0/1), удалять путем задания пустой строки).
Для комментирования целой строки (с самого начала, как мне и нужно) вроде бы есть инструменты, но полноценно разобраться с ними пока не получается...
Варианты:
1) многострочные дополнительные строки есть и работают они отлично и понятным образом только по кнопкам (подстрочные по кнопке <Ins> и надстрочные по кнопке <Shift+Ins>), а из Питона понятным образом только добавляются add_extra_line(ea, 0/1, line), но непонятно как считывать и изменять/удалять (как-то же должно быть доступно, коль через меню с кнопок возможно) -- вопрос: как?
2) многострочные дополнительные комментарии есть и работают они отлично и понятным образом только из Питона (подстрочные add_extra_cmt(ea, 0, comment) и надстрочные add_extra_cmt(ea, 1, comment)), а, вот, с остальным непонятки, например:
-- как можно добавить многострочные дополнительные комментарии через меню аналогично многострочным дополнительным строкам 1)? как можно добавить привязку к горячим кнопкам скрипты добавления аналогично 1)?
-- в СДК есть функция предположительно удаления del_extra_cmt(ea, ?), непонятен второй параметр (методом подбора при экспериментах выяснить мне пока не удалось);
-- в СДК есть функция предположительно считывания get_extra_cmt(ea, ?), непонятен второй параметр (методом подбора при экспериментах выяснить мне пока не удалось);
-- в СДК есть функция предположительно обновления update_extra_cmt(ea, 0/1, comment), видимых изменений нет (методом подбора при экспериментах выяснить мне пока не удалось);
-- в СДК есть функция get_first_free_extra_cmtidx(ea, ?), непонятен второй параметр и суть выполняемого действия (методом подбора при экспериментах выяснить мне пока не удалось);
-- в СДК есть функция delete_extra_cmts(ea, ?), непонятен второй параметр и суть выполняемого действия (методом подбора при экспериментах выяснить мне пока не удалось)
Есть ли у кого-то информация по непонятным моментам и/или примеры использования?
P.S.
забыл добавить самое интересное: если функцией add_extra_cmt(ea, 0/1, comment) добавить многострочные дополнительные комментарии, то через меню и кнопки <Ins> и <Shift+Ins> с ними можно проводить действия как с многострочными дополнительными строками 1)
 
Последнее редактирование:
Верх Низ