일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux packer
- on-stack replacement
- LLVM 난독화
- LLVM
- v8 tracing
- OSR
- on stack replacement
- LLVM Obfuscator
- thread local storage
- 난독화
- apm
- anti debugging
- Injection
- so inject
- TLS
- tracerpid
- linux thread
- linux debugging
- 안티디버깅
- pinpoint
- custom packer
- initial-exec
- Linux custom packer
- android inject
- v8 optimizing
- tracing
- uftrace
- Obfuscator
- Android
- pthread
- Today
- Total
Why should I know this?
[TODO] DomConditionCache 본문
1. 기능 설명
2. 내부 함수 설명
3. 활용 설명
https://github.com/ParkHanbum/llvm-project/commit/d77067d08a3f56dc2d0e6c95bd2852c943df743a
LLVM 최근 패치로 DomConditionCache가 최근 추가되었습니다.
이에 대한 분석 입니다.
DC(DomConditionCache) 는 InstructionCombining에서 visitBranchInst를 통해 BranchInst를 등록합니다.
내부 구현은 DomConditionCache.cpp에 등록되어 있습니다.
BranchInst으로 인해 영향을 받을 수 있는 변수들에 BranchInst를 등록합니다.
registerBranch에서는 영향을 받는 변수들에 해당 Branch를 추가합니다.
영향을 받는 변수를 골라내는 과정은 다음과 같습니다.
변수를 상수와 비교하는 경우, 변수는 무조건 영향을 받는 변수입니다.
- 변수 A가 변수와 상수의 비트 연산, 쉬프트 연산 인 경우 변수 X는 영향받는 변수에 포함됩니다.
- 변수 A가 변수와 상수의 덧셈인 경우 변수 X는 영향을 받는 변수에 포함됩니다.
DC는 다음과 같이 활용됩니다.
ValueTracking.cpp : computeKnownBitsFromContext
1. 변수 V에 영향을 주는 BranchInst 들을 순차탐색하면서
2. computeKnownBitsFromCmp 를 통해 KnownBit 를 구성합니다.
예를 들어, BranchInst를 등록할 때 조건을 보면, BI의 조건을 보고 등록하니까
X < 100 같은 비교문일 경우 X가 영향을 받는 변수로, X < 100 를 조건으로 갖는 BI 가 등록됩니다.
그러면 X < 100 이란 조건을 가지고 X의 KnownBit 를 구성할 수 있습니다.
KnownBits에 대해서는 다음 글 참고 바랍니다. (작성중)
https://die4taoam.tistory.com/147
'LLVM-STUDY' 카테고리의 다른 글
LLVM debug tips (0) | 2024.01.14 |
---|---|
LLVM 내부에서 활용되는 논리식 모음 (0) | 2023.12.15 |
SubclassOptionalData (0) | 2023.12.11 |
computeKnownBits & KnownBits 관련 예제 (0) | 2023.12.05 |
byval (0) | 2023.11.07 |