일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- on stack replacement
- linux thread
- Android
- LLVM
- anti debugging
- TLS
- so inject
- v8 tracing
- Obfuscator
- LLVM Obfuscator
- apm
- initial-exec
- OSR
- uftrace
- Linux packer
- Linux custom packer
- LLVM 난독화
- linux debugging
- on-stack replacement
- thread local storage
- 난독화
- Injection
- android inject
- tracerpid
- v8 optimizing
- pthread
- pinpoint
- custom packer
- tracing
- 안티디버깅
- Today
- Total
목록LLVM-STUDY (67)
Why should I know this?
Dominate 뜻 (컴퓨터 과학 및 그래프 이론 맥락에서)컴퓨터 과학에서, 특히 DominateTree(지배 트리, Dominator Tree)와 관련된 맥락에서 "Dominate"는 **제어 흐름 그래프(CFG, Control Flow Graph)**에서 특정 노드가 다른 노드로 가는 경로를 제어하는 관계를 의미합니다. 구체적으로, 노드 A가 노드 B를 Dominate(지배)한다는 것은 **시작 노드(Entry)**에서 B로 가는 모든 경로가 반드시 A를 거쳐야 함을 뜻합니다.정의:노드 A가 노드 B를 Dominate한다 (A dom B) = 시작점에서 B로 가는 모든 경로가 A를 포함한다.추가로, A가 B를 Strictly Dominate한다면, A ≠ B이어야 합니다.즉, A는 B로 가는 필수적인..

define 8 x i16> @src(4 x i16> %x, 4 x i16> %y, 4 x i16> %z) { %cmp.xy = icmp slt 4 x i16> %x, %y %cmp.yz = icmp slt 4 x i16> %y, %z %select.xz = select 4 x i1> %cmp.xy, 4 x i16> %x, 4 x i16> %z %select.yx = select 4 x i1> %cmp.yz, 4 x i16> %y, 4 x i16> %x %res = shufflevector 4 x i16> %select.xz, 4 x i16> %select.yx, 8 x i32> i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> ret 8 x i16> ..
https://github.com/llvm/llvm-project/commit/06408451bf12d4baed1fb1312d8af6e6bbb6a797 Revert "[SCCP] Use SimplifyBinOp for non-integer constant/expressions… · llvm/llvm-project@0640845… & overdef." This reverts commit 1a02aaeaa4f8675490da38ee8cb0d4a6d39815dd. Crashes on the following test case: $ cat crash.ll source_filename = "__compute_module" target datal...github.com https://github.com/llvm/l..
https://archive.fosdem.org/2019/schedule/event/llvm_tablegen/attachments/slides/3304/export/events/attachments/llvm_tablegen/slides/3304/tablegen.pdf
Store IR 원형store [volatile] , ptr [, align ][, !nontemporal !][, !invariant.group !]; yields voidstore atomic [volatile] , ptr [syncscope("")] , align [, !invariant.group !] ; yields void! = !{ i32 1 }! = !{}STRroX, STRroWSTR(register) 3130292827262524232221201918171615141312111098765432101x111000001RmoptionS10RnRtsize opc STRroX, STRroW 예시str x0, [x9, x8, lsl #3]storeopTy regtype:$..

https://github.com/llvm/llvm-project/pull/91762 (기억을 보존하기 위한) 패치 내용 정리.패치 동기LLVM에서는 AND/OR/XOR 연산을 BitwiseLogic 이라고 부른다. 해당 로직들은 특정 상황에서 최적화 될 수 있다.다음의 경우를 보자.define i32 @src_no_trans_select_or_eq0_and_or(i32 %x, i32 %y) {; CHECK-LABEL: @src_no_trans_select_or_eq0_and_or(; CHECK-NEXT: [[OR:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]; CHECK-NEXT: ret i32 [[OR]]; %or = or i32 %x, %y %or0 = icmp eq..

https://die4taoam.tistory.com/147 computeKnownBits & KnownBits 관련 예제computeKnownBits https://llvm.org/doxygen/ValueTracking_8cpp.html#a903bd19e9d31beff55b22fe86111639e Determine which bits of V are known to be either zero or one and return them. void computeKnownBits (const Value *V, KnownBits &Known, const DataLayout &DL,die4taoam.tistory.com computeKnownBitsㄴ computeKnownBitsFromContext ㄴ ..
다음 코드를 통해 computeKnownBitsFromCmp 에서 KnownBit를 추산하는 방식을 알아보자. unsigned BitWidth = Known.getBitWidth(); auto m_V = m_CombineOr(m_Specific(V), m_PtrToIntSameSize(Q.DL, m_Specific(V))); Value *Y; const APInt *Mask, *C; uint64_t ShAmt; switch (Pred) { case ICmpInst::ICMP_EQ: // assume(V = C) if (match(LHS, m_V) && match(RHS, m_APInt(C))) { Known = Known.unionWith(KnownBits::ma..
computeKnownBitsFromCondㄴ computeKnownBitsFromICmpCond void llvm::computeKnownBitsFromICmpCond(const Value *V, ICmpInst *Cmp, KnownBits &Known, const SimplifyQuery &SQ, bool Invert) { ICmpInst::Predicate Pred = Invert ? Cmp->getInversePredicate() : Cmp->getPredicate(); Value *LHS = Cmp->getOperand(0); Value *..
(TBD)