加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用一个进程替换一个进程esp值,得到一个局部变量

发布时间:2020-12-16 06:51:13 所属栏目:百科 来源:网络整理
导读:我正在尝试将当前正在运行的进程esp值复制到另一个进程esp,在另一个终端上运行. 我收到了分段错误. 但我无法正确理解原因,因为我正在使用内联汇编. p1.c int main(){ int a=5; int b =8; unsigned int esp =0; asm("mov %%esp,%0":"=r"(esp)::); printf("esp
我正在尝试将当前正在运行的进程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故障.

我只是在esp中写一个值.为什么我会遇到这个错误?
需要一点提示… ;-(

解决方法

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

这就是将“现代”操作系统和硬件与“旧”操作系统和硬件区分开来的原因.您可以在自己喜欢的搜索引擎上搜索“mmu”,“内存保护单元”和“虚拟内存”.

如果玩好的旧MS-DOS,例如没有使用MMU的话,你的想法会奏效(除非使用例如DOS4GW,GO32-V2的保护模式程序)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读