Приветствую всех! Возможно ли в IDA _автоматизировать_ процесс вытаскивание параметров, передаваемых библиотечной функции при её вызове? Например, простейший случай: Код (Text): ... PUSH 0 PUSH 1 PUSH OFFSET OPC PUSH OFFSET RETE PUSH EAX CALL WtiteProcessMemory@20 ... Мысли на эту тему: - всё выполняем в debug mode. - возможные проблемы с механизмом передачи параметров (через стек, через сегмент данных итд) - соглашение для передачи параметров в библиотечные ф-ии фиксированные. Возможно, кто-нибудь уже встречался с автоматизацией такого механизма...
Согласен, уточняю. Необходимо вытащить значения переданных параметров, например, для WriteProcessMemory очень хочется узнать с помощью автоматизированного средства (плагина к IDA) значения 2-ого и 3-его параметров.
Нет, к сожалению, нельзя. Исключительно IDA, т.е., если можно так выразиться, задача состоит в реализации winapi шпиона. Как установить бряк на функцию понятно, вся загвоздка теперь с параметрами
Если я правильно понял, тебе нужно во время выполнения программы, при каждом вызове определенной функции, брать из стека n байт и показывать их в виде двойных слов?! Если так, то я не представляю как это сделать во время работы программы. Мне кажется, что без пошагового выполнения это невозможно.
Теперь ясно. На сайте лежит статья RedPlait'а о написании плагина для IDA и его отладчика, + исходники плагина(Встраивание Perl в IDA Pro 4.70 (Second Edition)), с его помощью, написав скрипт, такое можно реализовать
Чтобы зафиналить тему, набросал скрипт(можно модифицировать под нужное количество параметров) Код (Text): #!/usr/bin/perl use IDA; use IDADbg; sub cbBpt { my( $t_id, $addr ) = @_; printf("\nt_id %X addr %X\n", $t_id, $addr); my $context; if ( ThreadContext($t_id, CONTEXT_ALL, $context) ) { my $esp; $esp = $context->{'Esp'}; printf("esp=>0x%08X, [esp]=>0x%08X, [esp+4]=>0x%08X, [esp+8]=>0x%08X\n", $esp, read_mem_dword($esp), read_mem_dword($esp + 4), read_mem_dword($esp + 8)); } }