Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melaksanakan Binari Terus dari Memori dalam C di Linux?

Bagaimanakah Saya Boleh Melaksanakan Binari Terus dari Memori dalam C di Linux?

Linda Hamilton
Lepaskan: 2024-11-28 02:37:18
asal
701 orang telah melayarinya

How Can I Execute a Binary Directly from Memory in C on Linux?

Melaksanakan Binari Dalam Memori

Pembangun selalunya perlu melaksanakan binari sebagai sebahagian daripada aplikasi mereka. Walau bagaimanapun, pendekatan tradisional untuk menyimpan binari ke cakera dan kemudian memanggil "exec" atau "fork" boleh menjadi tidak cekap. Artikel ini meneroka kaedah untuk melaksanakan binari terus daripada memori, menghapuskan keperluan untuk menulis cakera.

Latar Belakang

Dalam coretan kod yang disediakan, data binari disimpan dalam pembolehubah bernama "myExec." Matlamatnya adalah untuk melaksanakan binari ini tanpa menulisnya kembali ke sistem fail.

Penyelesaian dalam C dan Linux

Dalam C, panggilan sistem mprotect() membenarkan anda untuk mengubah suai perlindungan kawasan ingatan. Ini bermakna anda boleh menukar rantau data kepada rantau kod. Setelah penukaran ini selesai, anda boleh melaksanakan kawasan memori dengan melompat ke dalamnya.

Berikut ialah contoh cara ini boleh dilakukan:

#include <sys/mman.h>

int main() {
  // Assume we have an array of bytes representing the binary data.
  char myExec[] = {'s', 'o', 'm', 'e', ' ', 'b', 'y', 't', 'e', 's'};
  
  // Convert the data region into a code region.
  mprotect(myExec, sizeof(myExec), PROT_READ | PROT_WRITE | PROT_EXEC);
  
  // Execute the code.
  ((void (*)())myExec)();
  
  return 0;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Binari Terus dari Memori dalam C di Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan