ホームページ >バックエンド開発 >Golang >Linux 上の C でメモリからバイナリを直接実行するにはどうすればよいですか?

Linux 上の C でメモリからバイナリを直接実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-28 02:37:18667ブラウズ

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

メモリ内バイナリの実行

開発者は多くの場合、アプリケーションの一部としてバイナリを実行する必要があります。ただし、バイナリをディスクに保存してから「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。