GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen aus einer Datei in Assembly

Sie müssen Ihren Puffer im bss-Abschnitt und die Puffergröße in data

deklarieren
section .data
   bufsize dw      1024

section .bss
   buf     resb    1024

Ohh, das wird lustig.

Die Assemblersprache hat keine Variablen. Dabei handelt es sich um ein übergeordnetes Sprachkonstrukt. In der Assemblersprache, wenn Sie Variablen wollen, erstellen Sie sie selbst. Bergauf. Beide Wege. Im Schnee.

Wenn Sie einen Puffer benötigen, müssen Sie entweder einen Bereich Ihres Stacks als Puffer verwenden (nachdem Sie die entsprechenden Stack-Frame-Setup-Anweisungen aufgerufen haben) oder einen Bereich auf dem Heap verwenden. Wenn Ihr Heap zu klein ist, müssen Sie eine SYSCALL-Anweisung (ein weiterer INT 80h) machen, um das Betriebssystem um mehr zu bitten (über sbrk).

Eine andere Alternative besteht darin, sich mit dem ELF-Format vertraut zu machen und im entsprechenden Abschnitt eine globale Variable zu erstellen (ich glaube, es ist .data).

Das Endergebnis jeder dieser Methoden ist ein Speicherplatz, den Sie verwenden können. Aber Ihre einzigen wirklichen "Variablen", wie Sie es aus der jetzt wunderbar erscheinenden Welt von C gewohnt sind, sind Ihre Register. Und es gibt nicht sehr viele davon.

Der Assembler kann Ihnen mit nützlichen Makros helfen. Lesen Sie die Assembler-Dokumentation; Ich kann mich aus dem Stegreif nicht an sie erinnern.

Das Leben dort unten auf ASM-Ebene ist hart.


Nach dem Aufruf von open steht das Dateihandle in eax. Sie verschieben es zu Recht nach ebx, wo der Aufruf zum Lesen danach sucht. Leider haben Sie ihn an dieser Stelle bereits mit 3, dem Syscall zum Lesen, überschrieben.


Linux
  1. Wie kann ich eine Datei von Awk kategorisieren?

  2. Erstellen Sie Text, der Daten aus einer Datei liest?

  3. Lesen von Grep-Mustern aus einer Datei?

  4. Abschnitt zur ELF-Datei hinzufügen

  5. Wie entferne ich X Bytes vom Ende einer großen Datei, ohne die gesamte Datei zu lesen?

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Rufen Sie den Dateinamen aus dem Dateideskriptor in C ab

Lesen einer CSV-Datei mit SQL-Abfragen aus der Linux-Shell

Erstellen Sie eine PEM aus einer PPK-Datei

Unerwartete Exec-Berechtigung von mmap, wenn Assembly-Dateien im Projekt enthalten sind

Wie unterscheidet sich install -c von cp