개요
프로그래밍 언어는 크게 2개로 나뉩니다.
- 컴파일 언어
- 인터프리터 언어 JavaScript는 일반적으로 인터프리터언어 이지만, google은 이런 Javascript의 성능을 향상시키는 V8를 만들었습니다.
V8엔진에 대하여
V8 엔진은 JavaScript를 바이트코드로 컴파일하고, 바이트코드를 실행 시점에 기계어로 바꾸어 실행해주는 프로그램입니다. 이를 JIT(Just In Time compilation)이라고 합니다.
NOTE
> 바이트는 고급 언어를 가상 머신이 이해할 수 있도록 번역한 중간 표현(IR)의 일종이다.
V8 환경 설정
V8의 개발환경인 d8을 빌드하여 사용합니다.
#!/bin/bash
# 1. git clone
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 2. 빌드 준비
export PATH=`pwd`/depot_tools:"$PATH"
fetch v8
cd v8
./build/install-build-deps.sh
sudo apt-get install ninja-build
# optional: 특정 버전으로 빌드하고 싶은 경우 commit version을 넣습니다
git checkout 6538a20aa097f9c05ead98eb88c71819aa1e65aa
gclient sync
# optional: ctf등에서 patch파일이 주어지는 경우, 해당 파일로 patch해줍니다
# git apply <patchfile>
# 3.a. v8gen.py를 이용한 빌드
./tools/dev/v8gen.py x64.release
ninja -C ./out.gn/x64.release
./tools/dev/v8gen.py x64.debug
ninja -C ./out.gn/x64.debug
# 3.b. gm.py를 이용한 빌드
tools/dev/gm.py x64.release
tools/dev/gm.py x64.debug스크립트를 실행한 후 ~/v8/out.gn/으로 이동하면, x64.release폴더와 x64.debug폴더를 확인할 수 있습니다.
gem.py로 빌드를 하면 ~/v8/out의 x64.release와 x64.debug에 생성됩니다.
user@hostname:~/v8$ cd out.gn/
user@hostname:~/v8/out.gn$ ls
x64.debug x64.released8을 실행하면 JavaScript를 실행할 수 있는 창이 나온다.
user@hostname:~/v8/out.gn/x64.release$ ./d8
V8 version 11.2.214.14
d8> a = 1
1
d8> console.log(1);
1
undefined
d8>