한 걸음씩..

어셈블리어 디버깅 / 윈도우 코드 에러분석, 수정 본문

프로그래밍

어셈블리어 디버깅 / 윈도우 코드 에러분석, 수정

smdy0426 2013. 7. 15. 10:54
반응형

인라인 어셈블리 언어 디버깅  
   1) 레지스터
       -> 데이터를 저장할 수 있는 작은 영역. 파일을 저장하기엔 너무 작고, 대신 프로그램이 실행되는 동안 어떤 
          정보를 저장하기 위해 사용. CPU는 메모리에 있는 데이터보다 레지스터에 있는 데이터에 훨씬 더 빨리 접근할 수 있음. 
       -> 일반적인 목적을 위한 레지스터는 16비트로 되어있으며 8비트 레지스터로 나누어질 수 있음. 
 
       -> 32bit 레지스터
         EAX : 곱셈, 나눗셈, 함수의 리턴값 저장용도로 쓰임
         EBX : ESI나 EDI와 같이 결합하여 인덱스에 사용됨
         ECX : 반복명령어 사용시 반복 카운터로 사용됨
         EDX : EAX와 같이 쓰이며 부호 확장 명령 등에 쓰임
         ESI : 데이터복사나 조작 시 source date의 주소가 저장됨
         EDI : 복사 작업 시 목적지의 주소가 저장 주로 ESI레지스터가 가르키는 주소의 데이터에 복사됨
         ESP : 하나의 스택프레임의 끝 주소가 저장됨 PUSH, POP명령어에 따라서 ESP의 값이 4Byte씩변함
         EBP : 하나의 스택 프레임의 시작 지점 주소 저장됨 현재 사용되는 스택 프레임이 소멸돼면 이전에 사용되던 스택 
               프레임을 가리키게 됨
       -> 인덱스 레지스터
         SI(문자열 / 배열의 소스지정)
         DI(문자열 / 배열의 목적지 지정)
         IP(다음 명령의 주소저장. 직접적 변경X)
       -> 스택 레지스터 : BP(스택 오퍼레이션을 위해 SP와 연결되어 사용), SP
   2) 기본 asm
       -> MOV 목적지, 값
         MOV AX, 56h ;  AX = 16진수 56
         MOV AX, BX  ;  AX = BX

       -> XCHG 레지스터1, 레지스터 2
         MOV DX, 56h ;  
         MOV AX, 3Fh ;  
         XCHG DX, AX ;  DX = 3F , AX = 56

       -> INC , DEC
         MOV DX, 50h ; DX = 50h
         INC DX      ; DX = DX++, 즉 51h
         MOV DX, 50h ; DX = 50h
         DEC DX      ; DX = DX-- ,즉 4Fh(50h – 1h = 4Fh)

       -> POP, PUSH
         PUSH AX     ; AX에 값을 일시적으로 저장
         POP  AX     ; 원래값을 회복

       -> ADD 레지스터 1, 레지스터 2 / ADD 레지스터, 값
         MOV AX, 5h  ; AX = 5h
         ADD AX, 4h  ; AX + 4h = AX(5h + 4h = AX)

       -> SUB 레지스터 1, 레지스터 2 / SUB 레지스터, 값
         MOV BX, 4Fh  ; BX = 4Fh
         SUB BX, 5h   ; BX - 5h (4Fh – 5h =  4A)

       -> MUL
         MOV AX, 5h  
         MOV BX, 4Fh  
         MUL BX       ; (4Fh x 5h = 18B)

       -> DIV
         MOV AX, 5h
         MOV BX, 4Fh
         DIV BX        ; (4Fh / 5h = Fh)

       -> AND 레지스터 1, 레지스터 2 / AND 레지스터, 값
         MOV AX, 5h   ; 5h = 101b
         MOV BX, 6h   ; 6h = 110b
         AND AX, BX   ; 100b = 4h

       -> OR 레지스터 1, 레지스터2 / OR 레지스터, 값
         MOV AX, 5h   ; 5h = 101b
         MOV BX, 6h   ; 6h = 110b
         OR  AX, BX   ; 111b = 7h

       -> XOR 레지스터 1, 레지스터 2 / XOR 레지스터, 값
         MOV AX, 5h   ; 5h = 101b
         MOV BX, 6h   ; 6h = 110b
         XOR AX, BX   ; 011b = 3h

       -> NOT 레지스터 / NOT 값
         MOV AX, F0h  ; F0h = 11110000
         NOT AX       ; 00001111 = Fh


반응형