Obtener nombres de ficheros en GNU/Linux desde asm
Publicado por pepl (4 intervenciones) el 20/01/2011 04:30:55
Buenas noches,
intento obtener el nombre de un fichero relacionado con el inodo obtenido en una búsqueda sys_readdir y abierto por la llamada sys_open.
Cuando obtengo el dirent encuentro el string d_name, pero no soy capaz de calcular en el código el tamaño del mismo pues, aunque tengo los campos de dirent, no consigo prever el tamaño del nombre.
struct dirent{
long d_ino; //4 bytes
off_t d_off; //4 bytes
unsigned short d_reclen; //2 bytes
char d_name[1];
};
En principio la cosa parece clara: restar 10 bytes al contenido de d_reclen (longitud de dirent), pero no me da el resultado esperado en ningún caso.
mov edx,[ecx+8] ;copiamos el valor situado en el offset de d_reclen sobre edx
sub edx,0ah ;restamos 10 para obtener el valor del tamaño del string con el nombre
lea ecx,[ecx+0ah];apuntamos al nombre
;seguimos con los demás valores de sys_write para escribirlo
*Suponiendo en ecx un puntero a struct dirent
Si alguien puede aportar una ayuda, ¡muchas gracias, compañeros!
intento obtener el nombre de un fichero relacionado con el inodo obtenido en una búsqueda sys_readdir y abierto por la llamada sys_open.
Cuando obtengo el dirent encuentro el string d_name, pero no soy capaz de calcular en el código el tamaño del mismo pues, aunque tengo los campos de dirent, no consigo prever el tamaño del nombre.
struct dirent{
long d_ino; //4 bytes
off_t d_off; //4 bytes
unsigned short d_reclen; //2 bytes
char d_name[1];
};
En principio la cosa parece clara: restar 10 bytes al contenido de d_reclen (longitud de dirent), pero no me da el resultado esperado en ningún caso.
mov edx,[ecx+8] ;copiamos el valor situado en el offset de d_reclen sobre edx
sub edx,0ah ;restamos 10 para obtener el valor del tamaño del string con el nombre
lea ecx,[ecx+0ah];apuntamos al nombre
;seguimos con los demás valores de sys_write para escribirlo
*Suponiendo en ecx un puntero a struct dirent
Si alguien puede aportar una ayuda, ¡muchas gracias, compañeros!
Valora esta pregunta


0