メモリ内バイナリの実行
開発者は多くの場合、アプリケーションの一部としてバイナリを実行する必要があります。ただし、バイナリをディスクに保存してから「exec」または「fork」を呼び出す従来のアプローチは効率が悪い場合があります。この記事では、ディスクへの書き込みを不要にして、メモリから直接バイナリを実行する方法について説明します。
バックグラウンド
提供されたコード スニペットでは、バイナリ データは次の場所に保存されます。 「myExec」という名前の変数。目標は、このバイナリをファイル システムに書き戻さずに実行することです。
C および Linux でのソリューション
C では、mprotect() システム コールを使用すると、次のことが可能になります。メモリ領域の保護を変更します。これは、データ領域をコード領域に変換できることを意味します。この変換が完了したら、メモリ領域にジャンプして実行できます。
これを行う方法の例を次に示します:
#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; }
以上がLinux 上の C でメモリからバイナリを直接実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。