1. 환경 설정 (wsl 기준)

$ git clone https://github.com/emscripten-core/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest
$ source ./emsdk_env.sh
$ emcc --version

2. hello.c 작성

#include <stdio.h>

int main() {
    printf("Hello World\n");
    return 0;
}

3. 컴파일

emcc hello.c -o hello.html

4. 서버 구동

npx http-server ~ -o -p 9999


참고

https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install

https://emscripten.org/docs/tools_reference/emcc.html#emccdoc

https://developer.mozilla.org/ko/docs/WebAssembly/C_to_Wasm


알아낸 것 1. 샌드 박스 내부는 리눅스 스타일로 구성되어 있음. 아래는 직접 돌려본 예시

/tmp
/home
/home/web_user
/dev
/dev/null
/dev/tty
/dev/tty1
/dev/random
/dev/urandom
/dev/shm
/dev/shm/tmp
/dev/stdin
/dev/stdout
/dev/stderr
/proc
/proc/self
/proc/self/fd
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
/proc/self/fd/3
/proc/self/fd/4
/proc/self/fd/5
/proc/self/fd/6

알아낸 것  2. C코드로 디컴파일 가능

LLVM 기반이기 때문에 OLLVM 개발 가능

https://github.com/HakonHarnes/emcc-obf

알아낸 것  3. int main()의 주소는 0x1

이것은 전형적인 메모리 레이아웃은 아님

+ Recent posts