次のx86アセンブリコードで:x86 ASM:DD「命令」として使用されていますか?
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002+0x00)
値は、任意の変数に代入していないようです。では、このコードスニペットは何をしていますか?私はそれがメモリに保存されていることを聞いたことがありますが、正確にどこに?
次のx86アセンブリコードで:x86 ASM:DD「命令」として使用されていますか?
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002+0x00)
値は、任意の変数に代入していないようです。では、このコードスニペットは何をしていますか?私はそれがメモリに保存されていることを聞いたことがありますが、正確にどこに?
dd
は、add eax,eax
が出力にをアセンブルするのと同じ方法で、4バイトの定数を出力に組み立てる「疑似命令」です。
NASMマニュアルsection 3.2 Pseudo-Instructionsは、db
/dw
/dd
などと記載されています。
この場合、@MichaelPetchが指摘しているように、これらの特定の定数を使用してマルチファイルヘッダを出力ファイルに組み立てます。 https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format
How does this assembly bootloader code work?
関連:
How are dw and dd different from db directives for strings?
What is the use of .byte assembler directive in gnu assembly?
これはmulitbootヘッダです。 GRUBのようなものを通して起動するコードを書く場合、このシグネチャは、GRUB(またはmulitboot準拠のローダ)用に表示されるELFファイルの最初の8KBにある必要があります。それがなければ、マルチブートローダーはエラーになります。あなたはGRUBのドキュメントでこれに関するドキュメントを見つけています:https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format –
DDは命令として使用されていません。これは、32ビットの値を定義できるようにするNASMディレクティブです。このマルチバイトヘッダを構成するデータは、通常、リンカスクリプトが生成されたELF実行可能ファイルの中の他のものの前に置かれるデータセクションに置かれます(マルチブートローダ/ GRUBがそれを見つけるためにファイルの最初の8k ) –