일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- LLVM
- thread local storage
- Linux packer
- tracing
- v8 optimizing
- LLVM 난독화
- linux debugging
- tracerpid
- anti debugging
- initial-exec
- pthread
- linux thread
- on-stack replacement
- 난독화
- Obfuscator
- v8 tracing
- so inject
- OSR
- Injection
- 안티디버깅
- Android
- android inject
- apm
- custom packer
- TLS
- Linux custom packer
- pinpoint
- on stack replacement
- LLVM Obfuscator
- uftrace
- Today
- Total
목록v8 (6)
Why should I know this?
'대강 이렇지 않을까?' 하는 온갖 추정이 포함된 졸라 간단한 분석 - 졸간분 0. OnStackReplacement란? Stack에 Replacement하는 최적화 방식. 양놈들의 명명센스는 알다가도 모르겠다. 대충 3단어를 넘지 않는 선에서 축약어를 만드는데, 어쩔때는 이름만으로 그 의미가 파악되는데 어쩔때는 도통 뭔 소린지 이해가 안될때까 있다. 이 단어가 바로 그런 경우로, 대충 어떻게 느껴지냐면 일상 대화를 "오늘 날씨는 23.5도야 이런 날씨에는 영장류 세포가 활성화되기 좋은 온도지." 라고 대화할거 같은 공돌이 둘이서 소통할 때 쓰는 단어같다. 서론이 길어서 죄송합니다만, 내용이 별거 없어서 헛소리 좀 해봤습니다. 1. OnStackReplacement 어디서 사용되나? OnStackRepl..
최근에 Javascript의 function calling record 기능을 만들고 이를 Naver Pinpoint 와 연동하여 간단한 NodeJS용 APM을 만들었던 내용을 DEVIEW에서 발표했습니다. 이 기능을 통해 NodeJS에서 Compile되는 함수들을 출력해서 볼 수 있는데, 이를 통해 최근에 페북에서 본 'The V8 Engine and JavaScript Optimization Tips' 의 내용을 공부해보려고 합니다. 먼저, 'The V8 Engine and JavaScript Optimization Tips' 글의 내용을 통해 공부하려고 하는 내용을 정의해보려고 합니다. NodeJS는 Javascript Engine으로 v8을 사용합니다. v8은 NodeJS 보다 Chromium에서..
0. v8 소개 및 v8 Javascript Engine Interpreting 분석을 위한 준비물 1. 당신의 Javascript, Bytecode로 대체되었다. 2. Interpreting은 function 단위로 3. Interpreting의 과정 한 눈에 보기 Interpreting은 생성된 Script class의 Run을 호출하는 것으로 시작된다. Interpreting이 이뤄지는 과정을 일목요연하게 보기 위해, 최소한의 Javascript code "1 + 1"을 실행시킨다. Uftrace를 사용하여 Tracing 데이터를 생성한다. 이를 통해 다음과 같은 결과를 얻을 수 있따. $ uftrace record --no-libcall -F v8::Script::Run -P. out.gn/x64..
BUILD BUILD 가능한 옵션 보기 tools/dev/v8gen.py list x64.debug 옵션 만들기 (args.gn 등 생성) tools/dev/v8gen.py x64.debug Build 시작 ninja -C out.gn/x64.debug TEST tools/run-tests.py --outdir out.gn/x64.debug
v8 version$ git describe --tags 3.29.86-35352-g2e3f3950ef TOTAL TIME : FUNCTION :=== Function Call Graph for 'v8::internal::Runtime_TraceEnter' === :========== Back-trace ========== 497.005 us : ├─(2) v8::internal::Runtime_TraceEnter 497.005 us : │▶(2) v8::internal::_GLOBAL__N_1::Invoke : │ 421.405 us : ├─(2) v8::internal::Runtime_TraceEnter 421.405 us : │▶(2) v8::internal::_GLOBAL__N_1::Invoke ..
======== gdb 지원 메소드 컴파일 ===========v8에는 GDB에서의 디버깅을 지원하기 위한 메소드들이 있다. 이를 사용하고자 한다면, 컴파일 할 때 옵션을 설정해야 한다.nodejs 를 예로 들면, node$ ./configure --help...--gdb add gdb support...node$ ./configure --gdb node$ make -j 6이렇게 컴파일 하면 gdb 지원 메소드들을 사용할 수 있다. 관련 내용은 deps/v8/tools/gdbinit 에 있다. ========== v8 Tracing ========== TOTAL TIME : FUNCTION 2.522 s : (1) node 2.522 s : (4) v8::Fu..