v8!, 넌 도대체 뭐니?(작성중)

SeungYong Lee
Written by SeungYong Lee on
v8!, 넌 도대체 뭐니?(작성중)

여러분, 안녕하세요!

글을 시작하며, 최근에 구글의 ASAN(Address Sanitizer)에 대한 흥미로운 글을 접하게 된 계기로 브라우저 취약점을 찾는 그날을 고대하며 지금까지 V8엔진을 공부 했던 내용을 정리하고 V8의 1-day 분석 과정을 알차게 풀어볼까 합니다.

연구에 들어가며 선행으로 V8을 인터넷에 검색을 해보았고, “8기통”에 대한 설명이 문구가 있었습니다. 저는 크롬의 JavaScript 엔진인 v8과 관련이 있을거라 생각하고 8기통에 대해 알아보았습니다.

보통 8기통 엔진이라면 V형 엔진을 의미합니다. 8기통은 v형으로 정렬하여 결합된 엔진으로 실린더가 8개가 달린 엔진을 의미하며 피스톤이 왕복 운동을 하며 힘을 만들어냅니다. 8기통은 4000cc이상의 배기량 퍼포먼스를 발휘하며 일명 “기름 먹는 하마”라는 별칭을 가지고 있습니다. 고성능이기 때문에 주로 머슬카(고급차와 스포츠카등)같은 강력한 힘을 요구하는 차량에서 사용됩니다.

“8기통은 미국이 태생이다” 말이 있지만 자원이 풍부한 미국은 8기통을 세계 최초로 양산을 시작한 나라일 뿐, 사실 1901년 프랑스의 한 공학자 Léon Levavasseur가 항공기에 사용할 엔진을 설계하면서 직렬 4기통의 기통 수를 6개로 늘리려고 시도하며 시행착오를 겪었습니다. 하지만 크랭크 축이 길어져 엔진이 원활하게 작동 하지 않자 깊은 고민에 빠져 고뇌하였습니다. 그러나 그는 “차라리 2개의 직렬 4기통을 결합해보자”라는 생각을 기점으로 끝내 방법을 고안해내어 합쳐보는 시도를 하였고 이후 원활하게 동작하는 것을 확인하며 세상에 8기통이 탄생했습니다.

“엔진” 8기통에 대한 이야기는 각설하며, 2006년 가을 “Lars Bak”이 구글과의 인연을 시작함으로써 그와 프로젝트의 기존 엔지니어 몇 명에서 한 농장 별채에서 개발한 자바스크립트 엔진의 이름을 위에 설명했던 강력한 힘을 자랑하는 8기통 엔진을 참조하여 명명했습니다.

V8은 개발 당시 구글의 비밀 내부 프로젝트로써 비공개 CVS(Concurrent Versions System) 저장소에서 개발되었으나, 크롬이 출시된 2008년 9월 2일 이후 오픈소스로 전환되었습니다. 자바스크립트의 명령어 수행 속도의 개선을 목적으로 고안되어 C++ 기반으로 만들어졌으며 JIT(Just In Time) 컴파일러를 채택했기 때문에 속도를 보장하지만, C/C++계열 특성상 개발자가 메모리를 수동으로 관리해줘야 하기 때문에 해커들은 이러한 개발자의 실수의 틈을 찾아내어 메모리 커럽션 취약점을 발생시키기도 합니다.(C/C++의 이러한 문제점으로 최근 미국 백악관에서는 메모리 안정성을 보장하는 프로그래밍 언어(Rust, etc…) 사용을 권고 했습니다.)

JIT 컴파일러인 V8은 Run-Time에 JavaScript 소스코드를 파싱하여 Ignition Interpreter으로 바이트 코드로 변환한다음, Turbofan Compiler으로 컴퓨터 프로세서로 직접 보낼 수 있는 기계어로 변환시키는 다단계를 거쳐 명령어를 수행합니다. 게다가 기계어로 변환한 명령어를 캐싱까지 하기 때문에 동일한 명령어가 여러번 호출 될 때 매번 중복된 작업 수행을 거치지 않고 속도를 향상 시켜 목적이었던 수행 속도 개선에 충족시켰습니다.

그렇다면 JIT 컴파일러는 사실 인터프리터의 단점이었던 동일한 동작을 수행하는 명령어가 호출 되면 캐싱을 하지 않기 때문에 무조건 재컴파일 하는 과정으로 인한 속도 저하를 보완이 JIT 컴파일러의 역활이라고 볼수도 있겠습니다.

다음은 JIT 컴파일의 작동 방식을 다이어그램 만든 이미지입니다.

(작성 중,,,)

[ Reference ]

  • https://blog.bitsrc.io/secret-behind-javascript-performance-v8-hidden-classes-ba4d0ebfb89d
  • https://ko.wikipedia.org/wiki/V8_%EC%97%94%EC%A7%84
  • https://oldmachinepress.com/2016/05/28/antoinette-levavasseur-aircraft-engines/
  • https://rnfltpgus.github.io/knowledge/v8-engine/
SeungYong Lee

SeungYong Lee

I'm Seungyong Lee, and I joined the AppSuit team at Stealien, a security company in South Korea, on September 27, 2022. I'm delighted to be part of this team of talented individuals.

This blog is a space where I share my experiences and explore fascinating technologies I've encountered along the way. Join me as we navigate the world of cybersecurity and innovation together.

Comments

comments powered by Disqus