일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- initial-exec
- thread local storage
- so inject
- 난독화
- Linux custom packer
- LLVM
- pthread
- apm
- 안티디버깅
- on-stack replacement
- tracerpid
- v8 tracing
- Android
- Injection
- OSR
- LLVM 난독화
- on stack replacement
- custom packer
- Obfuscator
- linux thread
- anti debugging
- LLVM Obfuscator
- uftrace
- android inject
- TLS
- pinpoint
- Linux packer
- tracing
- v8 optimizing
- linux debugging
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
LLVM은 GCC와 함께 컴파일러의 양대 산맥을 이루는 오픈소스 컴파일러 프로젝트이며, 컴파일러를 넘어 자신들을 '컴파일러 툴킷'으로 소개한다. 요컨데 컴파일러를 제작하기 위해 필요한 여러가지 공구들을 모아놓은 공구함이라고 할 수 있겠다. LLVM은 Front/Middle/Back 의 3단 분리를 명확하게 하고, 분리된 단 간 그리고 각 단 속에서의 PLUGIN 을 지원하기 위해 추상화 된 데이터 표현 계층인 Intermdediate Reperesntation (=IR)을 사용한다. 이런 구조를 통해 LLVM은 LLVM 참여자 뿐 아니라 컴파일러를 활용하거나 독자 모듈을 구현하는 사람들에게 광풍과도 같은 인기를 얻었으며 거의 모든 컴파일러 논문 및 연구가 LLVM을 기반으로 이뤄지게 되는 원동력을 제공할..
/system/bin/dex2oat --zip-fd=6 --zip-location=/system/app/Email.apk --oat-fd=7 --oat-location=/data/dalvik-cache/system@app@Email.apk@classes.dex --profile-file=/data/dalvik-cache/profiles/com.android.email /system/bin/dex2oat --image=/data/dalvik-cache/system@framework@boot.art --runtime-arg-Xms64m --runtime-arg -Xmx64m --dex-file=/system/framework/core-libart.jar --dex-file=/system/framework/c..
ARMv7 아키텍처에서 동적생성된 코드를 실행하거나 복호화 후 실행 시에 알 수 없는 이유로 SIGSEGV 나 SIGILL이 발생하는 경우가 있습니다. 빈도 또한 일정치 않고, 디버깅조차 어려우므로 이곳에 해결책을 기재해 공유하고자 합니다. 해결책은 Android의 다음 commit 을 참조하시면 됩니다. git clone https://android.googlesource.com/platform/art git show aeba572be73559c310de758dbcdac901e064ec07 platform/art - Git at Google android.googlesource.com 위의 코드에 대한 설명은 다음과 같습니다. 가상메모리가 물리메모리와 매핑되어 있지 않을때 Cacheflush는 실패합니..
ARM 에서는 Self-Modifying code를 사용할 경우를 위한 Guide를 제시하고 있다. ARM Cortex-M Programming Guide to Memory Barrier Instructions 위 링크에서 다루는 내용은 ARM cortext M0 이후 세대 M3 ARMv7 이후 제품군에서 필요할 수도 있는 Memory Barrier 명령군에 대해서 다루고 있다. 상업적으로 말하면, ARMv7 이후 제품들이 실질적으로 안드로이드 스마트폰에서 사용되었으므로, 거의 대부분의 Self-Modifying code를 Android에서 구현하고자 하는 개발자들이 알아두면 좋을 내용이다. ARMv7 이후 제품군에서는 Super-Scalar (슈퍼스칼라 or 슈퍼스케일러) 아키텍처를 채택하여 Memor..
C에 존재하는 함수 strcmp, strncmp는 String Compare 기능을 제공한다. 이 함수들은 1) 두 문자열의 동일 여부를 확인할 수 있게 2) 두 문자열을 하나씩 비교해 다른 문자가 있을 경우 그 차를 반환 한다. 그러므로 프로그래머는 오직 이 함수들을 통해 두 문자가 다른지 여부만 확인할 수 있다. 이를 조금 손봐서, 1) 두 문자열 간의 다른 문자가 존재하는 최초 위치를 제공하며 2) 동시에 탐색시간을 조금 단축시켜보는 트윅을 해보려고 한다. int glibc_strncmp (const char *s1, const char *s2, size_t n) { uintptr_t s1_ori = (uintptr_t)s1; unsigned char c1 = '\0'; unsigned char c..
'대강 이렇지 않을까?' 하는 온갖 추정이 포함된 졸라 간단한 분석 - 졸간분 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에서..
Git/복구 : GyparkWiki [edit]1. 커밋까지 한 상태에서 git-reset --hard 옵션으로 덮어써 버린 경우 커밋 개체들이 아직 .git 디렉토리 아래에 남아 있기 때문에 복구가 그다지 어렵지 않다 (시간이 흐르면 - 며칠? 한달? 정확히 모르겠으나 아주 짧진 않다 - 가비지 컬렉션에 의해 없어지니 주의) git-reflog 로 HEAD가 가리켰었던 커밋 객체들의 목록을 볼 수도 있고 다음 섹션에 언급할 git-fsck 를 써서 찾을 수도 있고 등등. 어떻게든 해당 커 gypark.pe.kr 1. 커밋까지 한 상태에서 git-reset --hard 옵션으로 덮어써 버린 경우 커밋 개체들이 아직 .git 디렉토리 아래에 남아 있기 때문에 복구가 그다지 어렵지 않다 (시간이 흐르면 - ..
오픈소스 uftrace(https://github.com/namhyung/uftrace)의 개발에 참여하면서, Tracing 도구를 개발하고 동시에 이용하는 입장으로서 Tracing에 대한 고찰을 정리해보고자 한다. 지난 주에 Naver에서 주최한 Pinpoint 세미나에 참석했었다. Pinpoint는 Naver에서 개발하여 공개한 오픈소스이며, APM (Application Performance Management) 도구이다. 위 그림처럼 Pinpoint는 수려한 UI를 갖추고 있다. 고품질의 UI에 걸맞게 Pinpoint는 github에서도 인기가 좋다. (https://github.com/naver/pinpoint) 8,900의 스타로 9천개 스타에 진입하고 있다. 국내 IT 대기업들은 자체적으로 ..
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..