일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pinpoint
- anti debugging
- LLVM 난독화
- Linux packer
- linux thread
- v8 tracing
- on-stack replacement
- Injection
- OSR
- pthread
- linux debugging
- 난독화
- on stack replacement
- Linux custom packer
- so inject
- TLS
- uftrace
- Obfuscator
- LLVM
- 안티디버깅
- tracerpid
- Android
- tracing
- android inject
- custom packer
- v8 optimizing
- apm
- thread local storage
- LLVM Obfuscator
- initial-exec
- Today
- Total
목록LLVM-STUDY (65)
Why should I know this?
#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..
* 이 글은 아직 검증되지 않은 내용을 답고 있습니다. * instcombine 은 -instcombine 옵션으로 실행되는 최적화 pass 입니다. https://llvm.org/docs/Passes.html#instcombine-combine-redundant-instructions LLVM’s Analysis and Transform Passes — LLVM 17.0.0git documentation This section describes the LLVM Analysis Passes. This pass, only available in opt, prints the control flow graph into a .dot graph. This graph can then be processed with..
https://github.com/ParkHanbum/mystudy/tree/master/llvm-study GitHub - ParkHanbum/mystudy Contribute to ParkHanbum/mystudy development by creating an account on GitHub. github.com 이 글의 실행결과는 위 리포지터리를 통해 직접 확인해보실 수 있습니다. LoopInstSimplify 는 -loop-simplify 옵션으로 실행되는 최적화 pass 입니다. https://llvm.org/docs/Passes.html#loop-simplify-canonicalize-natural-loops LLVM’s Analysis and Transform Passes — LLVM 17..
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..
Loop에서 Latch란 다음과 같이 정의되어 있다. https://llvm.org/docs/LoopTerminology.html LLVM Loop Terminology (and Canonical Forms) — LLVM 17.0.0git documentation The Loop Simplify Form is a canonical form that makes several analyses and transformations simpler and more effective. It is ensured by the LoopSimplify (-loop-simplify) pass and is automatically added by the pass managers when scheduling a LoopPass...
LoopFlatten은 Loop 문을 평탄화 하는 최적화인데, 말로는 느낌이 잘 안오니 다음 주석을 참고하자. LoopFlatten.cpp // for (int i = 0; i
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 로 심볼을..