gpt4 book ai didi

c - 如何让函数在不同的地址空间中执行?编写克隆函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:34 25 4
gpt4 key购买 nike

我的这段代码会出现段错误。我对克隆函数的理解是,父进程必须为子进程分配空间,克隆调用在该堆栈空间中运行的函数。我是误会了什么还是我的代码没有意义?

char *stack;
char *stackTop;


stack = malloc(STACK_SIZE);
if (stack == NULL)
fprintf(stderr, "malloc");
stackTop = stack + STACK_SIZE;
myClone(childFunc, stackTop, CLONE_FILES, NULL);

int myClone(int (*fn)(void *), void *child_stack,int flags, void *arg){
int* space = memcpy(child_stack, fn, sizeof(fn));
typedef int func(void);
func* f = (func*)&space;
f();
}

最佳答案

这行不通的主要原因有两个。

  • 内存保护:相关内存页必须是可执行的。您从 malloc 获得的数据页不是。 “正常”的内存管理功能不能做到这一点。另一方面,现有的代码页是不可写的,因此您不能将一段代码移动到另一段。这是一个基本的内存保护机制。您必须返回 DOS 或使用一些高级“调试”界面。

  • 与位置无关的代码:代码中的所有内存地址必须是相对地址,或者是手动固定的。在 C 中执行此操作可能太棘手了。

关于c - 如何让函数在不同的地址空间中执行?编写克隆函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com