UEFI 스터디 19차 - 정수 오버플로, 타입 혼동, 절단
2 minute read
Published:
간단한 용어 정리
- 정수 오버플로우 정수 연산의 결과가 타입이 표현 가능한 범위를 벗어나서 순환 되는 현상.
- 타입 혼동 메모리 데이터를 실제 타입과 다른 잘못된 타입으로 해석해서 사용하는 문제(실제 데이터와 다른 잘못된 구조체로 선언해 이상한 오프셋에 접근) (signedness confusion 타입 혼동의 하위 장르, unsigned를 signed로 해석해 사용, 혹은 그 반대.)
- 절단 넓은 타입 값을 좁은 타입에 저장하면서 상위 비트가 손실되는 문제.
UEFI 스터디 18차 - 지배자 트리와 루프감지
2 minute read
Published:
Basic Block (복습)
진입하면 마지막까지 탈출 없이 쭉 실행되는 가장 큰 단위의 코드 시퀀스.
리더(leader)를 잡는 규칙:
- 함수의 첫 명령어
- 분기(branch)의 타겟
- 분기 직후의 명령어 각 리더에서 시작해 다음 리더 직전까지를 한 블록으로 묶는다. 아래 블록이 basic block
CFG (Control Flow Graph)
- entry / exit 노드는 유일하게 두는 게 관례. exit이 여러 개면 단일 exit을 하나 만들어 전부 연결한다. → post-dominator를 정의하려면 단일 exit이 필수.
- 실행 불가능한 경로도 엣지는 연결한다. 예:
if(false)구조상 가능한 흐름. “모든 가능한 경로”라고 해서 실제로 다 갈 수 있는 건 아니다.
마찬가지로 언급될 지배자트리와 루프 탐지에서 사용.
Dominator Tree
블록 간의 ‘반드시 선행됨’ 관계를 나타낸다.
정의. A dom B ⟺ entry에서 B로 가는 모든 경로가 A를 지난다. = “B가 실행됐으면 A는 반드시 실행됐다.”
- entry를 출발점으로 <- 매우 중요 = 출발점이 있어야 함
- 경로 중 하나라도 A를 안 지나면 정의가 성립하지 않는다.
- 자기 자신을 제외한 dominator(strict dominator)들은 반드시 일렬로 정렬된다 -> 바로 윗 predecessor만 가리키게하면 공간복잡도 O(N)으로 구현가능.
UEFI 스터디 16차 - CFA, DFA와 기드라에서의 적용 전략
7 minute read
Published:
기본 개념 정리
UEFI 스터디 15차 - 기드라 p 코드 공부 (sleigh, high VS low pcode.)
3 minute read
Published:
