함수호출 규약(function calling convention)
 해당 규약들은 c언어,C++ 기타 등등이 컴파일 이후에 cpu가 알수 있는 asm 언어로 변환을 한다.
이러한 변환 과정에서  함수를 부르는 쪽에서 stack을 정리 할지 함수에서 stack을 정리 할지에 대한 규약이다.

이름             인자전달방법        스택정리     인자전달순서    데코레이션(디버깅 정보 존재)

CDECL        stack                       caller             R-> L              _funcname

STDCALL    stack                        callee            R->L               _funcname@n(숫자)
 
FASTCALL   최초의 2(ecx, edx) callee           R->L              @funcname@n(숫자)
  
    
기본 값은 CDECL
함수호출을 하는 함수 쪽 : caller
함수호출을 당하는 함수 쪽 : callee
//, 호출을 하느냐 당하는냐 차이

cdecl : c언어 사용
stdcall : API에서 사용
fastcall : C, API , C++ 등 특수한 상황에 사용

 
xx.pdb파일은 디버깅 정보를 저장해 놓음
 
함수시작 : 프롤로그(push ebp mov ebp, esp)
함수 끝 : 에필로그(mov esp, ebp pop ebp)
 
eax, ecx , edx 가 백업을 하면 콜러세이브드 레지스터
그 이하 레지스터를 콜리세이브드 레지스터

함수
 
사용자 정의 함수
내장함수
외장함수
ex) 소켓프로그래밍 라이브러리
 
 
WinAPI( MSDN에서 검색)
    
xxxxxxA(asckii)
xxxxxxW(wildcard)
  
  
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
HWND : 윈도우 핸들 정보
LPCTSTR : 지정된 텍스트 주소
UINT : unsigned int 
    
UINT GetDriveTypeA(
LPCSTR lpRootPathName
);
영문 설명 : A trailing backslash is required. If this parameter is NULL, the function uses the root of the current directory.
‘\’가 필요하고 NULL값을 사용할 경우 프로그램이 위치한 최상위 디렉토리를 사용하겠다.

+ Recent posts