IDA Pro Какими функциями IDA SDK конвертировать прототип функции в указатель

elpy

Зарегистрированный
Сообщения
5
Реакции
2
Подскажите, какими функциями IDA SDK конвертировать прототип функции в указатель на функцию и обратно
C++:
void __cdecl Func1(char* ptr);  <-> void (__cdecl* Func1)(char* ptr);
int __thiscall Class::Func(Class* __hidden this, char* ptr); <-> int (__thiscall* Class::Func)(Class* __hidden this, char* ptr);
как я понимаю это преобразования над tinfo_t объектом, только вот какие ...
 

elpy

Зарегистрированный
Сообщения
5
Реакции
2
преобразование
C++:
int (__thiscall* Class::Func)(Class* __hidden this, char* ptr); -> int __thiscall Class::Func(Class* __hidden this, char* ptr);
выполняется функцией tinfo_t::get_pointed_object
а вот как сделать обратное?
 

elpy

Зарегистрированный
Сообщения
5
Реакции
2
Да, спасибо, все верно
нашел.
tinfo_t:: create_ptr() выполняет необходимое преобразование
C++:
int __thiscall Class::Func(Class* __hidden this, char* ptr); -> int (__thiscall* Class::Func)(Class* __hidden this, char* ptr);
 

mak

Соломенные сандалии
Администратор
Сообщения
695
Реакции
411
Документация в иде конечно страшная, только гадать можно :)

Тогда по теме create_ptr()
IDA: Changing type of arguments to local type

Get prototype of an imported function

Python:
# get import function prototype
import_prototype = idaapi.get_named_type(None, 'WriteFile', 0)

# deserialize import function prototype
import_tif = idaapi.tinfo_t()
import_tif.deserialize(None, import_prototype[1], import_prototype[2])

# create a pointer to the import function type
ptr_import_tif = idaapi.tinfo_t()
ptr_import_tif.create_ptr(import_tif)
IDAPython cheatsheet - https://gist.github.com/icecr4ck/7a7af3277787c794c66965517199fc9c

apply_callee_type
https://github.com/fireeye/flare-ida/blob/master/python/flare/apply_callee_type.py
 

elpy

Зарегистрированный
Сообщения
5
Реакции
2
можно подытожить
для того, чтобы получить указатель на тип, необходимо к тему применить
tinfo_t::create_ptr()
для того, чтобы из указателя получить тип, необходимо выполнить
tinfo_t::get_pointed_object()
надеюсь будет полезно
 
Верх Низ