콘텐츠로 이동

WABT - WebAssembly Binary Toolkit 치트시트

WABT - WebAssembly Binary Toolkit 치트시트

WABT (“wabbit”으로 발음)는 참조 WebAssembly Binary Toolkit — wasm을 저수준에서 작업하기 위한 명령줄 도구 모음입니다. 바이너리 .wasm 형식과 인간이 읽을 수 있는 .wat 텍스트 형식 간에 변환하고, 모듈을 분석하고 덤프하고, 검증하고, C 같은 디컴파일을 생성하고, wasm을 해석/실행합니다. wasm 개발과 역공학 모두에 대한 기초 도구 상자입니다.

설치

플랫폼명령어
macOS (Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
소스에서WebAssembly/wabt 저장소에서 CMake로 빌드
확인wat2wasm --version

핵심 도구

도구변환 / 수행
wat2wasm텍스트 .wat → 바이너리 .wasm
wasm2wat바이너리 .wasm → 텍스트 .wat (분석)
wasm-objdump섹션, 옵코드, 심볼 덤프
wasm-decompile읽을 수 있는 C 같은 의사코드 생성
wasm-validate모듈 검증
wasm-interp모듈 해석/실행 (스택 머신)
wasm2cwasm → C 소스 변환
wasm-strip모듈에서 섹션 제거 (예: 이름)

텍스트 ↔ 바이너리

# 텍스트를 바이너리로 어셈블
wat2wasm module.wat -o module.wasm

# 바이너리를 텍스트로 분석 (역공학 시작점)
wasm2wat module.wasm -o module.wat

# 분석 중 디버그 이름 / 사용자 정의 섹션 유지
wasm2wat --generate-names module.wasm
옵션효과
-o FILE출력 파일
--generate-names이름 없는 함수/로컬에 대한 이름 합성
--enable-FEATUREwasm 제안 켜기 (예: --enable-threads)
-v상세 출력

모듈 검사 (objdump)

# 전체 섹션 + 분석 덤프
wasm-objdump -x module.wasm      # 헤더/섹션
wasm-objdump -d module.wasm      # 코드 분석
wasm-objdump -s module.wasm      # 섹션 내용 (16진수)
플래그표시
-h섹션 헤더
-x모든 섹션의 세부정보
-d분석된 함수 본문
-s원본 섹션 내용
-j SECTION하나의 섹션으로 제한

디컴파일 (읽을 수 있는 출력)

# C 같은 디컴파일 — WAT보다 읽기 훨씬 쉬움
wasm-decompile module.wasm -o module.dcmp

wasm-decompile은 구조화된 제어 흐름과 타입이 지정된 로컬을 재구성하여 분류 중에 모듈이 무엇을 하는지 빠르게 이해하는 방법입니다.

검증 및 실행

명령어목적
wasm-validate module.wasm모듈이 올바르게 형성되었는지 확인
wasm-interp module.wasm --run-all-exports내보낸 함수 실행
wasm2c module.wasm -o module.c컴파일/분석을 위해 C를 내보냄

역공학 워크플로우

# 1) 이름을 지정하여 분석
wasm2wat --generate-names target.wasm -o target.wat

# 2) 기능을 이해하기 위해 가져오기/내보내기 덤프
wasm-objdump -x target.wasm | grep -E "import|export"

# 3) 읽을 수 있는 의사코드 얻기
wasm-decompile target.wasm -o target.dcmp

# 4) 데이터 섹션에서 문자열/URL 찾기
wasm-objdump -s target.wasm | less

기능 플래그 (제안)

플래그활성화
--enable-threads스레드/원자성
--enable-simdSIMD
--enable-bulk-memory대량 메모리 연산
--enable-reference-types참조 타입
--enable-all지원되는 모든 제안

모듈이 더 최신 wasm 기능을 사용할 때 기본 도구가 이를 거부하는 경우 사용하세요.

WABT vs 관련 도구

도구역할
WABT변환/검사/검증/디컴파일 wasm
diswasm더 높은 수준의 의사코드 디컴파일러
wasm-toolsRust 저수준 조작
Binaryen컴파일러/최적화 도구 모음 (wasm-dis, wasm-opt)

자료