일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 난독화
- Injection
- Android
- apm
- on-stack replacement
- Obfuscator
- pinpoint
- pthread
- TLS
- tracerpid
- v8 tracing
- LLVM
- 안티디버깅
- initial-exec
- LLVM 난독화
- tracing
- linux debugging
- thread local storage
- uftrace
- on stack replacement
- anti debugging
- LLVM Obfuscator
- v8 optimizing
- custom packer
- Linux custom packer
- android inject
- linux thread
- so inject
- Linux packer
- OSR
- Today
- Total
목록전체 글 (132)
Why should I know this?
https://youtu.be/bNV18Wy-J0U?si=n-hxGVmCqGD5LqYv You make some transformation It was very hard to update dominator tree because First you had to figure out what you information actually did And how it affected the dominator like you had to update or manipulate Nodes and glue them together to some other nodes to make a transformation Also on the dominator tree This turns out to be very difficult ..
https://die4taoam.tistory.com/101 LLVM 공부/기록/공유 고민 LLVM Optimizing 과정을 공부하면서 효율을 높히고 기록을 남기기 위해서 고민을 좀 해봤습니다. 예로 들려는 최적화는 LoopFlatten 입니다. llvm/lib/Transforms/Scalar/LoopFlatten.cpp 에 구현되어 있습니다. 첫 die4taoam.tistory.com 위처럼 세웠던 계획의 개선안. TEST(LoopInfoTest, HowToFindTripCount) { const char *ModuleStr = "target datalayout = \"e-m:o-i64:64-f80:128-n8:16:32:64-S128\"\n" "define void @foo(i32 %n, i1 %c..
https://medium.com/@mshockwave/writing-llvm-pass-in-2018-part-i-531c700e85eb Writing LLVM Pass in 2018 — Part I New Pass & Pass Manager in a Peek medium.com LLVM에서 PASS를 작성하는 방식에 변화가 있었습니다. 자세한 내용은 위 링크를 참고하시면 됩니다. extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK llvmGetPassPluginInfo() { return { LLVM_PLUGIN_API_VERSION, "LoopOptTutorial", "v0.1", [](PassBuilder &PB) { PB.registerPi..
https://llvm.org/devmtg/2018-10/slides/Kruse-LoopTransforms.pdf https://www.youtube.com/watch?v=3pRhvQi7Z10&ab_channel=LLVM https://github.com/kitbarton/llvm-project/pull/1 LoopOptTutorial: Basic loop optimization template [STEP1] by etiotto · Pull Request #1 · kitbarton/llvm-project This is the first part of the Loop Optimization tutorial. The tutorial is divided into 5 parts/steps. In this fir..
1. Cadidate // breadth-first search void souper::findCands(Inst *Root, std::set &Guesses, bool WidthMustMatch, bool FilterVars,int Max) { std::set Visited; std::queue Q; Q.push(Root); while (!Q.empty()) { Inst *I = Q.front(); Q.pop(); if (Visited.insert(I).second) { for (auto Op : I->Ops) Q.push(Op); if (I->Available && I->K != Inst::Const && I->K != Inst::UntypedConst) { if (WidthMustMatch && I..
1. 배경지식 OPT PASS 몇 개의 코드를 보면서, OPT PASS라는 것은 '최적화 할 수 있는 CASE를 만들고, 해당 CASE에서 코드를 단축시키는 등의 최적화를 하는 것.' 이라는 정리를 했는데 설명하자면 다음과 같다. IR chunk는 각 opt pass 를 순회하며 최적화 케이스에 적합하면 변형되어 최적화 된 IR을 결과로 만들게 된다. [IR chunk] -> A case -> B case -> C case -> [Optimized IR chunk] 각 case 별로 조건을 검사하고 조건을 만족할때 IR을 변형하는 식으로 진행된다는 뜻 2. 적합한 케이스 탐색 grep 으로 TODO 목록을 검색해 그 중 만만해 보이는 경우를 찾아본다. (저의 경우 공부했던 경험과 또 만만해보이는 이유로 ..