Estoy tratando de copiar un valor especial de proceso en ejecución actual a otro proceso especialmente, ejecutándose en otra terminal.
Estoy recibiendo una falla de segmentación.
Pero no puedo entender el motivo correctamente porque estoy usando el ensamblaje en línea.
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"::); }
Primero ejecuté p1.c
que me dio el puntero de pila actual 0xbfda8008
. Luego lo usé en p2.c
, lo que me dio una Segmentation fault
.
Solo estoy escribiendo un valor en esp. ¿Por qué me sale este fallo? Necesito una pequeña pista... ;-(
Esto no funcionará como se esperaba. La memoria de cada proceso está aislada de los otros procesos, y el mapa de memoria que ve cada proceso es virtual. Entonces, incluso si dos procesos pueden tener memoria disponible en la misma dirección, no significa que la memoria física real sea la misma.
Esto es lo que separa los sistemas operativos y el hardware "modernos" de los "antiguos". Puede buscar sobre "mmu", "unidad de protección de memoria" y "memoria virtual" en su motor de búsqueda favorito.
Su idea funcionaría si jugara en el viejo MS-DOS, por ejemplo, que no usara la MMU (a menos que juegue con programas en modo protegido que usen, por ejemplo, DOS4GW, GO32-V2)