Eli*_*ton 6 c memory copy execute
我想知道在C中如何将一个函数的内容复制到memroy并执行它?
我正在尝试做这样的事情:
typedef void(*FUN)(int *);
char * myNewFunc;
char *allocExecutablePages (int pages)
{
template = (char *) valloc (getpagesize () * pages);
if (mprotect (template, getpagesize (),
PROT_READ|PROT_EXEC|PROT_WRITE) == -1) {
perror ("mprotect");
}
}
void f1 (int *v) {
*v = 10;
}
// allocate enough spcae but how much ??
myNewFunc = allocExecutablePages(...)
/* Copy f1 somewere else
* (how? assume that i know the size of f1 having done a (nm -S foo.o))
*/
((FUN)template)(&val);
printf("%i",val);
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答
你似乎已经找到了关于保护标志的部分.如果您知道函数的大小,现在您可以执行memcpy()并将f1的地址作为源地址传递.
一个重要的警告是,在许多平台上,你将无法从你正在复制的那个函数调用任何其他函数(f1),因为相对地址被硬编码到函数的二进制代码中,并将其移动到另一个函数中位置它的内存可以使那些相对地址变坏.