* 2019년 1학년 1학기 동아리 과제
결과값을 출력할 때 문자로 출력하다보니
2자리수의 결과값을 출력하는게 어려웠다.
무엇이든지 직접해야 와닿는 것같다.
21.12.16 항상 열심히 히자
### 컴파일 방법 ###
nasm -f elf64 파일명.s -o 파일명.o
ld 파일명.o -o 파일명
* -s 옵션 넣으면 심볼 날립니다!!
# 결과물 사진
section 이름을 gugu로 했더니 .text 영역의 이름이 .gugu로 되었다
그리고 2자리의 구구단 연산은 지원을 하지 않는다 ㅠㅠ
# source code
global _start
section .gugu
_start:
; read number
xor rax, rax
xor rdi, rdi
mov rsi, input
mov rdx, 1
syscall
; print result
mov rcx, 9 ; repeat count
mov rax, '1'
print:
push rax
push rcx
mov [num], al
mov rax, 1 ; @ x ? = ?\n
mov rdi, 1
mov rsi, input
mov rdx, 1
syscall
call printX ; ? @ ? = ?\n
mov rax, 1 ; ? x @ = ?\n
mov rdi, 1
mov rsi, num
mov rdx, 1
syscall
call printequal ; ? x ? @ ?\n
call printres ; ? x ? = @\n
mov rax, 1 ; ? x ? = ?@
mov rdi, 1
mov rsi, enter
mov rdx, 1
syscall
pop rcx
pop rax
inc al
loop print
; exit
mov rax, 60
xor rdi, rdi
syscall
printX:
mov rax, 1
mov rdi, 1
mov rsi, x
mov rdx, 3
syscall
ret
printequal:
mov rax, 1
mov rdi, 1
mov rsi, equal
mov rdx, 3
syscall
ret
printenter:
mov rax, 1
mov rdi, 1
mov rsi, enter
mov rdx, 1
syscall
ret
printres:
mov al, [input]
sub al, '0'
mov bl, [num]
sub bl, '0'
mul bl
mov bl, 10
div bl
add al, '0'
add ah, '0'
cmp al, '0'
je one
mov [res+1], ah
mov [res], al
mov rax, 1
mov rdi, 1
mov rsi, res
mov rdx, 2
syscall
ret
one:
mov [res], ah
mov rax, 1
mov rdi, 1
mov rsi, res
mov rdx, 1
syscall
ret
section .data
input: dw 0x00
x: dw ' X '
num: db '1'
equal: dw ' = '
res: dw '1'
enter: dw 10
'System Hacking > Study Notes' 카테고리의 다른 글
[ Kernel ] KAISER와 KPTI, and Exploit (2) | 2020.08.17 |
---|---|
[ Kernel ] Meltdown 취약점 (0) | 2020.08.16 |
개인 서버 만들기 (with. GCP) (0) | 2020.06.16 |
Large bin attack (0) | 2020.05.04 |
About Strtok (0) | 2020.04.29 |