есть модуль с некими функциями. нужно узнать сколько параметров и какого типа. вообще интересует теория. т.е. интересует сишный компилятор. самое простое, предполагаю, push edx и.т.д. какие еще способы есть, как передаются строковые параметры(тоже понятно что указатель, но в каком регистре). если только push, то сколько их в начале функции, то и столько параметров? и еще, какой тип возвращает процедура. если куда нить пошлёте, то пожалуйста поконкретней.
господи... ты про calling convention читал? fastcall, cdecl, stdcall, thiscall (C++)... мдя MSDN -> "Visual C++ Programmer's Guide"
я в Си вообще ни как не шарю. хотелось бы поконкретней. тока причем здесь си. я имел ввиду Ассемблере. есть описания как компилируются эти вызовы? calling convention это оно и есть. а както по официальней это называется?
так и называется - Calling Convention или соглашение о вызове. Как оно выглядит - рассмотрим функцию, принимающую один аргумент размером дворд и возвращающую сумму аргумента и сотни: 1) stdcall Передача параметров в стеке, справа налево, аргументы удаляет вызванная функция Код (Text): stdcall_function: push ebp mov ebp, esp mov eax, [ebp+8] add eax, 100 leave ret 4 push 234 call stdcall_function ; теперь в EAX 334 2) cdecl Передача в стеке, справа налево, аргументы удаляет вызывающий код Код (Text): cdecl_function: push ebp mov ebp, esp mov eax, [ebp+8] add eax, 100 leave ret push 234 call cdecl_function add esp, 4 3) fastcall Передача сначала в регистрах (ECX, EDX), потом в стеке справа налево. Удаляет вызванная функция Код (Text): fastcall_function: push ebp mov ebp, esp mov eax, ecx add eax, 100 leave ret mov ecx, 234 call fastcall_function
andruxin DLL? Если модуль уже скомпилирован и исходников нет, то остаётся только положиться на дизассемблер и собственный опыт реверсинга. Зависит от соглашения о вызове и от компилятора. К примеру, в таких экзотических ЯВУ как BlitzMax, PureBasic и т.д. используются очень специфические способы передачи строковых параметров.
да как раз пытаюсь поднять этот уровень. ну скорей всего. контора вроде незамысловатая, выпустившая длл. так что надеюсь люди не заморачивают себе голову. дллшка с функциями работы с микроконтроллером флешек. 2Great: постараюсь осмыслить твой пост. черт, надо с начала разобраться с ассматом. я раньше шарил, но с 16-битным. а здесь ... . лан спасибо за наводку. в Calling Convention конкретно написано все или куча слов?
Great Не заметил... andruxin Ну, сишные DLL, в принципе, могут использовать любое соглашение, но чаще всего используется stdcall (для подражания стандарту виндового АПИ, наверно) и cdecl (для подражания *никсовым стандартам . Рекомендую загрузить приложение в отладчик, поставить бряк на вызов интересующей функции и просто обратить внимание на состояние стека в момент вызова и после, чтобы установить что за соглашение используется.