Может кто видал плагин, который бы мог преобразовать push/call в invoke ? Вроде бы это реально, но что-то гугл об этом не знает.
Может, ты имел ввиду определение цепочки push+call как параметров для вызова API? Такое есть. А invoke - это макрос и он нужен только для удобства написания кода, но никак не для понимания. Если очень хочется - смотри в сторону декомпилятора в код Си.
Ну да, мысля понята правильно. Это нужно для реверсинга. Просто invoke Sleep,100 было бы и понятнее и запись короче. А вот у декомпилеров есть один недостаток. Они все делают на автомате, а IDA интерактивно. Т.е если IDA встретит jmp или ret дальнейший участок кода не дизасмится пока не встретиться переход на него. Для некоторых компиляторов также надо делать и встретив call ExitProcess. И если в IDA я могу это поправить, то в декомпилерах нет.
нет. Например можно написать так: Код (Text): push [Handle1] push [Handle2] call CloseHandle call CloseHandle Как плагин разберет сколько пушей, и какие именно относятся к call'у.
n0name Ну, положим, OllyDbg разбирает такое. Собственно, IDA тоже (в комментариях пишет агрументы). Дело в другом - в читаемости и целесообразности invoke
Как заметил n0name, вызов ф-ции - это не всегда последовательность push, ..., call. Например, компилятор VC++ 8 имеет обыкновение разбавлять её другими инструкциями. Не говоря уже о custom call conventions.
Разбирает только те функции, прототипы которых у него есть. Код (Text): Собственно, IDA тоже (в комментариях пишет агрументы). Ну ида и есть ида =) Она следит за стеком.
скачал SDK к IDA, такой плагин написать - пара пустяков. Ида знает сколько параметров берет ф-я(хоть она из импорта, хоть из тела) например retn 8 уже о многом говорит...(это дело там для каждой функции есть как purged bytes) А если и не знает то подсчитать несложно. Проблемны только функции типа printf. Но то что изначально было в сырце как invoke легко преобразуется. Дальше больше. Захотелось мне раскрутить функции типа Func1(param,func2(param,param),param,param); И раскрутил. Все ОК, счас хочу switch/case покрутить вот только как это делать я даже ручками не умею. Мож кто подскажет ?
Shooshpanchik О многом, но далеко не о всем. Как, например, быть с соглашением __fastcall? (IDA делает свои предположение, но далеко не всегда верные...) А ведь в этом случае количество передаваемых параметров будет не 2, а 4 или 5.