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; }
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!