정리/Assembly
어셈블리: 함수 호출 규약(Calling Convention)
어셈블리: 함수 호출 규약(Calling Convention)
2013.06.07[어셈블리 스터디] 호출자와 피호출자간의 약속! 함수 호출 규약(Calling Convention) 함수 호출 규약(Calling Convention)이란 호출자(Caller)와 피호출자(Callee) 간에 '함수를 호출할 때 전달되는 인자의 순서나 사용이 끝나고 나서의 스택 정리 등'에 대한 약속이라고 할 수 있습니다. 크게 3가지가 있으며, 이 3가지는 각각 __cdecl, __stdcall, __fastcall 방식입니다. 오늘은 이 세가지 방식에 대해 알아보려고 합니다. __cdecl 방식 __cdecl 방식은 C/C++ 함수에서 기본적으로 사용되는 호출 규약이며, 호출자가 스택을 정리합니다. 그리고 인자는 오른쪽에서 왼쪽으로 전달되며 호출자가 피호출자를 호출 시에 전달되는 인자의 개수를 알고있기..
어셈블리: 데이터 타입, 피연산자 타입, 명령어 정리
어셈블리: 데이터 타입, 피연산자 타입, 명령어 정리
2012.11.251. 데이터 타입(Data Type) 타입 설명 BYTE 8비트 부호 없는 정수 SBYTE 8비트 부호 있는 정수 WORD 16비트 부호 없는 정수 SWORD 16비트 부호 있는 정수 DWORD 32비트 부호 없는 정수 SDWORD 32비트 부호 있는 정수 FWORD 48비트 정수 QWORD 64비트 정수 TBYTE 80비트 정수 2. 피연산자 타입(Operand Type) 피연산자 설명 r8 8비트 범용 레지스터 r16 16비트 범용 레지스터 r32 32비트 범용 레지스터 Reg 임의의 범용 레지스터 Sreg 16비트 세그먼트 레지스터 Imm 8, 16, 32비트 즉시값 imm8 8비트 즉시값 imm16 16비트 즉시값 imm32 32비트 즉시값 r/m8 8비트 범용 레지스터, 메모리 r/m16 16비..
범용 레지스터: EAX, ECX, EDX, ESI, EDI, ESP, EBP
범용 레지스터: EAX, ECX, EDX, ESI, EDI, ESP, EBP
2012.11.241. EAX(Extended Accumulator Register) 첫번째로, EAX 레지스터에 대해 알아보도록 하겠습니다. EAX 레지스터는 산술(덧셈, 곱셈, 나눗셈 등), 논리 연산을 수행하며 함수의 반환값이 이 레지스터에 저장됩니다. 즉, 덧셈, 곱셈, 나눗셈 등의 명령은 모두 EAX 레지스터를 사용하며, 함수의 반환 값이 EAX 레지스터에 저장되므로 호출 함수의 성공 여부, 실패 여부를 쉽게 파악할 수 있으며, 반환값을 쉽게 얻어올 수 있습니다. 직접 EAX 레지스터의 값이 어떻게 변하는지 확인해보도록 하겠습니다. 두 정수를 더하는 함수가 호출되고 나서 EAX 레지스터의 값이 어떻게 변하는지 확인해보기 위해, 아래와 같은 구조의 프로그램을 디버깅하여 EAX 레지스터의 값을 살펴보았습니다. #in..