본문으로 건너뛰기

WebAssembly 분석

WebAssembly Inspector

.wasm 모듈의 임포트·익스포트·메모리·섹션 크기를 나열하고 텍스트 형식으로 출력합니다.

`.wasm` 파일을 열어 안에 무엇이 있는지 보여 줍니다. 섹션과 크기, 가져오기와 내보내기 전부, 메모리와 테이블 선언, 그리고 빌드가 name 섹션을 남겼다면 함수 이름까지 나옵니다. 모듈을 파싱만 하고 인스턴스화하거나 실행하지는 않습니다.

🔒 브라우저 안에서만 처리wasminspectbinary

.wasm 모듈 놓기

이 탭에서 파싱합니다. 모듈을 들여다볼 뿐 인스턴스화하거나 실행하지 않습니다.

바이너리 구조를 읽습니다. 섹션, 타입, 가져오기, 내보내기, 메모리, name 커스텀 섹션까지 보고, 모듈 전체를 브라우저 자신의 WebAssembly.validate로 한 번 더 확인합니다. 함수 본문은 크기만 재고 역어셈블하지 않습니다. 이 화면이 보여 주는 것은 모듈이 무엇을 선언하고 무엇에 손대는지이지 텍스트 형식으로의 완전한 변환이 아닙니다.

사용 방법

  1. 모듈을 놓습니다

    `.wasm` 파일이면 됩니다. 이 탭에서 읽고, 브라우저의 `WebAssembly.validate`로 한 번 더 확인합니다. 형식이 올바른지에 대한 두 번째 의견을 함께 얻는 셈입니다.

  2. 섹션부터 봅니다

    크기 표가 바이트가 어디로 갔는지 가장 빨리 보여 줍니다. data 섹션이 크면 자산이 박혀 있는 것이고, custom 섹션이 크면 대개 디버그 이름이나 DWARF입니다.

  3. 가져오기를 읽습니다

    가져오기가 곧 이 모듈과 호스트 사이의 계약 전부입니다. 호출할 수 있는 함수와 공유하는 메모리가 전부 거기 있습니다. 직접 빌드하지 않은 모듈을 살펴보는 중이라면 이 목록이 중요합니다.

자주 묻는 질문

실제 코드를 볼 수 있나요?

아니요. 함수 본문은 크기만 재고 역어셈블하지 않습니다. 모듈이 무엇을 선언하고 무엇에 손대는지를 보고할 뿐 텍스트 형식으로 바꾸지는 않습니다. 완전한 역어셈블은 WABT의 `wasm2wat`이 하는 일입니다.

함수 이름이 왜 없나요?

빌드가 name 커스텀 섹션을 떼어 냈기 때문입니다. 릴리스 빌드는 보통 그렇게 합니다. 내보내기는 이름을 유지합니다. 모듈의 인터페이스이기 때문입니다. 그래서 내보낸 함수는 여전히 알아볼 수 있습니다.

가져오기가 있는 모듈은 위험한가요?

그 자체로는 아닙니다. WebAssembly는 호스트가 건네준 것에만 닿을 수 있고, 가져오기가 없는 모듈은 바깥 세계에 아예 손댈 수 없습니다. 가져오기에 적힌 것이 곧 그 모듈이 할 수 있는 일이고, 그래서 인스턴스화 전에 읽어 볼 가치가 있습니다.

파싱은 됐는데 엔진 검증이 실패라고 나옵니다.

보는 것이 다릅니다. 파싱은 구조를 읽고, `WebAssembly.validate`는 함수 본문의 타입까지 검사합니다. 섹션 구조는 멀쩡히 읽히는데도 거절될 수 있습니다. 파일이 잘렸거나, 후처리 단계가 건드리지 말아야 할 바이트를 다시 쓴 경우입니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.