본문 바로가기

Reversing/Assemble7

[ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte) SASM 환경에서 진행합니다. Assemble 곱셈 실습 어셈블리어에서의 곱셈/나눗셈은 덧셈, 뺄셈보다 조금 복잡합니다. 이번 포스팅은 1byte 곱셈 / 1byte 나눗셈만 다뤄보겠습니다. 우선, AX 라는 레지스터는 AH 와 AL 로 나눌 수 있습니다. 이걸 알고 넘어가야 이해할 수 있습니다. AX AH AL 곱셈의 형식은 이러합니다. mul 파라미터 우리가 아는 곱셈의 형식은 피연산자가 2개인, A*B 의 형태입니다. 하지만 어셈블리어에서는 마치 피연산자가 1개인 것 처럼 보입니다. 핵심만 말하겠습니다. mul 뒤에 붙는 파라미터 값은 AL 과 곱해져 AL에 저장됩니다. AL에 저장된다는 것은, AX에서도 그 값을 볼 수 있다는 말입니다. 말로는 조금 어려우니, 코드로 볼까요? ax에 0이 들어있는.. 2020. 4. 15.
[ Assemble ] 어셈블리어 덧셈(add)/뺄셈(sub) 실습 SASM 환경에서 진행합니다. Assemble 더하기 연산 우선 레지스터끼리의 더하기 연산 실습을 해봅시다! 그림은 eax 에는 1을, ebx에는 6을 복사한 뒤 add를 이용해서 eax와 ebx를 더한 값을 eax에 넣는 코드입니다. add 파라미터1, 파라미터2 의 형식으로 덧셈을 진행합니다. 이는 c언어등의 다른 언어에서 파라미터1 = 파라미터1 + 파라미터2 와 동일한 기능을 합니다. 결과 값을 예측해보세요. 어떻게 될 것 같나요? 네. 7이 나옵니다. 이제 변수를 선언해서 덧셈 연산을 해봅시다. 자. 여기서 문제 하나 드리겠습니다. 위 그림의 코드는 정상적으로 실행이 가능할까요? 에러가 난다면, 어떤 라인을 어떻게 바꿔야 할까요? 덧셈과 뺄셈 등의 연산에서, 같은 메모리 변수는 더하거나 뺄 수 .. 2020. 4. 15.
[ Assemble ] 어셈블리 입력 매크로함수 SASM 환경에서 진행합니다. GET_DEC, GET_HEX으로 10진수,16진수 입력받기 형식은 이러합니다. GET_DEC 입력할 바이트 수, 입력 받을 곳 GET_HEX 입력할 바이트 수, 입력 받을 곳 입력받을 곳은 레지스터가 될 수도 있고, 메모리 주소가 될 수도 있습니다. 위의 예시로는 a 주소에 1바이트만큼 입력을 받겠네요. 입력받고 출력하는 프로그램 방금 배운 GET_DEC 을 이용해서 간단한 프로그램을 짜봅시다. 바로 보이죠? GET_DEC : 10진수 입력 받는 매크로 PRINT_DEC : 10진수 출력하는 매크로 둘다 파라미터로 크기와 대상이 되는 장소를 필요로합니다. 2020. 4. 15.
[ Assemble ] 문자열 변수 선언 & 출력 우선 SASM을 켜서 새 문서를 만듭니다. 문자열을 담는 변수 선언 data 영역에 선언해보도록 하겠습니다. 형식은 위의 그림과 같습니다. 변수명 크기 문자열, 0x00 여기서 0x00은 문자열의 끝을 의미하는 NULL값입니다. 문자열 변수 출력하기 문자열 변수를 출력하려면 PRINT_STRING 명령어를 이용합니다. 예시를 보시죠. 위에 선언한 변수들을 출력해보도록 하겠습니다. 중간에 NEWLINE은 개행문자 \n 과 같은 의미입니다. 명령어만 알면 간단하죠? 2020. 4. 15.