сколько параметров в функции. теория

Тема в разделе "WASM.RESEARCH", создана пользователем andruxin, 23 мар 2007.

  1. andruxin

    andruxin New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    3
    есть модуль с некими функциями. нужно узнать сколько параметров и какого типа. вообще интересует теория. т.е. интересует сишный компилятор. самое простое, предполагаю, push edx и.т.д. какие еще способы есть, как передаются строковые параметры(тоже понятно что указатель, но в каком регистре). если только push, то сколько их в начале функции, то и столько параметров? и еще, какой тип возвращает процедура.
    если куда нить пошлёте, то пожалуйста поконкретней. :)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    господи... ты про calling convention читал?
    fastcall, cdecl, stdcall, thiscall (C++)... мдя
    MSDN -> "Visual C++ Programmer's Guide"
     
  3. andruxin

    andruxin New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    3
    я в Си вообще ни как не шарю.
    хотелось бы поконкретней. тока причем здесь си. я имел ввиду Ассемблере.

    есть описания как компилируются эти вызовы? calling convention это оно и есть. а както по официальней это называется?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    так и называется - Calling Convention или соглашение о вызове.
    Как оно выглядит - рассмотрим функцию, принимающую один аргумент размером дворд и возвращающую сумму аргумента и сотни:

    1) stdcall
    Передача параметров в стеке, справа налево, аргументы удаляет вызванная функция

    Код (Text):
    1. stdcall_function:
    2.   push ebp
    3.   mov ebp, esp
    4.   mov eax, [ebp+8]
    5.   add eax, 100
    6.   leave
    7.   ret 4
    8.  
    9. push 234
    10. call stdcall_function
    11. ; теперь в EAX 334
    2) cdecl
    Передача в стеке, справа налево, аргументы удаляет вызывающий код

    Код (Text):
    1. cdecl_function:
    2.   push ebp
    3.   mov ebp, esp
    4.   mov eax, [ebp+8]
    5.   add eax, 100
    6.   leave
    7.   ret
    8.  
    9. push 234
    10. call cdecl_function
    11. add esp, 4
    3) fastcall
    Передача сначала в регистрах (ECX, EDX), потом в стеке справа налево. Удаляет вызванная функция
    Код (Text):
    1. fastcall_function:
    2.   push ebp
    3.   mov ebp, esp
    4.   mov eax, ecx
    5.   add eax, 100
    6.   leave
    7.   ret
    8.  
    9. mov ecx, 234
    10. call fastcall_function
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    andruxin
    DLL?

    Если модуль уже скомпилирован и исходников нет, то остаётся только положиться на дизассемблер и собственный опыт реверсинга.

    Зависит от соглашения о вызове и от компилятора. К примеру, в таких экзотических ЯВУ как BlitzMax, PureBasic и т.д. используются очень специфические способы передачи строковых параметров.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    он спрашивал про Сишнег кажется )
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Great
    Когда я нажал ответить, было только 2 сообщения - связь со Старым Светом тормозит страшно.
     
  8. andruxin

    andruxin New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    3
    да
    как раз пытаюсь поднять этот уровень.

    ну скорей всего. контора вроде незамысловатая, выпустившая длл. так что надеюсь люди не заморачивают себе голову. дллшка с функциями работы с микроконтроллером флешек.

    2Great: постараюсь осмыслить твой пост.
    черт, надо с начала разобраться с ассматом. я раньше шарил, но с 16-битным. а здесь ... . лан спасибо за наводку.
    в Calling Convention конкретно написано все или куча слов?
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    еще с первом сообщении:
    ;)
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    я почти пересказал MSDN. Там только добавлено еще про Names Decoration и вроде все.
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Great
    Не заметил...

    andruxin
    Ну, сишные DLL, в принципе, могут использовать любое соглашение, но чаще всего используется stdcall (для подражания стандарту виндового АПИ, наверно) и cdecl (для подражания *никсовым стандартам :). Рекомендую загрузить приложение в отладчик, поставить бряк на вызов интересующей функции и просто обратить внимание на состояние стека в момент вызова и после, чтобы установить что за соглашение используется.
     
  12. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    у агнера фога ну очень подробно расписано про это

    http://www.agner.org/