Pergunta

Eu estou tentando implementar uma função para Backtrace um processo de espaço do usuário caiu no kernel. Uma vez que, eu estou trabalhando no Kernel, eu não tenho o luxo de qualquer bibliotecas e função backtrace fornecido não suporta MIPS arquitetura. Eu só estou querendo saber se eu pode emular o GDB faz. A versão do kernel é 2.6.21.

Foi útil?

Solução

Eu acho que você pode fazer referência a oprofile de implementação.

uso Oprofile frame-pointer para obter o infomation rastreamento regressivo, por isso requer as aplicações do espaço do usuário e suas bibliotecas relacionados todos construídos com frame-pointer habilitado ( "- FNO-omitir-frame-pointer" opção).

Outra maneira é que se os aplicativos do usuário contém depuração infomation, você pode precisar verificar ANÃO infomation do aplicativo do usuário, o anão quadro chamada infomation proides o depurador com infomation o suficiente sobre como uma função chamada, de modo que possa localizar cada um dos argumentos para a função, localize a armação chamada atual e localize o quadro de chamada para o infomation chamando.

Se você quiser simples rastreamento do infomation rastreamento regressivo sem "frame-pointer" suportado ou qualquer infomation debug, então você tem que verificar instrução MIPS do aplicativo do usuário, percorrer contexto da criança (SP, IP, RP) coisas para obter contexto pai (SP, IP, RP) pela MIPS especificação ABI, isso é um pouco complicado e demorado uma vez que você tem que muitos instrução desmontar na memória, mas funciona não é mau. Por exemplo, para muitos routie, há uma "sp add, sp, -32" como instrução no implorando, e você vai saber que o parent'sp é sp atual mais 32.

A segunda e terceira maneira que você tem que implementá-lo desde que você trabalhar no kernel.

Outras dicas

O arquivo central é em ELF formato . Este é um padrão, que está disponível em muitos web site apenas um google distância.

No entanto, este formato de arquivo é não-trival. Muita peculiaridades e bits. Qualquer pessoa razoável deve usar uma biblioteca parte 3. Se você realmente quer fazer isso, comece com libelf e readelf. e deseja-se boa sorte.

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