2009-04-27 9 views
6

Me gustaría agregar una nueva bandera a un archivo elf. Esta bandera debería estar disponible en el kernel en el descriptor del proceso. Mi primera idea fue usar libelf, pero lamentablemente parece haber un error en Ubuntu. Elfedit probablemente habría sido una buena herramienta, pero no he encontrado una versión para Linux, en particular Ubuntu.Modifying elf file

Por lo tanto, me pregunto si alguien me puede sugerir si hay alguna otra herramienta útil por ahí para agregar una bandera personalizada a un archivo elf?

Muchas gracias por su ayuda!

+0

¿Qué error encontraste en libelf? –

+0

En el archivo incluido en type.c: 3: /usr/include/libelf.h:98: error: especificador-calificador-lista esperado antes de 'off64_t' ... Más información se puede encontrar aquí: https://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

Respuesta

2

Las personas que pueden modificar el núcleo para aprovechar la nueva marca probablemente no pregunten cómo agregar la marca a las bibliotecas ELF.

Entonces, ¿cómo piensas que el kernel use este nuevo indicador? ¿Cuál es el propósito de la bandera?

Dado que está agregando al estándar libelf, ¿no puede corregir el error de Ubuntu y hacerles saber que lo ha hecho (ponga la solución a su disposición, aunque probablemente necesiten volver a transmitirla? arriba de la cadena).

+0

Sí, tienes toda la razón. Si fuera un hacker de Kernel adecuado, esta sería una tarea sencilla. Lamentablemente, estoy empezando con algunos trabajos prácticos sobre Kernel. Básicamente, quiero especificar un indicador en el archivo ELF que le dice al kernel que una aplicación necesita algún "tratamiento especial". Este tratamiento especial debería ocurrir durante los cambios de contexto, y allí me gustaría saber si la tarea que se ha cambiado tiene esta bandera personalizada en el archivo ELF. En otras palabras, tengo 2 tareas (1) agregar una bandera personalizada a la correspondiente ejecutable (2) hacer que esta bandera personalizada esté disponible para Kernel –

1

Mire ELFIO library. Contiene ejemplos WriteObj y Writer. Al usar la biblioteca, podrá crear y/o modificar archivos binarios ELF.

+0

Me gusta mucho la biblioteca y trabajé los últimos días con ella (tratando de convertirla en biblioteca). Obtuve todas las fuentes con plantillas y macros convertidos (también conocidos como split en declaraciones y definiciones), aunque ahora la lib está fallando (lol). Bueno, ¿podrías considerarte una biblioteca "real"? – lama12345

0

(aunque vieja pregunta, pero para referencia Les escribo respuesta basada en mi propia experiencia)

me sugieren para leer archivo ELF en la estructura de la memoria, realizar cambios en las banderas y la memoria del proceso de carga con su estructura en memoria. Este método necesitará menos esfuerzo en comparación con la corrección de errores. Para comenzar, consulte el archivo elf.c para elf, encabezado del programa, encabezados de sección struct. puede leer el encabezado del archivo en su estructura, que debe tener tres miembros de estructura para elf, programa, sección. Comienza a leer en tu estructura desde el encabezado de duende. a continuación, lea el encabezado del programa en el desplazamiento dado en el encabezado de duende (iterativamente para todos los encabezados de programa). De la misma manera puedes leer todas las secciones a través de los encabezados de las secciones. Encapsulando 3 encabezados struct en su propia estructura también le da la oportunidad de tener datos adicionales necesarios en su otro miembro de la estructura.