본문 바로가기
해킹/시스템해킹

어셈블리어로 반복문 구현

by 맑은청이 2020. 8. 3.
728x90
반응형

 

다음은 100회 반복하면서 A 를 출력하는 반복문이다. 

 

for(int i = 0; i < 100; i++){

   printf("%d", A);

}

 

다음과 같은 역할을 하도록 어셈블리어를 작성해보자 .

 

1. 'A' 인 변수 msg 선언, 텍스트 영역에는 _start 함수 

2. _start 함수 정의 

_start 함수를 통해 rax 에 1 -> write 해야하기 때문에

rdi 도 write 니깐 1을 넣어주고 msg 를 출력해야하기 때문에 rsi 에 넣음 

또 변수 r10 에 1을 넣어줌. 이는 for 문에서 index 와 같은 역할을 함. 

 

 

 

3. again 함수 정의 

cmp 은 A 와 B를 비교해주는 명령어이다. 

je 는 비교 결과가 같으면 다음 주소로 점프해주는 명령어다 .

 

즉 r10이 100과 같으면 done 으로 점프해준다. 

 

아니면 다시 아래 줄로 syscall 현재 rax 에 1이 들어 있기 때문에 write 를 한다. 

mov rax, 1을 해주는 이유는 rax 는 계산에 결과가 들어가기 때문에 write 를 해주긴 위해서 계속 1을 다시 넣어주어야하기 때문이다. 

inc r10 을 하면 r10 +1 이 됩니다. for문에서 i++ 부분에 해당한다고 생각하면 된다. 

jmp again 을 해서 다시 반복문을 돈다. 

 

만약 r10가 100이 돼서 done 으로 점프한다고 했다.

 

 

4. done 함수 정의 

done 에서는 시스템 종료를 위해 rax 에 60 을 넣고 syscall을 한다. 

이러한 시스템 종료 과정을 거치지 않으면 세그먼트 오류가 난다. 

728x90
반응형

'해킹 > 시스템해킹' 카테고리의 다른 글

로지컬 버그  (0) 2020.08.06
시스템 해킹 별 찍기 프로그램 구현  (0) 2020.08.04
어셈블리어 문법 간단 정리  (0) 2020.08.03
시스템 해킹 echo 구현  (0) 2020.08.03
시스템해킹 메모리 커럽션  (0) 2020.08.02