일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android
- on-stack replacement
- uftrace
- thread local storage
- OSR
- initial-exec
- pinpoint
- pthread
- linux thread
- so inject
- LLVM
- v8 optimizing
- android inject
- 난독화
- apm
- linux debugging
- tracing
- on stack replacement
- Linux custom packer
- Injection
- tracerpid
- 안티디버깅
- anti debugging
- v8 tracing
- TLS
- LLVM 난독화
- Obfuscator
- LLVM Obfuscator
- custom packer
- Linux packer
- Today
- Total
Why should I know this?
LLVM debug 빌드시 주의점 본문
LLVM 을 debug 로 빌드하면 링킹 때 위처럼 1core 만 돌렸을 때 최대 15기가 까지 메모리를 잡아먹음.
-j 을 지정할 때 주의해야 함.
혹자는 swap을 늘리면 되는게 아니냐고 물을텐데, 링킹 과정에서 트리서치 과정이 굉장히 빈번하고 많이 일어남. 즉, swap하면서 코어수를 늘리느니 swap없이 코어를 줄이는게 현명.
-- Performing Test HAVE_POSIX_REGEX
-- Performing Test HAVE_POSIX_REGEX -- success
-- Performing Test HAVE_STEADY_CLOCK
-- Performing Test HAVE_STEADY_CLOCK
-- Performing Test HAVE_STEADY_CLOCK -- success
-- Configuring done (93.7s)
-- Generating done (8.6s)
-- Build files have been written to: /data/data/com.termux/files/home/scratch_dir/llvm_build0
[1720/5090] Building AMDGPUGenMCCodeEmitter.inc...Connection to 192.168.25.3 closed by remote host.
termux 에서는 debug 빌드는 시도하지 않는게 좋음.
컴파일 타임에 계속 종료되는걸 보면 빌드 시간이 길어지면서 생기는 모종의 이유로 강종이 됨.
다음과 같은 명령으로 compile과 linking job 을 변경하여 조절할 수 있다.
cmake
'-DCMAKE_JOB_POOLS:STRING=compile=5;link=2'
-DCMAKE_JOB_POOL_COMPILE:STRING=compile
-DCMAKE_JOB_POOL_LINK:STRING=link
~/src/MyProject
docker를 사용한다면 다음과 같이 cpu를 제한할 수 있다
docker update --memory "1g" --cpuset-cpus "1" <RunningContainerNameOrID>
예제 스크립트
BUILD_SYSTEM=Ninja
BUILD_TAG=$1
LLVM_HOME=$2
cmake -H$2 \
-G$BUILD_SYSTEM -B ${BUILD_TAG}_build \
-DCMAKE_BUILD_TYPE=Debug \
-DLLVM_TARGETS_TO_BUILD='host' \
-DLLVM_ENABLE_PROJECTS='clang;' \
-DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link \
'-DCMAKE_JOB_POOLS:STRING=compile=20;link=2'