일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- v8 optimizing
- tracerpid
- anti debugging
- Injection
- on-stack replacement
- tracing
- apm
- v8 tracing
- linux thread
- linux debugging
- uftrace
- OSR
- pthread
- Obfuscator
- Android
- thread local storage
- on stack replacement
- LLVM Obfuscator
- 안티디버깅
- LLVM 난독화
- LLVM
- Linux packer
- custom packer
- 난독화
- TLS
- android inject
- Linux custom packer
- initial-exec
- pinpoint
- so inject
- Today
- Total
목록LLVM-STUDY/TODO (19)
Why should I know this?
Simplify 테스트 케이스 중에는 다음과 같은 항목이 있습니다. 아무도 관심갖지 않는 TODO 입니다 ㅠ_ㅠ ; TODO: simplify this to %a define i1 @test8(i1 %a) { ; CHECK-LABEL: @test8( ; CHECK-NEXT: [[C:%.*]] = add i1 [[A:%.*]], true ; CHECK-NEXT: [[RES:%.*]] = xor i1 [[C]], true ; CHECK-NEXT: ret i1 [[RES]] ; %c = add i1 %a, true %res = xor i1 %c, true ret i1 %res } ; TODO: simplify this to %a define i1 @test10(i1 %a) { ; CHECK-LABEL: @te..
다음 두 논문 추천 (공교롭게도 제목이 같다.) Satisfiability Modulo Theories Satisfiability Modulo Theories: An Appetizer
#include "llvm/IR/Function.h" #include "llvm/Pass.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" using namespace llvm; namespace { class ControlFlowFlattening : public FunctionPass { public: static char ID; ControlFlowFlattening() : FunctionPass(ID) {} bool runOnFunction(Function &F) override { bool Modified = false; for (auto &BB : F) { if (BB.getTer..
* 이 글은 아직 검증되지 않은 내용을 담고 있습니다 * LLVM에서 IR을 단순화하는 방법 설명하기 LLVM에서 프로그램의 중간 표현(IR)을 단순화하려면 IR 코드를 보다 효율적이고 간소화된 형태로 변환하는 일련의 최적화 패스를 적용해야 합니다. 다음은 LLVM에서 IR을 단순화하는 일반적인 단계입니다: 최적화 수준을 선택합니다: LLVM은 코드를 최적화하는 데 걸리는 시간과 달성한 최적화 정도 간에 균형을 맞추는 여러 최적화 수준을 제공합니다. 예를 들어, -O1 최적화 수준은 비교적 빠른 중간 수준의 최적화를 수행하는 반면, -O3 수준은 훨씬 더 오래 걸릴 수 있는 높은 수준의 최적화를 수행합니다. 최적화 패스를 실행합니다: LLVM은 IR 코드에서 실행할 수 있는 대규모 최적화 패스 모음을 제..
https://github.com/llvm/llvm-project/commit/cbde0d9c7be1991751dc3eb5928294d2e00ef26a [IR] Add a dedicated FNeg IR Instruction · llvm/llvm-project@cbde0d9 The IEEE-754 Standard makes it clear that fneg(x) and fsub(-0.0, x) are two different operations. The former is a bitwise operation, while the latter is an arithmetic operation. This patch creates ... github.com https://github.com/llvm/llvm-pro..
LLVM Optimizing 과정을 공부하면서 효율을 높히고 기록을 남기기 위해서 고민을 좀 해봤습니다. 예로 들려는 최적화는 LoopFlatten 입니다. llvm/lib/Transforms/Scalar/LoopFlatten.cpp 에 구현되어 있습니다. 첫 번째, 최적화 과정에서 활용되는 로직을 모은 실행파일 견본으로 모아보려고 합니다. LoopFlatten에서 큰 비중을 차지하는 static bool findLoopComponents 함수에는 다음과 같은 내용이 있습니다. static bool findLoopComponents( Loop *L, SmallPtrSetImpl &IterationInstructions, PHINode *&InductionPHI, Value *&TripCount, Bina..
Facebook의 Redex 라는 프로젝트 코드를 참조하기 위해 보는 중 난해했던 코드를 만났습니다. void LocalDce::dce(IRCode* code, bool normalize_new_instances, DexType* declaring_type) { cfg::ScopedCFG cfg(code); dce(*cfg, normalize_new_instances, declaring_type); } DCE 옵티마이징 과정 중에 이런 코드가 있던거죠. bliveness |= liveness.at(s->target()->id()); 이게 무슨 코드인가? 했는데 dataflow analysis 에서 live analysis(?) 를 DCE에서 같이하는걸로 보이네요. 이에 대해선 차후 포스팅 할 기회가 있을..
mangling 이 필요해진 이유 define internal i32 @"int ArithmeticOpInt.add_int(int, int)"(i32 %v1, i32 %v2) { bb: %0 = alloca i32, align 4 store i32 %v1, ptr %0, align 4 %1 = load i32, ptr %0, align 4 %2 = alloca i32, align 4 store i32 %v2, ptr %2, align 4 %3 = load i32, ptr %2, align 4 %4 = add i32 %1, %3 ret i32 %4 } 위처럼 테스트용 DEX에 산술연산 테스트용 메소드를 작성해 LLVM IR 로 변경했다. 컴파일은 문제 없이 진행된다. 컴파일 한 뒤 objdump 로 심볼을..
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..