LLD链接器中的神秘`d4d4`指令:并非陷阱,而是条件跳转

2025-08-21

一位程序员在反汇编ARM代码时发现了大量的`d4d4`指令,这些指令总是不可达的,且被LLVM的objdump识别为相对跳转到-0x58。通过实验和分析,发现这些指令并非LLVM编译器添加,而是由LLD链接器在对象文件边界对齐时插入的。LLD使用`d4d4`指令进行填充,意图使其成为陷阱指令,但实际上它是一个条件跳转指令,在Thumb指令集中表现为相对跳转。这可能是LLD的一个bug,因为它并非真正意义上的陷阱指令,而是可能导致程序跳转到不可预测的位置。GNU链接器则使用零来进行填充,避免了这个问题。

开发 LLD