LLDにおける謎の`d4d4`命令:トラップではなく条件付き分岐
2025-08-21
あるプログラマーが、逆アセンブルされたARMコードの中に多数の`d4d4`命令を発見しました。これらの命令は常に到達不能であり、LLVMのobjdumpでは-0x58への相対分岐として識別されます。実験と分析の結果、これらの命令はLLVMコンパイラではなく、LLDリンカによってオブジェクトファイルの境界のアラインメント中に挿入されていることがわかりました。LLDは`d4d4`をパディングとして使用しており、トラップ命令として意図されていますが、実際には条件付き分岐であり、Thumb命令セットでは相対ジャンプとして機能します。これはLLDのバグと考えられ、真のトラップではなく、予測不可能なジャンプを引き起こす可能性があります。GNUリンカはパディングにゼロを使用しており、この問題を回避しています。
続きを読む
開発