Здравствуйте, уважаемые коллеги! Подскажите, как бы сделать так, чтобы IDA распознавала inline функции? Может какой плагин нужен, или скрипт?...
Ну я вообще-то вот что имел в виду. Например, есть шаблон кода: Код (Text): .text:0001A05F mov eax, Tracers.Flink .text:0001A064 cmp eax, offset Tracers .text:0001A069 jz short loc_1A08E .text:0001A06B test byte ptr [eax+20h], 8 .text:0001A06F jz short loc_1A08E .text:0001A071 cmp byte ptr [eax+1Dh], 3 .text:0001A075 jb short loc_1A08E .text:0001A077 mov ecx, [edi+8] .text:0001A07A push dword ptr [ecx] .text:0001A07C push offset dword_47530 .text:0001A081 push 32h .text:0001A083 push dword ptr [eax+14h] .text:0001A086 push dword ptr [eax+10h] .text:0001A089 call WmiTraceMsg6 .text:0001A08E loc_1A08E: Хотелось бы видеть вместо него что-нибудь вроде: Код (Text): .text:0001A05F call inline WmiTrace(8,3,...) .text:0001A08E loc_1A08E: Почему это невозможно? Ведь с memcpy и похожими функциями IDA это может проделывать?..
Ну это понятно Есть ли какие-нибудь средства, позволяющие это сделать без геморроя? Или нужно использовать стандартные механизмы добавления сигнатур в базу IDA?
А inline функции это те что не вызываются а встраиваются в код вместо вызова, но на этапе разработки применяются как функции? Например: inline int a(int v) { return V + 'A'; } и прототип: inline int a(int v);
Сигнатуры, примененные к ассемблерному коду, здесь не помогут, т.к. в зависимости от места вызова инлайн функции, её код будет выглядеть поразному за счет оптимизации как кода, так и перменных функции.
вообще-то flirt-сигнатуры применяют в совершенно определенных случаях, например когда хотят обнаружить в коде функции из какой-то статической библиотеки использованной при линковке
HexRays удобен. Но в коде достаточно часто используется инлайновая отладочная конструкция, это затрудняет чтение...
Vam 7mm Такой код врядл ли будет оптимизироваться по размеру, а вот регистры могут участвовать разные, это и нужно будет учитывать при написании скрипта.