Programación General > ASM (Ensamblador)

 Program headers de un ELF

(1/2) > >>

clicklose:
A ver, no se si me podrán responder esto. Perdón si es que va en otro foro, pero imagino que quienes puedan responder son las personas mas metidas en assembler

Los ficheros ELF de GNU/Linux tienen una estructura de tablas para el Program Header llamadas Program Headers Tables o PHT. Según ciertos campos de estas tablas se describen qué secciones deben cargarse en memoria, los permisos que deben tener, offset's y demás datos importantes.
El primer campo de estas estructuras es p_type y toma valores
  Name             Value
  ====             =====
  PT_NULL              0
  PT_LOAD              1
  PT_DYNAMIC         2
  PT_INTERP            3
  PT_NOTE              4
  PT_SHLIB              5
  PT_PHDR              6
  PT_LOPROC   0x70000000
  PT_HIPROC      0x7fffffff

Mi duda es la siguiente, los segmentos text y data son de tipo PT_LOAD. Mi planteo es, si yo creo un nuevo segmento de tipo 1 y redirijo el entry point a una dirección de ese segmento, se daría que todo el text se cararía ese nuevo segmento que creo?
No se si quedó entendible mi pregunta :S . Pero mi idea es saber cómo decir qué cosas se deben cargar en cada segmento si creo alguno nuevo.

Saludos

m0skit0:

--- Cita de: "clicklose" ---Mi planteo es, si yo creo un nuevo segmento de tipo 1 y redirijo el entry point a una dirección de ese segmento, se daría que todo el text se cararía ese nuevo segmento que creo?
--- Fin de la cita ---
No entiendo muy bien tu pregunta, pero si te refieres a que si se ejecutaría tu código, la respuesta es sí.

clicklose:
lo que no termino de entender es que esta asociado a cada entrada del program header
La estructura según he leído es: (para un elf ejecutable)
ELF Header
Programs Header
Segmento 1 (creo q es el text)
Segmento 2 (creo q es el data)
Sections Headers
Section 1
.
.
.
Section n

Mi pregunta es: Cómo sabe el SO a qué se relaciona cada entrada del program header? Si creo una tabla mas en el PH y la hago p_type LOAD, cómo indico qué es lo que debe cargarse allí? Para eso sirven las section headers?

Perdón por el lío, es que no logro resolver esa duda :S

m0skit0:
Con las cabeceras de sección (section headers). Tuve que hacer un cargador de ELFs para la PSP (la consola) para un proyecto de hacking, si quieres échale un vistazo, así ves cómo funciona. También tienes bastante información en el fichero elf.h. Aquí también tienes una explicación.

Saludos

clicklose:
Bueno, a ver. Primero que nada quiero decir que todo lo que se ve en internet sobre las especificaciones ELF está algo errado o al menos incompleto

Creo que ya entendí como funciona todo, y me parece que tampoco son los section headers los responsables de que todo se cargue bien, porque de hecho probé borrarlos con el bless y el ejecutable anda igual, sucede que lo que hace que se cargue bien son dos parámetros de PHT que serían el offset y el filesz.
Tengo que programar el virus, así que cuando termine si todo funciona bien pongo mi conclusión a ver si coincidimos.
Te doy mil gracias por la ayuda

Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa