일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안티디버깅
- OSR
- linux thread
- Android
- TLS
- tracing
- LLVM
- pthread
- android inject
- on-stack replacement
- pinpoint
- LLVM 난독화
- linux debugging
- v8 optimizing
- uftrace
- apm
- thread local storage
- tracerpid
- initial-exec
- so inject
- custom packer
- anti debugging
- on stack replacement
- LLVM Obfuscator
- Linux custom packer
- v8 tracing
- Injection
- Linux packer
- Obfuscator
- 난독화
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
다음 코드를 통해 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)
UBFM Syntax UBFM Wd, Wn, #, # ; 32-bit general registers UBFM Xd, Xn, #, # ; 64-bit general registers Usage Unsigned Bitfield Move copies any number of low-order bits from a source register into the same number of adjacent bits at any position in the destination register, with zeros in the upper and lower bits. Important! UBFM is an instruction that copies by specifying a memory range and can be..
Load 의 IR 원형 ex) %0 = load i32, ptr %arrayidx = load [volatile] , ptr [, align ][, !nontemporal !][, !invariant.load !][, !invariant.group !][, !nonnull !][, !dereferenceable !][, !dereferenceable_or_null !][, !align !][, !noundef !] LDR(immediate)3130292827262524232221201918171615141312111098765432101x111000010imm901RnRtsize opc LDRXui (immediate) MIR 예시renameable $x9 = LDRXui renamable $x..
https://github.com/llvm/llvm-project/issues/51483 [AArch64] Generate stp for complex repeating constansts · Issue #51483 · llvm/llvm-project Bugzilla Link 52141 Version trunk OS Windows NT Reporter LLVM Bugzilla Contributor CC @Arnaud-de-Grandmaison-ARM,@DMG862,@smithp35 Extended Description For complex repeating constants like: void fo... github.com 유사한 최적화 제의와 성능 리포트. https://github.com/dotnet..
SmallVector WorkList; WorkList.push_back(RetagReg); while (!WorkList.empty()) { Register UseReg = WorkList.pop_back_val(); for (auto &UseI : MRI->use_instructions(UseReg)) { unsigned Opcode = UseI.getOpcode(); if (Opcode == AArch64::STGi || Opcode == AArch64::ST2Gi || Opcode == AArch64::STZGi || Opcode == AArch64::STZ2Gi || Opcode == AArch64::STGPi || Opcode == AArch64::STGloop || Opcode == AArc..
원문 출처 : https://developer.arm.com/documentation/ddi0602/2023-12/Base-Instructions/STP--Store-Pair-of-Registers-?lang=en#iclass_post_index Documentation – Arm Developer developer.arm.com // FIXME: Use dedicated range-checked addressing mode operand here.defm STPW : StorePairOffset;defm STPX : StorePairOffset; multiclass StorePairOffset opc, bit V, RegisterOperand regtype, ..
* 유관 패치를 작성하게 되면 반영하기 위해 남겨놓는 목적 * * 다른 패치 작성자 분들이 혹시 보게 되면 활용해주세요. * AArch64MIPeepholeOpt.cpp::555 // replaceRegWith changes MIs definition register. Keep it for SSA form until // deleting MI. Only if we made a new destination register. if (DstReg != NewDstReg) { MRI->replaceRegWith(DstReg, NewDstReg); MI.getOperand(0).setReg(DstReg); //
https://die4taoam.tistory.com/122 LLVM 에 패치 보내기 튜토리얼 https://youtu.be/C5Y977rLqpw?si=JXvJ7RsQ-26XSW4i 패치 만들고 LLVM 에 보내기 코드를 수정한 뒤 LLVM 에 기여하는 방식은 code-review 과정을 별도의 플랫폼에서 거친다는 차이가 있습니다. 이에 대한 자세한 과정 die4taoam.tistory.com LLVM에 패치 보내는 튜터리얼은, Nikita Popov 가 작성한 글을 기반으로 작성됐습니다. 현재는 이 글에 포함되어 있는 리뷰과정은 모두 완전 github로 옮겨간 점 등이 달라졌으며, github 환경에 익숙한 사람들에게는 오히려 더 쉽게 LLVM에 기여할 수 있는 기회가 될 수 있을 것 같습니다. 이런저..