当前位置: 技术问答>linux和unix
汇编调用fork的问题
来源: 互联网 发布时间:2015-09-07
本文导语: 今天偶然想到一个问题,fork调用后返回两次,一次在子进程一次在父进程,我想知道,如果用汇编来调用fork怎么做呢? 当然操作系统在fork完成后知道把他们做两个进程对待,因此各自对寄存器等的操作是进程调度...
今天偶然想到一个问题,fork调用后返回两次,一次在子进程一次在父进程,我想知道,如果用汇编来调用fork怎么做呢?
当然操作系统在fork完成后知道把他们做两个进程对待,因此各自对寄存器等的操作是进程调度考虑的了,那么假如在编写汇编程序时,怎么去分支两个呢?(test?或者cmp?)
当然操作系统在fork完成后知道把他们做两个进程对待,因此各自对寄存器等的操作是进程调度考虑的了,那么假如在编写汇编程序时,怎么去分支两个呢?(test?或者cmp?)
|
0x400eca60 : mov $0x2,%eax
0x400eca65 : int $0x80
0x400eca67 : cmp $0xfffff001,%eax
0x400eca6c : jae 0x400eca73
0x400eca6e : ret
0x400eca6f : mov (%esp,1),%ebx
0x400eca72 : ret
0x400eca73 : push %ebx
0x400eca74 : call 0x400eca6f
0x400eca79 : add $0x7b6db,%ebx
0x400eca7f : xor %edx,%edx
0x400eca81 : sub %eax,%edx
0x400eca83 : push %edx
0x400eca84 : call 0x4004df00
0x400eca89 : pop %ecx
0x400eca8a : pop %ebx
0x400eca8b : mov %ecx,(%eax)
0x400eca8d : or $0xffffffff,%eax
0x400eca90 : jmp 0x400eca6e
0x400eca65 : int $0x80
0x400eca67 : cmp $0xfffff001,%eax
0x400eca6c : jae 0x400eca73
0x400eca6e : ret
0x400eca6f : mov (%esp,1),%ebx
0x400eca72 : ret
0x400eca73 : push %ebx
0x400eca74 : call 0x400eca6f
0x400eca79 : add $0x7b6db,%ebx
0x400eca7f : xor %edx,%edx
0x400eca81 : sub %eax,%edx
0x400eca83 : push %edx
0x400eca84 : call 0x4004df00
0x400eca89 : pop %ecx
0x400eca8a : pop %ebx
0x400eca8b : mov %ecx,(%eax)
0x400eca8d : or $0xffffffff,%eax
0x400eca90 : jmp 0x400eca6e
|
两个进程当然是拥有两个不同的进程空间喽(这个就是Unix和Linux以前最惨的地方……),这样的话根本就不会出现楼主说的那种什么区分,本来就不在一个空间,用不着区分,中间全都是进程调度了……
这个也是导致Unix/Linux下乱七八糟各种进程间通讯手段层出不穷的原因……
这个也是导致Unix/Linux下乱七八糟各种进程间通讯手段层出不穷的原因……