일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- thread local storage
- on stack replacement
- 난독화
- Linux custom packer
- linux debugging
- initial-exec
- v8 tracing
- Android
- pthread
- tracing
- uftrace
- on-stack replacement
- so inject
- tracerpid
- android inject
- OSR
- pinpoint
- linux thread
- custom packer
- LLVM
- anti debugging
- apm
- LLVM Obfuscator
- TLS
- LLVM 난독화
- Obfuscator
- Linux packer
- v8 optimizing
- 안티디버깅
- Injection
- Today
- Total
목록LLVM-STUDY/TODO (20)
Why should I know this?
LLVM 에서 제공하는 비트 연산은 다음같은 연산을 추정하는데 한계가 있다. x == ~x x는 ~x와 같을 수 없다. false가 되야 한다. 이를 비트로 바꿔말하면, x에 가용한 비트 조합과 ~x의 가용한 비트 조합 간에 일치되는 조합이 없다고 할 수 있다. PossiblyBit Pb = PossiblyBit(X).matchPossiblyBit(PossiblyBit(~X)); ; Pb == nullptr 이에 연장으로 x s< ~x 는 어떨까? 이 연산은 x 의 Signbit 가 세팅되어 있는지 여부인지가 중요하다. 만약 x에 SignBit가 세팅되어 있다면, x s< ~x 는 true 이고, SignBit가 세팅되지 않았다면, x s< ~x 는 false 이다 signbit를 검사하는 것으로 단순화..
1. 정의 2. 주요 기능 3. 활용 예제 1. ConstantRange 는 ConstantRange.h 에 선언되어 있다. /// This class represents a range of values. 생성자 셋 ConstantRange::ConstantRange(uint32_t BitWidth, bool Full) : Lower(Full ? APInt::getMaxValue(BitWidth) : APInt::getMinValue(BitWidth)), Upper(Lower) {} ConstantRange::ConstantRange(APInt V) : Lower(std::move(V)), Upper(Lower + 1) {} ConstantRange::ConstantRange(APInt L, APInt ..
(gdb) bt #0 0x00005555562eebc6 in llvm::BatchAAResults::getModRefInfo (this=0x7fffffffb980, I=0x55555ceb46a0, OptLoc=std::optional [no contained value]) at /home/m/llvm-project/llvm/include/llvm/Analysis/AliasAnalysis.h:641 #1 0x000055555657a3de in llvm::MemorySSA::createNewAccess (this=0x55555ce56230, I=0x55555ceb46a0, AAP=0x7fffffffb980, Template=0x0) at /home/m/llvm-project/llvm/lib/Analysis/..
https://llvm.org/devmtg/2016-11/Slides/Finkel-IntrinsicsMetadataAttributes.pdf
https://llvm.org/docs/MemorySSA.html MemorySSA — LLVM 18.0.0git documentation MemorySSA is an analysis that can be built for any arbitrary function. When it’s built, it does a pass over the function’s IR in order to build up its mapping of MemoryAccesses. You can then query MemorySSA for things like the dominance relation betwee llvm.org
[LLVM] * llvm backend optimization 패치 분석 [LLVM CFI] * alive2 에 forward-cfi 관련 intrinsic 지원 추가하기 * llvm backward-cfi 관련 분석 [LLVM 난독화] * llvm IR 난독화 시 alive2 연동하여 난독화와 함께 코드 동등성 검사하는 기능 예제 작성
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..
Juneyoung_Lee_PhD.pdf (utl.pt) 위는 링크 왜인지 링크가 죽어있어서 다운받아놓은 파일도 첨부합니다. 매우 찾던 내용. 단지, 굳이 SMT?? 에 대한 구체적인 내용이 서술되지 않은 점이 아쉽다.
1. Undef – Explicit value in the IR – Acts like a free-floaLng hardware register • Takes all possible bit pakerns at the specified width • Can take a different value every Lme it is used – Comes from uniniLalized variables – Further reading • We want this opLmizaLon: %add = add nsw i32 %a, %b %cmp = icmp sgt i32 %add, %a => %cmp = icmp sgt i32 %b, 0 • But undef doesn’t let us do it: %add = add n..