いくつかの ARM ELF ファイルを逆コンパイルし、アセンブラ コードを読みました。しかし、一部のコードがどのようにニーモニックに変換されているのかわかりません。たとえば、次のようなコードを取得します。
#hex code | #mnemonic | #binary
0xb480 | push {r7} | 1011 0100 1000 0000
0xb580 | push {r7, lr} | 1011 0101 1000 0000
0xb5f0 | push {r4,r5,r6,r7,lr} | 1011 0101 1111 0000
そのため、複数の値をプッシュするpush
is0xb4
またはifのオペコードを明確に確認できます。0xb5
しかし、レジスタのリストはどのように作成されるのでしょうか?
最初の例は非常に明確で、r7
設定されている 8 番目のビットによってコード化されています。しかし、なぜ 2 番目のオペコードもプッシュするのlr
でしょうか? そのためのビットフラグはありませんか?