GNU/Linux >> Linux Esercitazione >  >> Linux

Lettura da un file in assembly

devi dichiarare il tuo buffer nella sezione bss e la bufsize in data

section .data
   bufsize dw      1024

section .bss
   buf     resb    1024

Ohh, sarà divertente.

Il linguaggio assembly non ha variabili. Quelli sono un costrutto linguistico di livello superiore. Nel linguaggio assembly, se vuoi variabili, le crei tu stesso. Salita. Entrambi i modi. Nella neve.

Se vuoi un buffer, dovrai utilizzare una regione del tuo stack come buffer (dopo aver chiamato le istruzioni appropriate per l'impostazione del frame dello stack) o utilizzare una regione dell'heap. Se il tuo heap è troppo piccolo, dovrai creare un'istruzione SYSCALL (un altro INT 80h) per chiedere di più al sistema operativo (tramite sbrk).

Un'altra alternativa è conoscere il formato ELF e creare una variabile globale nella sezione appropriata (penso sia .data).

Il risultato finale di uno qualsiasi di questi metodi è una posizione di memoria che puoi utilizzare. Ma le tue uniche vere "variabili" a cui sei abituato dall'ormai meraviglioso mondo di C sono i tuoi registri. E non ce ne sono molti.

L'assemblatore potrebbe aiutarti con utili macro. Leggi la documentazione dell'assemblatore; Non li ricordo dalla parte superiore della mia testa.

La vita è dura laggiù a livello di ASM.


Dopo la chiamata a open, l'handle del file è in eax. Lo sposti giustamente eax in ebx, dove la chiamata a read lo cercherà. Sfortunatamente, a questo punto l'hai già sovrascritto con 3, la chiamata di sistema per la lettura.


Linux
  1. Come catturare un file da Awk?

  2. Awk da linee diverse?

  3. Creare dati di lettura di testo da un file?

  4. Intestazioni file ELF

  5. Aggiunta di una sezione al file ELF

Come rimuovere (^M) caratteri da un file in Linux

Come rimuovere X byte dalla fine di un file di grandi dimensioni senza leggere l'intero file?

Come creare un file in Linux dalla finestra del terminale?

Come incollare dal buffer in modalità ex di vim?

Lettura di un file CSV con query SQL dalla shell Linux

Autorizzazione exec imprevista da mmap quando i file di assemblaggio sono inclusi nel progetto