[ Assemble ] 어셈블리어 덧셈(add)/뺄셈(sub) 실습

2020. 4. 15. 15:35·Archive/Hacking
728x90
반응형

 

 

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 가 전부 메모리 값일 경우 에러발생.

728x90
반응형

'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
'Archive/Hacking' 카테고리의 다른 글
  • [ Pwnable ] pwnable.kr 1번 fd 풀이
  • [ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte)
  • [ Assemble ] 어셈블리 입력 매크로함수
  • [ Assemble ] 문자열 변수 선언 & 출력
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    파이썬 기초
    파이썬 알고리즘
    자바스크립트 API
    코드업 파이썬 기초 100제
    파이썬
    Python
    장고
    오라클
    파이썬 백준
    Codeup
    백준 문제풀이
    javascript
    보안뉴스
    파이썬 기초 문제
    코드업 기초
    파이썬 문제
    백준 풀이
    docker
    백준 파이썬
    백준
    oracle db
    Django
    자바스크립트 객체
    C++
    비박스
    자바스크립트
    Oracle
    코드업
    Git
    카카오 100일 프로젝트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Assemble ] 어셈블리어 덧셈(add)/뺄셈(sub) 실습
상단으로

티스토리툴바