Menu
Coddy logo textTech

Assembly Playground

코드 스니펫을 작성, 실행, 공유하세요 - 별도 설치가 필요 없습니다.

Coddymain.asm
Output
Click Run to see the output here.

브라우저에서 Assembly를 온라인으로 실행하기

이것은 NASM 문법으로 작성된 x86-64 코드를 위한 무료 온라인 Assembly 컴파일러입니다. 프로그램을 입력하고 실행을 누르면 Coddy가 nasm -f elf64로 어셈블하고 ld로 링크한 다음 생성된 Linux 실행 파일을 서버 측에서 실행하고, 이어서 stdout, stderr, 종료 상태를 보여줍니다. 설치할 것은 전혀 없습니다. NASM도, 링커도, 가상 머신도, 크로스 컴파일러도 필요 없습니다.

스타터 프로그램은 표준 입력에서 한 줄을 읽고 원시 read, write, exit 시스템 콜을 사용해 인사말을 되돌려 쓰는 완전한 _start 진입점입니다(libc 없음). 이것이 어셈블리가 실제로 동작하는 방식입니다. 인수를 rax/rdi/rsi/rdx로 옮기고 syscall을 호출하면 나머지는 커널이 처리합니다. 에디터 아래의 stdin 패널을 사용해 실행할 때마다 프로그램에 입력을 전달하세요. 실제 바이너리에 데이터를 파이프로 넘기는 것과 완전히 같습니다.

이 Assembly playground가 유용한 이유

  • 진짜 x86-64 NASM 툴체인. 소스는 Linux에서 nasm -f elf64로 어셈블되고 ld로 링크됩니다. 로컬에서 직접 입력할 명령과 동일하므로, 여기서 실행되는 것은 실제 머신에서 실행되는 것과 일치합니다.
  • 직접 Linux 시스템 콜. 스타터는 libc를 끼우지 않고 syscall 명령을 통해 read, write, exit를 사용하므로, 레지스터가 인수와 반환 값을 어떻게 전달하는지 정확히 볼 수 있습니다.
  • 표준 입력 지원. stdin 패널을 통해 프로그램에 바이트를 보내고 시스템 콜 0으로 읽으세요. 고전적인 '이름을 읽고 인사말을 출력하는' 연습과 그 이상에 유용합니다.
  • 설정 없음, 즉각적인 피드백. NASM 설치도, 기억할 링커 플래그도, 권한 오류도 없습니다. 페이지를 열면 에디터가 준비되어 있습니다. 어셈블러와 링커의 오류는 곧바로 출력으로 돌아옵니다.

Assembly playground에서 시도해 볼 수 있는 것

  • 단일 write 시스템 콜로 고정 문자열을 출력한 다음 깔끔하게 exit(0) 하기. 가장 작은 완전한 x86-64 프로그램이며, _startsyscall이 어떻게 맞물리는지 가장 빠르게 확인하는 방법입니다.
  • stdin에서 .bss 버퍼로 읽어 들이고, 끝의 개행을 잘라낸 뒤 그대로 돌려주기. 입력 기반 어셈블리 연습 거의 전부의 밑바탕이 되는 패턴입니다.
  • 두 수를 레지스터에서 더하고 그 결과를 손으로 ASCII 숫자로 변환해 write 할 수 있게 하기. 어셈블리에는 print가 없고 오직 바이트와 시스템 콜만 있다는 것을 이렇게 배웁니다.

온라인 Assembly 컴파일러 FAQ

이 playground는 어떤 어셈블러와 문법을 사용하나요?
x86-64 Linux를 대상으로 Intel 문법의 NASM(Netwide Assembler)을 사용합니다. 코드는 nasm -f elf64로 어셈블되고 ld로 링크됩니다. AT&T/GAS 문법(%rax, movq 스타일)에서 왔다면 NASM의 Intel 스타일로 다시 작성하세요. mov rax, 1, section .text, global _start처럼요.
이것을 사용하려면 NASM이나 링커를 설치해야 하나요?
아니요. 전체 툴체인은 격리된 컨테이너에서 서버 측으로 실행됩니다. 브라우저에서 NASM을 작성하고 실행을 누르면 Coddy가 당신을 대신해 프로그램을 어셈블하고 링크합니다. 로컬에 설치할 것은 전혀 없습니다. NASM도, ld도, Linux VM도 필요 없습니다.
여기서 어셈블리로 입력을 어떻게 읽나요?
read 시스템 콜(번호 0)을 사용하세요. rax에 0(sys_read), rdi에 0(stdin), rsi에 버퍼의 주소, rdx에 최대 바이트 수를 넣은 다음 syscall을 실행합니다. 에디터 아래 stdin 패널에 입력한 것은 실행 시 프로그램에 전달됩니다. 스타터는 끝의 개행을 잘라내는 것을 포함해 전체 패턴을 보여 줍니다.
왜 제 프로그램은 main이 아니라 _start가 필요한가요?
스타터가 ld로, C 런타임 없이 링크되기 때문입니다. main은 libc의 관례입니다. C 시작 코드가 준비를 마친 뒤 그것을 호출합니다. 순수한 ld 링크에는 libc가 없으므로 커널이 곧바로 _start 레이블로 점프합니다. 그래서 여기의 모든 프로그램이 global _start를 정의하는 것입니다. 마지막에 exit 시스템 콜(번호 60)로 깔끔하게 종료하는 것은 당신의 책임입니다.
초보자라도 이 컴파일러로 어셈블리를 배울 수 있나요?
네. 인사말 프로그램에서 시작해 문자열을 바꾸고 출력을 지켜보세요. 그다음 입력 읽기, 레지스터에서의 산술, 숫자를 손으로 텍스트로 변환하기를 시도해 보세요. 설정이 없고 실행할 때마다 즉각적인 피드백이 주어지므로 빠르게 반복할 수 있습니다. 이것이 레지스터, 메모리, 시스템 콜에 대한 직관을 기르는 가장 빠른 방법입니다.

Assembly에 유용한 도구

Assembly 플레이그라운드와 잘 어울리는 브라우저 기반 무료 도구 - 모두 Coddy의 일부입니다.