콘텐츠로 이동

Binaryen - WebAssembly 컴파일러 및 최적화 도구 체인 치트시트

Binaryen - WebAssembly 컴파일러 및 최적화 도구 체인 치트시트

Binaryen은 C++로 작성된 WebAssembly용 컴파일러 및 도구 체인 인프라 라이브러리입니다. 헤드라인 도구인 wasm-opt는 wasm 모듈을 중간 표현으로 로드하고 최적화 및 변환 passes를 실행합니다 — Emscripten과 같은 도구 체인이 wasm을 축소하고 가속화하기 위해 사용하는 동일한 메커니즘입니다. 역공학자의 경우 Binaryen의 분석기 (wasm-dis)와 분석/변환 passes (난독화 해제와 유사한 단순화 포함)는 WABT를 보완하는 유용한 도구입니다.

설치

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

핵심 도구

도구수행
wasm-opt모듈 로드, 최적화/변환, 재내보내기
wasm-dis.wasm → 텍스트 분석
wasm-as텍스트 → .wasm 어셈블
wasm-metadce모듈 + JS 전체의 데드코드 제거
wasm-ctor-eval빌드 타임에 생성자 평가
wasm-reduce동작을 보존하면서 모듈 축소 (버그 재현)
wasm-shell스펙 테스트 셸 실행

모듈 최적화

# 속도와 크기 최적화
wasm-opt -O3 module.wasm -o module.opt.wasm

# 크기를 위해 공격적으로 최적화
wasm-opt -Oz module.wasm -o module.small.wasm
플래그효과
-O / -O1..-O4속도를 위한 증가하는 최적화
-Os크기 최적화
-Oz크기를 위한 공격적인 최적화
--enable-FEATUREwasm 제안 활성화 (simd, threads, …)
-o FILE출력 파일

개별 Passes 실행

wasm-opt는 선택적으로 실행할 수 있는 많은 이름이 지정된 passes를 노출합니다 — 역공학 (난독화된 코드 단순화)뿐만 아니라 빌드에도 유용합니다.

# 사용 가능한 모든 passes 나열
wasm-opt --help | grep -A2 "passes:"

# 특정 passes 실행 (예: 단순화 + 미사용 제거)
wasm-opt module.wasm --precompute --simplify-locals \
  --remove-unused-names --vacuum -o clean.wasm
Pass (예)목적
--precompute상수 표현 폴드
--simplify-locals중복 로컬 사용 감소
--vacuum명백히 데드 코드 제거
--remove-unused-module-elements미사용 함수/전역 제거
--flatten / --rereloop제어 흐름 재구성

분석 / 어셈블

# Binaryen의 텍스트 형식으로 분석
wasm-dis module.wasm -o module.wat

# 다시 어셈블
wasm-as module.wat -o module.wasm

역공학 사용: 단순화 후 읽기

실용적인 역공학 트릭은 Binaryen의 단순화 passes를 실행하여 컴파일러/난독화기 노이즈를 정리한 후 결과를 읽는 것입니다.

# 복잡한 모듈을 단순화한 후 WABT로 디컴파일
wasm-opt target.wasm --precompute --simplify-locals --vacuum -o simpler.wasm
wasm-decompile simpler.wasm -o simpler.dcmp

재현 최소화 (wasm-reduce)

# 스크립트가 여전히 관심 있는 동작을 보고하는 동안 모듈 축소
wasm-reduce big.wasm --command "node check.js" -o small.wasm

버그를 트리거하거나 특정 동작을 나타내는 최소 wasm을 격리하기에 좋습니다.

Binaryen vs 관련 도구

도구초점
Binaryenwasm 최적화/변환/분석 (컴파일러 급)
WABT변환/검사/검증/디컴파일
diswasm의사코드 디컴파일러
wasm-toolsRust 저수준 조작

역공학의 경우: Binaryen을 단순화하고, WABT/diswasm을 읽고, wasm-tools검증/변경하는 데 사용하세요.

자료