Как узнать какие параметры передаются функции и какие значения она возвращает?

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

Если функция "опубликована", то, как правило, вместе с модулем её содержащим идет справка, описывающая действие функции, количество и способ передачи параметров и результатов. Если это недокументированная функция, то рассказать что-то о ней можно только после реверс-исследования.

Параметры передаются функции обычно через стек, либо через регистры (например в программах, написанных на Delphi). Функция обычно возвращает значение в регистре eax, либо тоже через стек. Для примера возьмем функцию GetWindowTextA:

push 00000100
push dword ptr [esp+04]
push dword ptr [ebx+30]
Call user32.GetWindowTextA

Параметры передаются функции "как бы" в обратном порядке. Т.е. последним в стек помещается значение, которое функция берет первым. В нашем примере push 100 кладет в стек число 100h - максимальная длина считываемой текстовой строки. push dword ptr [esp+04] помещает в стек адрес, по которому функция GetWindowTextA поместит считанную строку. push dword ptr [ebx+30] помещает в стек handle элемента окна, из которого будет считываться текст. call user32.GetWindowTextA вызывает саму функцию.

И что так всегда будет push 100, push dword ptr [esp+04] и т.д. перед вызовом функции GetWindowTextA?

Нет не всегда. Это был просто пример. Этой функции всегда будут передаваться 3 параметра через стек. А что будет передаваться конкретно (максимальна длина строки, адрес буфера для текста, handle элемента окна) может каждый раз быть разным.