본문 바로가기

Assembler

아이다(IDA)의 Debugging - FOR문 분석 C언어로 for문을 컴파일한 것을 IDA로 분석해보자. #include int main(void) { int i = 0; int result = 0; for ( i ; i 더보기
스택과 콜링컨벤션의 이해 Function(1, 2)라고 선언이 된 함수가 사용된다면 push 2 push 1 call 004017E0 이와 같은 어셈블리 코드가 되는데, 파라미터는 뒤에서부터 push가 된다. 그 이유는 스택(stack)에 값을 순서대로 쌓아놓고, 나중에 쌓인 값을 우선으로 해 빼서 사용하기 때문이다. 일반적인 메모리 구조는 그림과 같다. 프로그램이 실행되기 위해서는 실행에 필요한 모든 것들이 메모리에 적재되어야만 한다. Text : 컴파일된 프로그램 소스가 기계어의 형태로 위치 Data : 프로그램에서 초기화된 데이터들의 위치 BSS : 초기화되지 않은 변수들의 위치. 항상 0으로 초기화됨 Stack : 지역변수, Command Line arguments 위치 Heap : 동적으로 할당된 변수들이 위치 Stac.. 더보기
기초 어셈블리어. 데이터 타입 : 타입 설 명 BYTE 8bit 부호 없는 정수 SBYTE 8bit 부호 있는 정수 WORD 16bit 부호 없는 정수 SWORD 16bit 부호 있는 정수 DWORD 33bit 부호 없는 정수 SDWORD 32bit 부호 있는 정수 FWORD 48bit 정수 QWORD 64bit 정수 TBYTE 80비트 정수 피연산자(operand) 타입 : 피연산자 설 명 r8 8bit 범용 레지스터 r16 16bit 범용 레지스터 r32 32bit 범용 레지스터 Reg 임의의 범용 레지스터 Sreg 16bit 세그먼트 레지스터 imm 8, 16, 32bit 즉시값 imm8 8bit 즉시값 imm16 16bit 즉시값 imm32 32bit 즉시값 r/m8 8bt 범용 레지스터, 메모리 r/m16 16b.. 더보기