section .data
STAR db '*'
SPACE db ' '
EMPTY db 0x0a
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rdx, 1
mov r10, 5
call _print_triangle
_done:
mov rax, 60
xor rdi, rdi
syscall
_print_triangle:
_print_line:
mov r8, 5
sub r8, r10
mov r9, r10
_print_spaces:
test r8, r8
jz _print_stars
mov rsi, SPACE
syscall
dec r8
jmp _print_spaces
_print_stars:
test r9, r9
jz _newline
mov rsi, STAR
syscall
dec r9
jmp _print_stars
_newline:
mov rsi, EMPTY
syscall
dec r10
jnz _print_line
ret
_start 에서 표준 출력 설정 및 최대 줄 수를 초기화하고 _print_triangle 호출을 통해 역삼각형 출력 루틴으로 이동
_print_triangle 라벨에서 현재 줄 수를 추적하고 _print_line 루프를 통해 각 줄을 처리
각 줄은 _print_spaces와 _print_stars 루프를 사용하여 공백과 별 문자를 출력한 후 _newline에서 줄바꿈 문자를 출력하고 줄 수를 감소시킨 후 줄이 남아있으면 다시 _print_line 반복으로 돌아감
'Layer7 > WriteUp' 카테고리의 다른 글
z3-solver 사용법 정리 (0) | 2024.07.16 |
---|---|
어셈블리어 strlen, strcpy, strcmp 세줄요약 (0) | 2024.06.26 |
[Dreamhack]Simple-Crack-Me Writeup (0) | 2024.06.24 |
[Dreamhack]rev-basic-3 WriteUp (0) | 2024.06.19 |
[Dreamhack]rev-basic-2 WriteUp (0) | 2024.06.19 |