GNU/Linux >> Linux の 問題 >  >> Linux

アセンブリ内のファイルからの読み取り

bss セクションでバッファーを宣言し、データで bufsize を宣言する必要があります

section .data
   bufsize dw      1024

section .bss
   buf     resb    1024

おお、これは楽しそうです。

アセンブリ言語には変数がありません。これらは高水準の言語構造です。アセンブリ言語では、変数が必要な場合は自分で作成します。上り坂。両方。雪の中。

バッファーが必要な場合は、スタックの一部の領域をバッファーとして使用するか (適切なスタック フレーム セットアップ命令を呼び出した後)、ヒープ上の一部の領域を使用する必要があります。ヒープが小さすぎる場合は、SYSCALL 命令 (別の INT 80h) を作成して、(sbrk 経由で) オペレーティング システムに追加を要求する必要があります。

もう 1 つの方法は、ELF 形式について学び、適切なセクションにグローバル変数を作成することです (.data だと思います)。

これらのメソッドの最終結果は、使用できるメモリ ロケーションです。しかし、今では素晴らしく見えるようになった C の世界から慣れ親しんだ唯一の本当の「変数」は、レジスターです。そして、それらの数はそれほど多くありません.

アセンブラは、便利なマクロを手助けしてくれるかもしれません。アセンブラのドキュメントを読んでください。頭のてっぺんからそれらを覚えていません。

ASM レベルでの生活は厳しいものです。


open の呼び出し後、ファイル ハンドルは eax になります。当然のことながら、eax を ebx に移動し、そこで read の呼び出しがそれを探します。残念ながら、この時点で、読み取り用の syscall である 3 で既に上書きされています。


Linux
  1. Bashで、任意のバイトカウントオフセットからファイルの読み取りを開始することは可能ですか?

  2. Bashを使用してファイルから行を読み取る:対その間?

  3. ファイルからGrepパターンを読み取る?

  1. ELF ファイルへのセクションの追加

  2. ファイル全体を読み取らずに、大きなファイルの末尾から X バイトを削除する方法は?

  3. ターミナルウィンドウからLinuxでファイルを作成するには?

  1. エンコーディングが異なる Rdata ファイルの読み取り

  2. install -c は cp とどう違うのですか

  3. Windows から Linux にファイルをコピーする