8~9강 점프 JMP
JMP: 실행의 흐름을 변경, 원하는 메모리 주소로 가야할 때
ex) JMP [401005]
*EIP: 다음에 실행할 주소를 담고있는 레지스터
-현재 실행될 명령어의 크기를 계산하고 그 크기만큼 현재 실행될 코드의 주소값에 더해주어 다음에 실행될 코드 주소를 가르켜 줌
-EIP는 범용 레지스터가 아니기 때문에 MOV 연산 사용 불가, JMP로 흐름을 변경해야함
#해킹: EIP라는 레지스터에 들어가는 값을 해커가 원하는 값으로 바꾸면 됨!
10강 증감 명령어
INC: 증가 연산, ++과 같은 역할
INC [REG/MEM]
DEC: 감소 연산, --와 같은 역할
DEC [REG/MEM]
11강 ADD, SUB
ADD: 덧셈 연산
ADD op1, op2 -> op1에 op2를 더한다.
SUB: 뺄셈 연산
SUB op1, op2 -> op1에 op2를 뺀다.
-op로는 레지스터, 메모리, 데이터가 올 수 있음
ex) ADD EAX, 10 -> EAX에 10을 더해라
-ollydbg에서는 16진수로 사용함
-ADD EAX, BX 처럼 크기가 다르면 안됨
-ADD [MEM], [MEM]은 안됨, 해당하는 기계어가 설계되어 있지 않음
12강 레지스터로 주소 지정
주소 간접 사용
mov dword [402000], 0 <<주소를 직접 사용하는 방법
mov eax, 402000 <<레지스터에 주소 저장
메모리에 직접 접근하는 것이 아니라 레지스터를 이용
ex) mov eax, 402000
mov dword ptr [eax], 10
결과: 402000에 10이 들어감
*메모리에 메모리 주소를 저장하는 경우
mov dword ptr [402004], 402000 -> 402004에 402000를 넣음
mov ebx, [402004] -> ebx에 402004에 들어있는 값(402000)을 넣음
mov [ebx], 4 -> ebx에 들어있는 값에 해당하는 주소에 4를 넣음, 즉 402000 주소에 값을 넣음
*[[402000]] 이런식으로는 사용할 수 없기 때문에 레지스터를 거쳐야 함
*c언어의 포인터
'해킹 및 보안 > 리버싱' 카테고리의 다른 글
[스무디] 어셈블리어 강의 정리 (18~22강) (0) | 2022.11.10 |
---|---|
[스무디]어셈블리어 강의 13~17강 정리 (0) | 2022.10.13 |
[스무디] 어셈블리어 강의4~7강 정리 (0) | 2022.10.02 |
[ 스무디 ] 어셈블리어 강의 1~ 3강 정리 (1) | 2022.10.02 |
리버싱 입문 (0) | 2022.10.02 |