97, 1/5 회원가입  로그인  
   ansuz0710
   리버싱 문제 푸는 중에 궁금한 점이 있습니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=61 [복사]


보통 함수를 호출할 때 파라미터들을 넘기는 데요.

이 코드를 디버거에서 디버그할때(어셈블리어로 나오겠죠??)

함수를 CALL 하기 전 항상 PUSH 명령으로 스택에 파라미터들을 넣고

CALL을 하는지 궁금합니다.

애기한테 젓가락질 가르치는 정도의 질문이지만 가르쳐주시면 감사하겠습니다...ㅎㅎ;;

  Hit : 4166     Date : 2013/08/10 07:45



    
avtree 질문자님께서 말씀하신대로 보면
parameter가 없는 함수들은 굳이 없는 parameter를 만들어서 push시킬필요는 없겠죠??
2013/08/10  
6월 저도 입문한지 몇일 안됬지만 어떤 짧은 함수는 인자를 PUSH 안하고 레지스터에 넣어서 호출하는 것도 봤습니다 2013/08/10  
kumi123 일반적으로는 파라미터가 잇다면, push 로 넣지만,

안그런 경우도 있습니다..
2013/08/11  
jz calling convention 으로 검색해보세요 2013/08/12  
HongMK900 일반적으로 stdcall , cdecl 의 경우 PUSH 를 통해 인자를 전달하지만
fastcall 의 경우 MS 에서는 두개의 인자는 ECX, EDX 레지스터를 통해서 전달하는 방식을 취합니다.
이는 x86 일 경우 적용되는 형식이고 x64 의 경우에는 calling convention이 통합되어 조금 다른 방식으로 전달됩니다.
자세한 사항은 아래의 링크에서 확인 가능합니다.
http://ko.wikipedia.org/wiki/X86_%ED%98%B8%EC%B6%9C_%EA%B7%9C%EC%95%BD
2013/08/13