일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tracerpid
- pinpoint
- TLS
- on-stack replacement
- uftrace
- initial-exec
- tracing
- apm
- 난독화
- custom packer
- Linux custom packer
- LLVM Obfuscator
- Linux packer
- OSR
- 안티디버깅
- anti debugging
- Injection
- Android
- on stack replacement
- thread local storage
- LLVM
- v8 tracing
- linux thread
- linux debugging
- Obfuscator
- v8 optimizing
- LLVM 난독화
- pthread
- android inject
- so inject
- Today
- Total
목록LLVM-STUDY (65)
Why should I know this?
Dex2IR 을 개발한지 좀 됐기 때문에 슬슬 구조적으로 생각해야 할 문제들이 보이기 시작해서 기억의 번복을 줄이기 위해 앞으로는 일지를 작성하려고 합니다. 이 글에서 고민하고 싶은건 Class.변환입니다. 바로 들어가죠. 이 고민의 발단이 된 instruction은 iget 입니다. iget-object p3, p0, Lkotlinx/coroutines/android/a;->_immediate:Lkotlinx/coroutines/android/a; iget instruction 을 적절히 처리하려면 이제는 class 구조의 도입이 불가피합니다. iget instruction은 Instance 로부터 field의 값을 읽는 명령어기 때문이죠. Class는 IR에서 어떻게 다뤄지는 확인해봅시다. #incl..
OPT 의 PASS를 개발하는 경우 OPT가 불러들이기 때문에 LLVM LIBS를 링킹하지 않아도 된다. 하지만 LLVM을 기반으로 새 TOOL을 작성하고자 하면 다음처럼 LLVM LIBS를 링킹해줘야 한다. LDFLAGS_LLVM := $(shell llvm-config --system-libs --ldflags --libs) LDFLAGS := -g -lstdc++ -lz -lpthread -ldl $(LDFLAGS_LLVM) 이걸 몰라서 얼마나 고생했는지 ㅠ
LLVM IR 중에 PHI 라는 것이 종종 보인다. PREDS와 PHI 는 처음 LLVM 을 접하게 된다면 생소한 개념이라 약간 헤깔린다. phi 관련 내용은 wiki 에 자세히 나와있으니 참고하시고 (https://en.wikipedia.org/wiki/Static_single-assignment_form) 몇 가지 핵심만 요약정리 해보자. 1. 일단 이름부터 왜 phi 인가하면 기호가 진짜 phi 이다 = called a Φ (Phi) function 2. phi 의 정의 preds가 명목상 모든 연관 노드라고 하면, phi 는 특별하게 연관된 노드이다. 구체적으로 이전 노드에 의존적인 관계에 있는 노드이다. %retval = phi i32 [%a, %btrue], [%b, %bfalse] 위의 ph..
# UFTRACE option-DCMAKE_BUILD_TYPE=debug-DCMAKE_CXX_FLAGS="-pg -g" cmake -G Ninja ../work/llvm-project/llvm -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="host;" -DLLVM_USE_LINKER=gold -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_RUNTIME=libcxx -DLLVM_ENABLE_RUNTIMES=libcxxabi // 타겟 프로젝트 clang 하나만 지정-DLLVM_ENABLE_PROJECTS="clang" // 타겟 빌드 host 하나만 지정-DLLVM_TARGETS_TO_BUILD="host;" 다음고 같은 옵션은 ..
0. Control-flow integrity 란 무엇인가? 아래 글은 redhat blog에서 퍼온 글입니다. "CFI, or Control-flow integrity, may refer to any mechanism which tries to ensure the execution flow is valid when calling or returning from functions during the software’s runtime. Some of the hardenings mentioned earlier in the introduction can be considered CFI protection. Most of them are implemented by both GCC and Clang, howeve..