목록2018/07 (10)
GaGe
addition : 덧셈 subtraction : 뺄셈 뒤에 인자는 mov와 같이 2개, 레지스터도 올 수 있고 메모리도 되고 즉시값도 가능. c언어로 본다면, add a, 10은 a+=10과 같다. 실습을 보자! add eax, 10 이라고 하면 eax 에 10을 더하라는 의미이다. 한번 실행해 보겠다. eax에 10이 더해진 것을 알 수 있다. mov랑 같네! 라고 생각할 수 있으니 eax에 한번 더 더해보겠다. add eax, 7을 해서 eax 에 7을 더해보겠다. mov 처럼 덮어쓰기 하는 것이 아닌 더해진다. 17이 되었다. 레지스터끼리도 가능하다. ecx에 eax를 더한다. *2 한번 더해져서 17이 되었고 두번 더해져서 2E가 되었다. eax에 ecx를 더해보았다. 17+2E = 45 45로..
inc와 dec의 명령어를 설명하겠다. inc는 increase의 약자로 값을 하나 증가시키는 의미이고 dec은 decrease의 약자로 값을 하나 감소시키는 의미이다. inc와 dec는 인자가 하나인 것을 기억하자. 인자의 자리에는 reg이 올 수도 있고 mem이 올 수도 있다. inc를 사용해서 inc eax inc ebx inc ecx inc edx 명령어를 쳐봤다. 결과를 보면 eax, ebx, ecx, edx에 값이 하나씩 증가된 것을 볼 수 있다. al이나 ax 와 같은 2바이트 레지스터에도 적용할 수 있다. al과 ax가 하나씩 증가되어 eax 전체가 3이 된 것을 알 수 있다. 메모리에 넣으려고 하니까 eperand 사이즈를 맞추라는 경고가 뜬다. 저번 시간에 했던 것을 떠올려보자. dwo..
이 jmp 앞의 short의 의미는 f9과 같이 한 바이트로 이동범위를 저장할 수 있으면 short가 붙는다 ( -128 ~ 127) long은 아무것도 붙지 않는다. jmp 뒤에는 레지스터도 쓸 수 있다. 레지스터 eax안에 401005라는 값이 있다면 401005라는 주소값으로 jmp하는 것이다. jmp뒤에 ram 메모리주소도 쓸 수 있다. 402000이라는 ram메모리 안에 401002라는 주소값을 저장하고 [402000]으로 jmp하면 401002라는 주소값으로 jmp한다.
JMP = 실행의 흐름을 뛴다라는 의미 EIP라는 레지스터는 다음에 실행할 명령어의 주소를 저장하는데 평소에는 주소가 차례로 증가하지만 JMP 명령어를 이용해서 중간에 EIP에 저장된 주소를 변경하면 바로 그 주소로 넘어갈 수 있다. EIP도 레지스터이긴 하지만 범용레지스터가 아니기 때문에 MOV명령어로 그 값을 변경해 줄 수 없고 JMP로 가능하다. JMP 명령어를 넣으면 JMP SHORT [주소값] 이렇게 명령어가 된다. short는 실행할 명령어랑 현재 명령어가 가까울 때를 의미한다. 위처럼 40100F에서 옆에 EB F4가 있는 걸 볼 수 있는데, eb가 jmp short를 의미하고 f4가 움직일 만큼이다. 40100F가 끝나면 401011이 eip에 저장되는데 여기서 f4만큼 움직이라는 뜻이다...