GNU/Linux >> Belajar Linux >  >> Linux

Membaca dari file dalam perakitan

Anda harus mendeklarasikan buffer Anda di bagian bss dan bufsize di data

section .data
   bufsize dw      1024

section .bss
   buf     resb    1024

Ohh, ini akan menyenangkan.

Bahasa assembly tidak memiliki variabel. Itu adalah konstruksi bahasa tingkat tinggi. Dalam bahasa rakitan, jika Anda menginginkan variabel, Anda membuatnya sendiri. Menanjak. Kedua cara. Di salju.

Jika Anda menginginkan buffer, Anda harus menggunakan beberapa wilayah tumpukan Anda sebagai buffer (setelah memanggil instruksi penyiapan bingkai-tumpukan yang sesuai), atau menggunakan beberapa wilayah di heap. Jika heap Anda terlalu kecil, Anda harus membuat instruksi SYSCALL (INT 80j lainnya) untuk meminta lebih banyak sistem operasi (melalui sbrk).

Alternatif lain adalah mempelajari format ELF dan membuat variabel global di bagian yang sesuai (menurut saya .data).

Hasil akhir dari salah satu metode ini adalah lokasi memori yang dapat Anda gunakan. Tapi satu-satunya "variabel" Anda yang sebenarnya seperti yang biasa Anda lakukan dari dunia C yang sekarang tampak indah adalah register Anda. Dan jumlahnya tidak banyak.

Assembler mungkin membantu Anda dengan makro yang berguna. Baca dokumentasi assembler; Saya tidak ingat mereka dari atas kepala saya.

Hidup itu sulit di level ASM.


Setelah panggilan untuk membuka, pegangan file ada di eax. Anda berhak memindahkannya ke ebx, di mana panggilan untuk membaca akan mencarinya. Sayangnya, saat ini Anda telah menimpanya dengan 3, syscall untuk membaca.


Linux
  1. Apakah Mungkin Di Bash, Untuk Mulai Membaca File Dari Offset Hitungan Byte Sewenang-wenang?

  2. Membaca Baris Dari File Dengan Bash:Untuk Vs. Ketika?

  3. Membaca Pola Grep Dari File?

  1. header file ELF

  2. Ambil nama file dari deskriptor file di C

  3. Bagaimana cara menempel dari buffer dalam mode ex vim?

  1. Membaca file CSV dengan kueri SQL dari linux shell

  2. Buat PEM dari file PPK

  3. Membaca file Rdata dengan penyandian berbeda