SASM 환경에서 진행합니다.
Assemble 더하기 연산
우선 레지스터끼리의 더하기 연산 실습을 해봅시다!
그림은 eax 에는 1을, ebx에는 6을 복사한 뒤
add를 이용해서 eax와 ebx를 더한 값을 eax에 넣는 코드입니다.
add 파라미터1, 파라미터2
의 형식으로 덧셈을 진행합니다. 이는 c언어등의 다른 언어에서
파라미터1 = 파라미터1 + 파라미터2
와 동일한 기능을 합니다.
결과 값을 예측해보세요.
어떻게 될 것 같나요?
네. 7이 나옵니다.
이제 변수를 선언해서 덧셈 연산을 해봅시다.
자. 여기서 문제 하나 드리겠습니다.
위 그림의 코드는 정상적으로 실행이 가능할까요?
에러가 난다면, 어떤 라인을 어떻게 바꿔야 할까요?
덧셈과 뺄셈 등의 연산에서,
같은 메모리 변수는 더하거나 뺄 수 없습니다.
add [a], [b] 는 올바르지 못한 문법이라는 것입니다.
그럼 어떻게 해야할까요? 저는 a와 b를 더하고 싶은데요?
우리에게는 레지스터 가 있습니다!
레지스터는 연산 결과를 저장할 수 있기 때문에
a 변수와 b 변수를 이어줄 수 있는 매개체가 되어 줄 것입니다.
코드를 수정해보도록 하겠습니다.
a 메모리 변수 안에 있는 값을 eax에 복사하고, eax 와 b 메모리변수의 값을 더합니다.
그리고 eax 를 출력했습니다.
실행시켜볼까요?
정상적으로 출력되는 것을 확인할 수 있습니다.
Assemble 빼기 연산
위의 덧셈 연산에서는 add 파라미터1, 파라미터2 를 이용했습니다.
뺄셈은 add가 아닌 sub 을 이용합니다.
위 그림의 출력 결과를 예측해보세요.
정답은?
아, 물론 값과의 뺄셈(덧셈도 마찬가지)도 가능합니다.
메모리 변수 값에 바이트 크기의 1을 빼준 값을 다시 a 에 저장해주는 코드입니다.
출력하면 당연하게도 5가 나옵니다.
Assemble 덧셈/뺄셈 정리
< 덧셈 >
add 파라미터1, 파라미터 2
- 파라미터1 : 레지스터 or 메모리에 있는 값
ex: eax, [a] (O) a(X)
- 파라미터2 : 레지스터, 메모리, 값
ex: eax, a, [a], byte 2 (O)
※ 파라미터1 과 파라미터2 가 전부 메모리 값일 경우 에러발생.
< 뺄셈 >
sub 파라미터1, 파라미터 2
- 파라미터1 : 레지스터 or 메모리에 있는 값
ex: eax, [a] (O) a(X)
- 파라미터2 : 레지스터, 메모리, 값
ex: eax, a, [a], byte 2 (O)
※ 파라미터1 과 파라미터2 가 전부 메모리 값일 경우 에러발생.
'Archive > Hacking' 카테고리의 다른 글
[ Pwnable ] pwnable.kr 1번 fd 풀이 (2) | 2020.04.15 |
---|---|
[ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte) (0) | 2020.04.15 |
[ Assemble ] 어셈블리 입력 매크로함수 (2) | 2020.04.15 |
[ Assemble ] 문자열 변수 선언 & 출력 (0) | 2020.04.15 |
[ Assemble ] 어셈블리어 변수 선언 & 레지스터 데이터 (2) | 2020.04.11 |