Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: 4v1dy4 en 2 Enero 2023, 15:50 pm



Título: Entrada __NR_getdents de la sys_call_table del kernel
Publicado por: 4v1dy4 en 2 Enero 2023, 15:50 pm
Hola,

Contexto: Preguntaba por la funcion kallsyms_lookup_name en tema anterior ya que la estaba usando para atravesar la sys_call_table luego de investigar sobre la programacion de modulos en linux. Ahora me encuentro con un problema cuando me puse a jugar con la tabla:

El valor de la syscall __NR_getdents es 141. Sin embargo, para mi sistema (x86_64) se supone que el valor es 78 y no 141.

¿Alguien tiene idea de que pasa auqui?

(https://pbs.twimg.com/media/DOErJpDU8AASjY3.jpg)
(perdon por el tamaño del meme, busque como ajustar el tamaño y no tengo idea)


Título: Re: Entrada __NR_getdents de la sys_call_table del kernel
Publicado por: MCKSys Argentina en 2 Enero 2023, 17:21 pm
Hola!

No soy experto en kernel de linux; pero en windows los valores de las syscalls cambian con las versiones. Imagino que en linux pasa lo mismo...

Saludos!


Título: Re: Entrada __NR_getdents de la sys_call_table del kernel
Publicado por: 4v1dy4 en 3 Enero 2023, 15:10 pm
Hola, gracias por contestar.

Linux funciona diferente.

Citar
[...] Each system call has a fixed number. Linux persistently guarantees backward compatibility, thus once a number was assigned to a system call it will never change. Ever. The numbers differ between int $0x80 and syscall ! [...]

La pregunta viene a caso por algo que vi en un modulo del kernel (lkm):

Código
  1. #ifndef __NR_getdents
  2. #define __NR_getdents 141
  3. #endif

Para empezar, no se como la syscall podria no estar definida... pero bueno.