Tag Archives: 어셈블리

어셈블리 – MOV MOVZX LEA 명령 MASM32

 어셈블리 – MOV MOVZX LEA 명령 MASM32 이 명령은 어셈블리중 제일 자주 접하게 되는 데이터를 복사(Move가 아니다.)하는 역할을 한다. CPU는 복사는 같은 사이즈의 데이터끼리만 가능하며, 메모리에서 메모리는 불가능하므로, 복사하고자 하는 데이터을 CPU 레지스터를 이용하여 복사하게 된다. 그리고 세그먼트 레지스터의 내용을 범용 레지스터가 아닌 곳으로 이동은 가능하나 그 반대는 불가능 하다. masm1.asm .586 .model flat, stdcall

Read More

어셈블리 – CMP 명령 MASM32

어셈블리 – CMP 명령 MASM32 CMP 명령은 비교 명령으로, 이를 하기전에 플래그라는 개념을 이해할 필요가 있다. (앞서 EFLAGS 레지스터로 설명하였지만 다시 설명 하도록 하겠다.) 플래그는 비교적 간단하다. 플래그는 CPU 의 (E)FLAGS 레지스터에 저장되는 처리 데이터로, (E)FLAGS 의 한 비트가 한 플래그가 된다. 명령어들을 실행하면서 각 실행 결과에 따라서 플래그가 변경된다. (xor eax, eax 를 실행하면

Read More

어셈블리 – MASM32 사용법

어셈블리 – MASM32 사용법 Masm32는 64비트 운영체제를 제대로 지원하지 못하므로, 가상 머신을 이용하여 32비트 운영체제에 설치하기 바란다(여기서는 일반적으로 리버스 엔지니어들이 많이 사용하는 Masm32를 통해 설명하고자 한다. 만약 32/64비트 환경에서 이용하고자 한다면, 비주얼 스튜디오에서 제공하는 파일인 VC\bin의 Ml64.exe(64비트) 혹은 Ml.exe(32비트)를 이용할 수 있지만, 어셈블리 코드 작성 방법이 Masm32와 다소 차이가 있다). [그림] Masm32 SDK 설치 화면

Read More

레지스터와 어셈블리 그리고 스택

레지스터와 어셈블리 그리고 스택 가장 먼저 공부해야할 부분을 CPU로 잡았다. 이유는 윈도우 구조 분석에 있어 대다수 코드가 CPU가 처리하는 과정을 보는 과정이기 때문이다. CPU 처리 과정의 이해는 윈도우 구조를 이해하는데 매우 중요하다. 윈도우라는 운영체제는 사용자와 하드웨어에서 중간 다리 역활을 해주는 장치라 할 수 있다. 예로 사용자가 엑셀을 이용해서 문서를 만들때 입력 장치인 키보드를 사용할 수

Read More