본문 바로가기

Reverse Engineering/Reversing 이론 설명

[MASM] 문자열과 배열

1. 문자열 프리미티브 명령

문자열 프리미티브(primitive)
    - 바이트, 워드, 더블워드의 배열 처리를 위한 Intel 명령 집합에는 5개의 그룹이 있으며, 이를 문자열 프리미티브라고 하지만, 문자 배열로만 국한되지 않는ㄴ다.
    - 문자열 명령어는 메모리를 참조하기 위해 ESI, EDI 레지스터를 참조한다.
    - ESI, EDI는 유일하게 단일 메모리 피연산자를 사용하여, 문자열과 배열의 처리에 특히 유용
    - 보호모드에서는 ESI는 자동적으로 DS가 가리키는 세그먼트에서의 오프셋이 되고, EDI는 자동적으로 ES가 가리키는 세그먼트 내의 오프셋이 된다.
    - DS, ES는 항상 같은 값으로 설정되고, 이를 변경할 수 없다.

문자열 프리미티브(primitive) 명령
 명령어 설명 
 MOVSB, MOVSW, MOVSD 문자열 데이터 이동 : 한 메모리 위치로부터 다른 곳으로 정수를 복사 
CMPSB, CMPSW, CMPSD 문자열 비교 : 두 개의 메모리 값들을 비교 
SCASB, SCASW, SCASD 문자열 검색 : 정수와 메모리의 내용비교 
STOSB, STOSW, STOSD  문자열 데이터 저장 : 메모리에 정수 저장 
LODSB, LODSW, LODSD  문자열로부터 누산기로 탑재 : 메모리에서 누산기로 정수를 탑재(AL, AX or EAX) 

○ MOVSB, MOVSW, MOVSD
    - 세 명령은 ESI가 가리키는 메모리 위치에서 EDI가 가리키는 메모리 위치로 데이터를 복사함.
    - 두 개의 레지스터들은 자동적으로 방향 플래그 값에 의해 증가 or 감소한다.
    - MOVSB : 바이트들의 이동(복사), ESI/EDI 1 감소
    - MOVSW : 워드들의 이동(복사), ESI/EDI 2 감소
    - MOVSD : 더블워드들의 이동(복사), ESI/EDI 4 감소

○ CMPSB, CMPSW, CMPSD
    - 세 명령은 각각 ESI가 가리키는 메모리 피연산자와 EDI가 가리키는 메모리 피연산자를 비교
    - 방향 플래그에 의해 ESI, EDI 값이 증가 또는 감소한다.
    - CMPSB : 바이트 비교
    - CMPSW : 워드 비교
    - CMPSD : 더블워드 비교

○ STOSB, STOSW, STOSD
    - 세 명령은 각각 AL/AX/EAX의 내용을 EDI가 가리키는 오프셋 위치의 메모리에 저장함.
    - EDI는 방향 플래그에 의해 증가 or 감소된다.

○ LODSB, LODSW, LODSD
    - 세 명령은 ESI가 가리키는 메모리에서 바이트나 워드를 읽어 AL/AX/EAX에 저장.
    - ESI는 방향 플래그에 의해 증가 or 감소된다.