개발 블로그

[스무디] 어셈블리어 강의 29~32강 정리 본문

해킹 및 보안/리버싱

[스무디] 어셈블리어 강의 29~32강 정리

갹둥 2022. 12. 1. 17:21

29강~30강 반복문 jecxz, loop, rotate

Loop 명령어: ecx가 0이 아닐 때 반복, ecx 값이 자동으로 1 감소

Loop [주소](반복할 부분)

 

LOOPE( LOOZ )-> zf=1이고 ecx가 0이 아닐 때 반복, 체크를 두 가지 해야할 때 사용

 

 

rotate 연산 ->  shift 연산의 연장

-rotate에서는 밀려난 값을  최하위  혹은 최상위 비트에 넣음

ex) 0111 -> 1110

 

- left: 최상위 비트가 최하위 비트로 들어감

-right: 최하위 비트가 최상위 비트로 들어감

ror       [r / m8]     [1 / imm8 / cl]

rol

 

*1이 오는 경우는 기계어로 2바이트이고 임시값이 오면 4바이트임

*오버플로우 비트는 최상위 비트와 그 옆 비트가 다를 때 세팅됨

 

rcl:: 최상위 비트가 CF로 가고 CF가 최하위 비트로 감

*일반 로테이트 연산과 rcl 둘 다 캐리플래그를 사용하지만 rol에서는 최상위 비트가 CF를 덮어쓰고 그 값이 최하위 비트로 들어간다면  rcl에서는 CF 값을 최하위 비트로 추가함

rcr: 캐리 플래그 값이 최상위 비트로 들어가고 최하위 비트 값이 CF로 들어감

 

즉, ror과 rol에서 캐리 플래그는 그저 도구로만 사용됨

 

31강 not, neg

not 연산 -> 비트를 반전시켜줌

0은 1로 1은 0으로 반전

not r/m

 

negative -> 부호가 있는 정수에 대한 연산, 양수를 음수로 음수를 양수로 바꿈

not을 해준 후 1을 더함

neg r/m

 

 

32. call, ret

*스택: LIFO 구조

프로그램에서 함수 호출 시 사용

1. EIP에서 기계어 읽어옴(다음 실행할 명령어 주소)

2. 읽어온 바이트수 만큼 EIP값 증가

3. 기계어 실행

 

call : 함수 호출 시 사용

->스택에 다음 실행 주소가 들어감, 죽 EIP 값을 스택에 push

*esp: 데이터를 넣을 때마다 4씩 감소

ex) call 주소

 

ret: 함수 실행을 마치고 원래 있던 주소로 돌아감 

> pop 후 EIP에 넣음