LLD의 신비로운 `d4d4` 명령어: 트랩이 아니라 조건부 분기
2025-08-21
한 프로그래머가 디스어셈블된 ARM 코드에서 많은 `d4d4` 명령어를 발견했습니다. 이 명령어들은 항상 도달할 수 없었고, LLVM의 objdump는 -0x58로의 상대 분기로 식별했습니다. 실험과 분석 결과, 이 명령어들은 LLVM 컴파일러가 아니라 LLD 링커가 객체 파일 경계 정렬 중에 삽입한 것으로 나타났습니다. LLD는 `d4d4`를 패딩으로 사용하며, 트랩 명령어로 의도되었지만 실제로는 조건부 분기이며 Thumb 명령어 집합에서는 상대 점프로 작동합니다. 이것은 LLD의 버그로 보이며, 진정한 트랩이 아니므로 예측할 수 없는 점프를 유발할 수 있습니다. GNU 링커는 패딩에 0을 사용하여 이 문제를 방지합니다.
더 보기
개발