vmlinux ELF encontrar compensações para os membros de uma dada estrutura

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

  •  06-07-2019
  •  | 
  •  

Pergunta

No kernel Linux, eu preciso encontrar os deslocamentos de variáveis ??de membro de um struct que é usado. Por exemplo, para o init_task que é do tipo task_struct, eu gostaria que os deslocamentos de seu pid e tarefas.

Eu só tenho a vmlinux presente para isso. I pode se referir ao código do kernel de código aberto, mas pode ser diferente do de construção que eu tenho.

É possível obter os deslocamentos sem a fonte?

EDIT:. O vmlinux é para ARM, e eu nem sempre pode ser capaz de executar código C no dispositivo de destino

Foi útil?

Solução

O tamanho eo layout das estruturas está presente na informação de depuração dos arquivos de objeto compilados (se você compilar com -g e não fazer strip).

pahole ( aka "poke-a-buraco", empacotado como dev-util/dwarves no Gentoo) lê informações de depuração do anão de um objeto para enviar informações sobre "buracos" nas estruturas -. que pode ser um bom ponto de partida para você

Outras dicas

6,47 offsetof

implementos CCG para C e C ++ uma extensão sintática para implementar o offsetof macro.

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

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

Esta extensão é suficiente para que

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

é uma definição adequada do offsetof macro. Em C ++, tipo pode ser dependente. Em ambos os casos, o membro pode ser constituída por um único identificador, ou uma sequência de acessos membro e referências de matriz.

encontrou outra solução com o braço-EABI-gdb -. Eu posso fazer impressão e init_task e imprimir & init_task.pid ea diferença é o deslocamento

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top