我们在这里处理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
. 我正在尝试将 function 的内容复制foo
到内存空间中bar
,然后执行新创建的 function bar
。
这只是为了看看这样的事情是否可能,以揭示 C 语言的复杂性。我没有考虑这有什么实际用途。
我正在寻找指导以使其正常工作,或者以其他方式被告知,原因是为什么这不起作用
编辑查看了一些答案并了解了read、write和executable内存,我突然意识到可以通过写入可执行内存在 C 中动态创建函数。