ディスク ライトバックを使用せずにメモリからバイナリを実行する
プログラム内で変数内にバイナリを埋め込み、実行する方法を探しています。ディスクのライトバックなしで実行できます。これには、メモリから直接バイナリを実行するメカニズムを見つけることが含まれます。
C/C アプローチ (mprotect() システム コールを使用)
C または C を使用する (CGO 経由) Go では)、Linux の mprotect() システム コールを利用してメモリ保護を操作できます。この呼び出しにより、メモリ領域のアクセス許可を変更し、実行可能にすることができます。領域が実行可能ファイルとして保護されると、その領域にジャンプして実行できます。
#include <sys/mman.h> int main() { // ... (Load binary into memory) // Change memory protection to executable mprotect(binary_buffer, binary_size, PROT_READ | PROT_WRITE | PROT_EXEC); // Jump into the executable region ((void (*)(void))binary_buffer)(); }
Go アプローチ (アセンブリ手法)
Go には、メモリ保護を指定できる直接システム コール。ただし、アセンブリ手法を使用して、syscall を使用してメモリ保護を操作できます。Syscall 関数を使用して Go コードから mprotect() システム コールを呼び出します。
import ( "syscall" "unsafe" ) // ... (Load binary into memory) // Change memory protection to executable syscall.Syscall(syscall.SYS_MPROTECT, uintptr(unsafe.Pointer(&binary_buffer[0])), uintptr(binary_size), syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC) // Jump into the executable region (((func()) unsafe.Pointer(&binary_buffer[0])))()
注:
以上がディスクに書き込まずにメモリからバイナリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。