검색결과 리스트
op code에 해당되는 글 1건
- 2009.11.15 3장. 기계어의 구성
글
3장. 기계어의 구성
책 정리/Windows 구조와 원리 그리고 Codes
2009. 11. 15. 20:15
- 프로그램을 작성하고, 컴파일하면 실행파일로 만들어지고 이는 단순한 숫자 형태로 만들어진다. 이런 실행파일이나 이미 실행되어 메모리에 올라와 있는 실행 이미지를 분석하고자 할 때에는 이 숫자를 사람이 보다 이해하기 쉬운 형태인 어셈블리 언어 형태로 바꿔 볼때 사용하는 것이 디버거 또는 디스어셈블러 등이다.
- 기계어 형식 => OP Code, Operand #1, Operand #2 ( Operand 수는 가변적 based on OP Code / operand #2 -> operand #1 으로 주로 조작이 이루어 진다. )
-
명령어 표 보는 법 : m : Memory, r : Register
- Imm8 : 8Bit - 1Byte
- Imm16 : 16Bit - 2Byte
- Imm32 : 32Bit - 4Byte
- r/m32 : 범용 레지스터 또는 4Byte의 메모리
-
rel8 : 1Byte 사이즈 범위 내의 상대주소
- JMP rel8 : 1Byte 사이즈 범위 내의 상대주소로 점프
- CLL rel16 : 16비트 코드 실행 시에 2Byte의 사이즈 범위 내의 상대 주소로 함수 호출
-
번지 지정 방식
-
-
이미디어트( Immediate ) 번지 지정 방식
- MOV EAX, 0x12345678 : EAX에 78 56 34 12 상수 값이 저장, 상수 값을 오퍼랜드로 사용
-
레지스터 번지 지정 방식
-
MOV EAX, EBX
-
-
직접 번지 지정 방식
- MOV EAX, [0x12345678] : 0x12345678 에 있는 메모리 내용을 4bytes 읽어서 EAX에 저장
-
레지스터 간접 번지 지정 방식
- MOV EAX, [EBX] : EBX에 저장된 메모리 주소로 이동해서 메모리 내용을 4bytes 읽어서 EAX에 저장
-
베이스 레지스터와 변위가 있는 레지스터 간접 번지 지정 방식
- MOV EAX, [EBX + 0x4 ] : EBX가 base address로 하여 1 바이트 값을 취한다
-
베이스 레지스터와 인덱스가 있는 레지스터 간접 전지 지정 방식
- MOV EAX, [EBX + ECX * 2 ] : EBX - base address, BCX - index reg, 스케일 값 - 2
-
베이스 레지스터와 인데스 그리고 변위가 있는 레지스터 간접 번지 지정 방식
- MOV EAX, [EBX + ECX * 2 + 0x1234] : EBX - base address, BCX - index reg, 스케일 값 - 2
-
'책 정리 > Windows 구조와 원리 그리고 Codes' 카테고리의 다른 글
9장. 세그먼테이션 (0) | 2009.11.15 |
---|---|
8장. 메모리 관리 (0) | 2009.11.15 |
4장. 프로시저와 스택 구조 (0) | 2009.11.15 |
2장. 데이터의 표현과 메모리 구조 (0) | 2009.11.15 |
1장. 컴퓨터의 구조와 역사 (0) | 2009.11.15 |