ここでは C を扱います。foo
関数が保存されているメモリ内のポイントにアクセスできるかどうか、たとえば、関数の内容をメモリ内の別のポイントにコピーできるかどうか疑問に思っています。具体的には、次のことを機能させようとしています。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void foo(){
printf("Hello World");
}
int main(){
void (*bar)(void) = malloc(sizeof foo);
memcpy(&bar, &foo, sizeof foo);
bar();
return 0;
}
しかし、それを実行するとバスエラーが発生します: Bus error: 10
. foo
function の内容をメモリのスペースにコピーしてからbar
、新しく作成した function を実行しようとしていますbar
。
これは、そのようなことが可能かどうかを確認し、C 言語の複雑さを明らかにする以外の理由はありません。これがどのような実用的な用途があるかは考えていません。
これを機能させるためのガイダンスを探しています。または、これが機能しない理由を説明してください。
編集いくつかの回答を見て、 read、write、および実行可能メモリについて学習したところ、実行可能メモリに書き込むことで C でその場で関数を作成できることがわかりました。