clang을 사용하여 어셈블리를 오브젝트 파일로 컴파일합니다.
[컴파일 옵션]
• -target arm64-apple-darwin
• -c (컴파일만, 링크 안함)
• -O0 (최적화 없음)
[병렬 컴파일]
• GNU parallel 또는 xargs 사용
• CPU 코어 수만큼 병렬 처리
• 77,000+ 파일 처리
[출력]
• output/obj/*.o - 오브젝트 파일
ForgeNet
🔍
← 파이프라인 개요
/ BlackForge / Step 8
8
Compile
BlackForge Pipeline · Phase 3
✓ Active
📥 입력 (Input)
final .s
📤 출력 (Output)
.o files
📋 상세 설명 (Description)
📊 프로세스 흐름도 (Process Flow)
🔍 클릭하여 상세 다이어그램 보기
Drill Down →
flowchart LR
S[.s files] --> C[clang -c]
C --> O[.o files]
style S fill:#a371f7
style O fill:#238636
📁 소스 파일 (Source Files)
17개 파일
step1_disassemble.sh
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step1_disassemble.sh
shell
macmini
Step 1: 디스어셈블
소스 코드 로딩 중...
step2_fix_gas.sh
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step2_fix_gas.sh
shell
macmini
Step 2: GAS 변환
소스 코드 로딩 중...
xnu_match.py
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step03-XNU매칭/xnu_match.py
python
macmini
XNU 매칭 스크립트
소스 코드 로딩 중...
xnu_match_worker.py
/home/hacker/docs/800000_forgenet_ubuntu_server/070000_BlackForge_remote_worker/xnu_match_worker.py
python
ubuntu
XNU 원격 매칭 워커
소스 코드 로딩 중...
fix_adrp.py
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step04-ADRP수정/fix_adrp.py
python
macmini
Step 4: ADRP 수정
소스 코드 로딩 중...
fix_adr.py
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step05-ADR수정/fix_adr.py
python
macmini
Step 5: ADR 수정
소스 코드 로딩 중...
rebuild_macho.py
/Users/hacker/docs/700008_forgenet_center/050000_BlackForge_macmini_local/pipeline/steps/step09-리빌드/rebuild_macho.py
python
macmini
Step 9: Mach-O 리빌드
소스 코드 로딩 중...
kernelcache_disasm.py
pipeline/steps/step01-디스어셈블/kernelcache_disasm.py
python
Mac Mini
iOS kernelcache Mach-O를 ARM64 어셈블리로 디스어셈블. Capstone 엔진 사용.
소스 코드 로딩 중...
run.sh
pipeline/steps/step01-디스어셈블/run.sh
shell
Mac Mini
Step 1 실행 스크립트. 입력 검증, 디스어셈블 실행, 결과 검증.
소스 코드 로딩 중...
fix_asm_for_compile.py
pipeline/steps/step02-GAS변환/fix_asm_for_compile.py
python
Mac Mini
디스어셈블된 ARM64를 컴파일 가능한 GAS 형식으로 변환. 절대주소를 레이블로, SVE/MTE 명령어를 .byte로 변환.
소스 코드 로딩 중...
xnu_match.py
pipeline/steps/step03-XNU매칭/xnu_match.py
python
Mac Mini + Ubuntu
XNUVault(41,801 함수)와 ASMVault(77,213 함수)를 사용한 소스 매칭. 분할 인덱스 Lazy 로드 지원.
소스 코드 로딩 중...
fix_adrp.py
pipeline/steps/step04-ADRP수정/fix_adrp.py
python
Mac Mini
ADRP 명령어를 기계어(.byte)로 직접 인코딩. PC-relative 페이지 주소 계산 (21-bit imm, ±4GB 범위).
소스 코드 로딩 중...
fix_adr.py
pipeline/steps/step05-ADR수정/fix_adr.py
python
Mac Mini
ADR 명령어를 기계어(.byte)로 직접 인코딩. PC-relative 직접 주소 계산 (21-bit imm, ±1MB 범위).
소스 코드 로딩 중...
fix_ldr_literal.py
pipeline/steps/step06-LDR수정/fix_ldr_literal.py
python
Mac Mini
LDR literal 명령어를 기계어로 인코딩. GPR(32/64-bit), SIMD(32/64/128-bit) 레지스터 지원.
소스 코드 로딩 중...
fix_branch.py
pipeline/steps/step07-브랜치수정/fix_branch.py
python
Mac Mini
B/BL 분기 명령어를 기계어로 인코딩. 26-bit imm, ±128MB 범위. 내부/외부 참조 처리.
소스 코드 로딩 중...
rebuild_macho.py
pipeline/steps/step09-리빌드/rebuild_macho.py
python
Mac Mini
원본 kernelcache를 베이스로 __TEXT_EXEC 섹션을 재컴파일된 코드로 교체. NOP 패딩 처리.
소스 코드 로딩 중...
blackforge.sh
pipeline/blackforge.sh
shell
Mac Mini
BlackForge v1.2.2 통합 마스터 스크립트. build/quick/verify/status 명령어 지원.
소스 코드 로딩 중...
⌨️ 실행 명령어 (Commands)
# 컴파일 실행
./step5_compile.sh
# 또는 개별 컴파일
clang -target arm64-apple-darwin -c func.s -o func.o
# 병렬 컴파일
find output/final -name "*.s" | parallel -j8 clang -target arm64-apple-darwin -c {} -o output/obj/{/.}.o