일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안티디버깅
- LLVM 난독화
- uftrace
- TLS
- Linux packer
- android inject
- pthread
- Android
- so inject
- 난독화
- tracerpid
- LLVM Obfuscator
- linux thread
- initial-exec
- Linux custom packer
- on-stack replacement
- apm
- Obfuscator
- tracing
- on stack replacement
- OSR
- v8 tracing
- Injection
- thread local storage
- v8 optimizing
- pinpoint
- custom packer
- anti debugging
- linux debugging
- LLVM
- Today
- Total
목록LLVM-STUDY (65)
Why should I know this?
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 목록을 검색해 그 중 만만해 보이는 경우를 찾아본다. (저의 경우 공부했던 경험과 또 만만해보이는 이유로 ..
https://youtu.be/C5Y977rLqpw?si=JXvJ7RsQ-26XSW4i 패치 만들고 LLVM 에 보내기 코드를 수정한 뒤 LLVM 에 기여하는 방식은 code-review 과정을 별도의 플랫폼에서 거친다는 차이가 있습니다. 이에 대한 자세한 과정은 다음 글을 참고하시면 됩니다. https://developers.redhat.com/articles/2022/12/20/how-contribute-llvm#implementing_the_transform How to contribute to LLVM | Red Hat Developer Interested in contributing to the open source LLVM project? This article walks you through..
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..
@a = external global i32 define i1 @src(ptr %ptr) { entry: %first1 = getelementptr inbounds i8, ptr %ptr, i32 -2 %last1 = getelementptr inbounds i8, ptr %ptr, i32 48 %last2 = getelementptr inbounds i8, ptr %last1, i32 -6 %cmp = icmp slt ptr %first1, %last2 ret i1 %cmp } => 비교 define i1 @tgt(ptr %ptr) { %0: ret i1 1 } Transformation doesn't verify! define i1 @tgt(ptr %ptr) { %0: ret i1 0 } Transf..
LLVM PASS의 에러 검출 목적의 SOLVER 활용 https://llvm.org/devmtg/2020-09/slides/Lee-UndefPoison.pdf 발췌 -- 19. DSEPass ---------------------------------------- define i32 @test_captured_after_load_same_bb_2_clobbered_later(ptr %in.ptr) { %0: %a = alloca i64 4, align 4 store i32 55, ptr %a, align 4 %in.lv.1 = load ptr, ptr %in.ptr, align 2 %in.lv.2 = load i32, ptr %in.lv.1, align 2 call void @escape_writeon..
Symbolic Execution은 대부분의 낯선 것들이 그렇듯 관념적으로 이해하게 된다. 이 글에서는 Symbolic Execution 을 만든 사람들이 어떤 고민을 했는지를 생각해보는 과정을 통해 그리고 몇 가지 예시를 통해 수학에서는 함수를 f 로 표기하고 함수=function이라고 부른다. 공교롭게도 이 함수는 프로그래밍에서 함수=function이라고 부르는 것과 일치한다 . f(x) = x + 4 인 함수를 C로 작성한다면? int f(int x) { return x+4; } 너무 쉬워서 더 생각할 필요도 없는것 같지만 Symbolic Execution은 우리가 간과하는 것을 고민한다. 대표적인게, "위에서 작성한 코드를 어떻게 테스트 할 수 있을까?"에 대한 고민이 그것이다. 내 생각에 고민은..
Simplify 테스트 케이스 중에는 다음과 같은 항목이 있습니다. 아무도 관심갖지 않는 TODO 입니다 ㅠ_ㅠ ; TODO: simplify this to %a define i1 @test8(i1 %a) { ; CHECK-LABEL: @test8( ; CHECK-NEXT: [[C:%.*]] = add i1 [[A:%.*]], true ; CHECK-NEXT: [[RES:%.*]] = xor i1 [[C]], true ; CHECK-NEXT: ret i1 [[RES]] ; %c = add i1 %a, true %res = xor i1 %c, true ret i1 %res } ; TODO: simplify this to %a define i1 @test10(i1 %a) { ; CHECK-LABEL: @te..