5

次の x64 NASM 構文アセンブリを検討してください。

inc qword [rax]
inc qword [rcx]
inc qword [rdx]
inc qword [rbx]
inc qword [rsp]
inc qword [rbp]
inc qword [rsi]
inc qword [rdi]

nasm でアセンブル (および gnu ld でリンク) しobjdump -dた後、次のように報告されます。

4000b0:       48 ff 00                incq   (%rax)
4000b3:       48 ff 01                incq   (%rcx)
4000b6:       48 ff 02                incq   (%rdx)
4000b9:       48 ff 03                incq   (%rbx)
4000bc:       48 ff 04 24             incq   (%rsp)
4000c0:       48 ff 45 00             incq   0x0(%rbp)
4000c4:       48 ff 06                incq   (%rsi)
4000c7:       48 ff 07                incq   (%rdi)

mod フィールドが設定されているため、生成されたコードinc qword [rbp]は理にかなっています。しかし、 を24組み立てるときに がどこから来たのかわかりませんinc qword [rsp]。私はcoder64 #xFFを見てきましたが、24 を生成する必要があることを示唆するものは何もありません。明らかに、より高いレベルで何かが欠けています。

4

1 に答える 1

7

[RSP] ModR/M バイトはありません。そのため、[sib] ModR/M を使用しています。sib はsib バイトがあることを意味し、0x24 は RSP の sib バイトです。

于 2012-09-29T19:55:39.043 に答える