어셈블리 4

어셈블리 - REP 명령어

REP 명령어는 REP뒤에 오는 스트링 명령을 CX 레지스터가 0이 될때까지 반복하는 명령이다. 한번 명령이 실행되면 CX 레지스터의 값은 1 감소한다. 예를 들어, REP MOVS byte ptr [edi], byte ptr [esi] 이런식으로 쓸 수 있다 중간에 STOS, MOVS, SCAS 가 올 수 있는데 각각 의미는 STOS : 크기에 따라 (AL/AH/AX/EAX)를 EDI가 가르키는 주소에 저장한다 MOVS : ESI, EDI 증가 SCAS : AX와 비교하여 같으면 아래로, 같지 않으면 계속 명령 실행

어셈블리어 - LEA 명령어

LEA 명령에 대해 알아보겠음. 지정한 주소값을 가져오는 명령어로, 보통 값을 가져와야 하는 경우에 쓰인다. MOV와는 다르다. 레지스터에 주소값을 저장하고 싶을 때 사용되는 명령어임. 예제를 통해 확실한 개념을 알아보겠음. 디어셈블을 위한 소스는 위와 같음. .data 부분은 데이터 세그먼트를 지정하여 1234값을 저장하는 것이다. push ebp mov ebp, esp sub esp, 4h :함수의 프롤로그와 스택 한칸을 할당한다. mov dword ptr [ebp-4], 00402000h : [ebp-4] 위치에 0x00402000 값을 저장한다. 여기서 0x00402000은 앞에 데이터 세그먼트에 저장된 1234의 주소값이다. mov eax, dword ptr [ebp-4] : [ebp-4] 위치..

어셈블리어 - MOVZX 명령어

MOV 명령의 확장 명령인 MOVZX를 알아본다. 이전에 MOV명령을 설명할 때 같은 크기의 데이터 끼리만 복사가 된다고 했는데.. MOVZX 명령은 첫번째 데이터가 두번째 보다 크기가 커도 복사가 된다. 대신 크기가 안맞으니 남은 공간은 0으로 체워짐.. 컴파일과 오브젝트 파일 링크하는 방법은 이전 mov명령어 포스트 참고 push ebp mov ebp, esp sub esp, 4h : 아까도 설명 했듯이.. 함수의 프롤로그와 스택 한칸의 크기를 할당한다. mov dword ptr [ebp-4], 0000ffffh : 할당된 스택에 0xFFFF 값이 저장된다. mov bx, word ptr [ebp-4] : BX부분에 FFFF가 복사된다. 원래 ebx값이 7FFD0000이었는데 7FFDFFFF이 되었음..

어셈블리어 - MOV 명령어

MOV 명령 데이터를 복사하는 명령어다. move라고 착각하여 이동시킨다고 생각할 수 있는데 이거는 복사하는 거다. MOV를 쓸 때 몇가지 제한사항이 있으니 참고하자. * 레지스터에서는 같은 사이즈의 데이터끼리만 복사 가능하다. * 메모리에서 메모리로 복사가 안된다. 고로 레지스터를 통해서 복사해야한다. * 세그먼트 레지스터의 내용은 범용 레지스터가 아닌 곳으로 이동 가능. 반대는 불가 mov는 " mov eax, ebx " 형태를 가진다. ebx의 값을 eax로 복사한다. 이런 뜻이다. 직접 예제를 통해서 mov에 대해 더 알아보자. mov에 관한 예제 어셈블리 코드이다. 설명이 필요하니 하겠음 .code : 코드가 시작되는 부분 main proc push ebp : 기존 EBP 주소를 스택에 백업 m..

반응형