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

iva87

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

iva87

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

iva87

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

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

sendersu

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

1652505050332.png

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

1652505191105.png
 

iva87

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

Посмотреть вложение 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

Новичок
Сообщения
24
Реакции
5
Возник новый вопрос по части карусели переключения разрядности типа данных.
Изначально в процессорном модуле было только следующее:
'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

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

iva87

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

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

sendersu

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

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

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

iva87

Новичок
Сообщения
24
Реакции
5
Очень интересно, в 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

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

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

>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

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

sendersu

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

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

iva87

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