본문 바로가기

Layer7/WriteUp

어셈블리어로 별찍기

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