vmlinux ELF encuentra compensaciones para miembros de una estructura dada

StackOverflow https://stackoverflow.com/questions/1415745

  •  06-07-2019
  •  | 
  •  

Pregunta

En el kernel de Linux, necesito encontrar las compensaciones de las variables miembro de una estructura que se utiliza. Por ejemplo, para la init_task que es de tipo task_struct, me gustaría los desplazamientos de sus pid y tareas.

Solo tengo el vmlinux presente para esto. Puedo referirme al código del núcleo de código abierto, pero puede diferir de la compilación que tengo.

¿Es posible obtener las compensaciones sin la fuente?

EDITAR: vmlinux es para ARM, y es posible que no siempre pueda ejecutar el código C en el dispositivo de destino.

¿Fue útil?

Solución

El tamaño y el diseño de las estructuras está presente en la información de depuración de los archivos de objetos compilados (si compila con -g y no strip ).

pahole ( también conocido como "poke-a-hole", empaquetado como dev-util / dwarves en Gentoo) lee la información de depuración DWARF de un objeto para generar información sobre " agujeros " en estructuras, puede ser un buen punto de partida para usted.

Otros consejos

6.47 Offsetof

GCC implementa para C y C ++ una extensión sintáctica para implementar el offsetof macro.

 primary:
         "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"

 offsetof_member_designator:
           identifier
         | offsetof_member_designator "." identifier
         | offsetof_member_designator "[" expr "]"

Esta extensión es suficiente para que

 #define offsetof(type, member)  __builtin_offsetof (type, member)

es una definición adecuada de la compensación de macro. En C ++, el tipo puede ser dependiente. En cualquier caso, el miembro puede constar de un único identificador o una secuencia de accesos de miembros y referencias de matriz.

Encontré otra solución con arm-eabi-gdb: puedo imprimir & amp; init_task e print & amp; init_task.pid y la diferencia es el desplazamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top