GNU/Linux >> Znalost Linux >  >> Linux

Čtení ze souboru v sestavě

musíte deklarovat svůj buffer v sekci bss a bufsize v data

section .data
   bufsize dw      1024

section .bss
   buf     resb    1024

Oh, to bude zábava.

Jazyk symbolických instrukcí nemá proměnné. Jedná se o jazykový konstrukt vyšší úrovně. V assembleru, pokud chcete proměnné, uděláte si je sami. Do kopce. Oba způsoby. Ve sněhu.

Pokud chcete vyrovnávací paměť, budete muset jako vyrovnávací paměť použít buď určitou oblast svého zásobníku (po vyvolání příslušných instrukcí nastavení rámce zásobníku), nebo použít nějakou oblast na haldě. Pokud je vaše halda příliš malá, budete muset vytvořit instrukci SYSCALL (dalších INT 80h), abyste požádali operační systém o další (přes sbrk).

Další alternativou je dozvědět se o formátu ELF a vytvořit globální proměnnou v příslušné sekci (myslím, že je to .data).

Konečným výsledkem kterékoli z těchto metod je místo v paměti, které můžete použít. Ale vaše jediné skutečné „proměnné“, na které jste zvyklí z nyní úžasně vypadajícího světa C, jsou vaše registry. A není jich moc.

Assembler vám může pomoci s užitečnými makry. Přečtěte si dokumentaci k assembleru; Nepamatuji si je z hlavy.

Život je tam dole na úrovni ASM těžký.


Po volání k otevření je popisovač souboru v eax. Oprávněně jej přesunete na ebx, kde jej výzva ke čtení vyhledá. Bohužel v tuto chvíli jste jej již přepsali 3, systémovým voláním pro čtení.


Linux
  1. Jak vykopat soubor z Awk?

  2. Awk z různých řádků?

  3. Záhlaví souborů ELF

  1. Přidání sekce do souboru ELF

  2. Jak odstranit X bajtů z konce velkého souboru bez přečtení celého souboru?

  3. Jak vytvořit soubor v Linuxu z okna terminálu?

  1. Čtení souboru CSV s SQL dotazy z linuxového shellu

  2. Čtení souboru Rdata s jiným kódováním

  3. Neočekávané oprávnění exec od mmap při zahrnutí souborů sestavy do projektu