관리 메뉴

Jsecurity

어셈블리어의 주소 지정 방식 본문

프로그래밍언어/리버싱 입문

어셈블리어의 주소 지정 방식

Great king 2019. 3. 26. 13:26

※ 어셈블리 명령어의 구성


 L1 :

mov

%eax   ,

%ebx 

;comment 

Label 

작동 코드 

제 1 오퍼랜드  

제 2 오퍼랜드 

설명문 



※ 주소 지정 방식의 이해

       

$1. 레지스터 주소 지정 : 레지스터의 주소 값을 직접 지정 복사, 처리 속도 가장 빠름


MOV EDX, EAX  => EAX 레지스터의 내용을 EDX레지스터로 복사




$2. 직접 메모리 주소 지정 : 가장 일반적인 주소 지정 방식


보통 피연산자 하나가 메모리 위치를 참조하고 다른 하나는 레지스터를 참조.

(예) DS:[8088h]와 DS:[1234h]는 각각 ‘세그멘트:오프셋’ 형식의 메모리에 직접 접근하는 방식


 MOV AL, DS:[8080h]

 MOV DS:[1234h], DL


   

$3. 레지스터 간접 주소 지정 : '세그먼트 : 오프셋' 형식을 사용


 MOV AL, [BX] -> [BX] -> DS:[BX]

 MOV AL, [BP] -> [BP] -> SS:[BP]



$4. 인덱스 주소 지정 : 레지스터 간접 지정 방식에 변위가 더해진 메모리 주소 지정 방식

(예)20h만큼 더해 메모리를 참조한 명령


MOV AL, [BX+20h] -> DS:[BX+20h]

MOV AL, [BP+20h] -> SS:[BP+20h] 



$5. 베이스 인덱스 주소 지정  

실제 주소 생성 위해 베이스 레지스터(BX 또는 BP)와 인덱스 레지스터(DI 또는 SI)를 결합.

2차원 배열의 주소 지정에 사용


MOV AL, [BX+SI] -> DS:[BX+SI]

MOV AL, [BP+SI] -> SS:[BP+SI] 



$6. 변위를 갖는 베이스 인덱스 주소 지정

베이스-인덱스의 변형으로 실제 주소 생성 위해 베이스 레지스터, 인덱스 레지스터, 변위 결합


MOV AL, [BX+SI+20h]  

MOV AL, [BP+SI+20h] 






Comments