Mysteriöse `d4d4`-Instruktionen in LLD: Kein Trap, sondern bedingter Sprung

2025-08-21

Ein Programmierer entdeckte zahlreiche `d4d4`-Instruktionen in disassembliertem ARM-Code, die stets unerreichbar waren und von LLVM's objdump als relativer Sprung nach -0x58 identifiziert wurden. Experimente und Analysen zeigten, dass diese nicht vom LLVM-Compiler, sondern vom LLD-Linker beim Ausrichten der Grenzen von Objektdateien hinzugefügt wurden. LLD verwendet `d4d4` als Füllmaterial, in der Absicht, dass es sich um eine Trap-Instruktion handelt. Es ist jedoch tatsächlich ein bedingter Sprung, der im Thumb-Instruction-Set als relativer Sprung fungiert. Dies scheint ein Fehler in LLD zu sein; es ist kein echter Trap, der unvorhersehbare Sprünge verursachen kann. Der GNU-Linker verwendet Nullen als Füllmaterial und vermeidet dieses Problem.

Mehr lesen
Entwicklung