Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LaiaxanIV en 1 Abril 2016, 17:37 pm



Título: Frame y dirección de memoria.
Publicado por: LaiaxanIV en 1 Abril 2016, 17:37 pm
Código:
   int f = alloc_frame();
   if(f == -1) return -1;
    copy_data((unsigned int)f<<12,0x00,4096);

alloc_frame() devuelve el numero de frame que está libre, sabiendo que el frame es de 4096B, necesito copiar eso a la pos 0x00 de memoria.

Código:
void copy_data(void *start, void *dest, int size)
Esta es la cabecera de copy_data.

Alguna idea de como lo puedo hacer? Me da un page_fault si pongo como dirección a copiar f*4096. Si pongo a mano la dirección me funciona perfectamente.


Título: Re: Frame y dirección de memoria.
Publicado por: AlbertoBSD en 1 Abril 2016, 19:12 pm
El destino 0x0 no es escribible


Título: Re: Frame y dirección de memoria.
Publicado por: LaiaxanIV en 1 Abril 2016, 19:26 pm
Código:
allocate_DIR((struct task_struct*)child);
page_table_entry * PTc = get_PT((struct task_struct*)child);
page_table_entry * PTd = get_PT((struct task_struct*)dad);
 
 
for(i = 0; i < 256+8+20;++i){
    set_ss_pag(PTc, i,get_frame(PTd,i));
}
   
for( i = 264; i < 264+20; ++i){
    int f = alloc_frame(); //Agafem el frame lliure
    if(f == -1) return -5;
    set_ss_pag(PTd, (unsigned)i+500,f); //Assignem a la taula de pàgines del pare la traducció.
    set_ss_pag(PTc,(unsigned)i,f);          //Igualment per al fill.
   copy_data(((unsigned int)(get_frame(PTd,i)<<12)),((unsigned int)(f)<<12),4096);
  }

Así es el código, el error está en el segundo parametro que nos da page fault.