gpt4 book ai didi

c - 将一个进程的 esp 值替换为另一个,以获得局部变量

转载 作者:IT王子 更新时间:2023-10-29 00:44:13 25 4
gpt4 key购买 nike

我正在尝试将当前正在运行的进程 esp 值复制到在另一个终端上运行的另一个进程 esp。

我遇到了段错误。

但我无法正确找出原因,因为我使用的是内联汇编。

p1.c

int main()
{
int a=5;
int b =8;
unsigned int esp =0;
asm("mov %%esp,%0":"=r"(esp)::);
printf("esp:[%x] \n",esp);
while(1);
}

P2.c

int main()
{
int a=5;
int espoth=0;
asm("mov 0xbfda8008,%%esp"::);
}

首先,我运行了 p1.c,它给了我 0xbfda8008 当前堆栈指针。然后我在 p2.c 中使用了它,它给了我 Segmentation fault

我只是将一个值写入 esp。为什么我会犯这个错误?需要一点提示...;-(

最佳答案

这不会按预期工作。每个进程的内存与其他进程隔离,每个进程看到的内存映射是虚拟的。因此,即使两个进程都可能在同一地址拥有可用内存,也不意味着实际物理内存是相同的。

这就是“现代”操作系统和硬件与“旧”操作系统和硬件的区别。你可以在你喜欢的搜索引擎上搜索“mmu”、“内存保护单元”和“虚拟内存”。

如果在不使用 MMU 的良好的旧 MS-DOS 中播放,您的想法会奏效(除非使用例如 DOS4GW、GO32-V2 的保护模式程序播放)

关于c - 将一个进程的 esp 值替换为另一个,以获得局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570755/

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