Monday 4 February 2019

Objdump desmontar braço binário opções


Estou tentando desmontar um objeto construído para ARM com gcc. Infelizmente, objdump está tentando adivinhar se o código é ARM e Thumb, e está ficando errado: ele acha que meu código é polegar quando o seu realmente ARM. Eu vejo que objdump tem uma opção para forçá-lo a interpretar todas as instruções como Thumb (-Mforce-thumb), mas não tem um para forçar o modo ARM. Isso parece uma omissão realmente estranha para mim e está prejudicando seriamente minha capacidade de obter Trabalho feito (Im em um dispositivo embutido e meu único meio de depuração é olhar para a desmontagem). Ive tentou várias abordagens, incluindo a tentativa de dizer objdump para usar uma arquitetura ARM que não suporta Polegar, mas nada parece funcionar. Qualquer idéia (E sim, eu sei que as instruções são realmente ARM.) Perguntou Aug 25 11 at 16:43 Isso soa como um bug em compilador ou objdump. Normalmente, os símbolos devem ser marcados corretamente se eles são polegar ou braço e desmontado em conformidade. Dito isto, há algumas coisas que você pode tentar: interpretar o arquivo como binário simples (-b binário - D) - isso desabilitará a verificação de símbolos e desmontará todo o arquivo como ARM. Desvantagem: muito lixo na saída, sem bons endereços. Use o IDA Pro. Mesmo se adivinhar incorretamente, você sempre pode substituir sua decisão. Além disso, é um ambiente de desmontagem muito melhor :) Respondeu 25 de agosto às 16:56 Preciso da informação do símbolo, então eu sei o que eu estou olhando, então, usando o binário em bruto não cortou, eu tenho medo. O arquivo em questão tem informações de depuração para que as informações de marcação devem estar lá. O meu processo de compilação é complicado, mas envolve gcc em todas as idéias, o que pode estar eliminando a marcação do símbolo ndash David Atendido 26 de agosto 11 às 10:42 É difícil dizer o que é exatamente o problema. Imprima o conteúdo da tabela de símbolos e dê uma olhada em printinsn (braço) em arm-dis. c. Talvez isso lhe dê algumas idéias. Ndash Igor Skochinsky Aug 26 11 at 13: 30objdump (1) - Página do manual do Linux Descrição objdump exibe informações sobre um ou mais arquivos de objeto. As opções controlam as informações específicas a serem exibidas. Esta informação é útil principalmente para os programadores que estão trabalhando nas ferramentas de compilação, ao contrário de programadores que apenas querem seu programa para compilar e trabalhar. Objfile. São os arquivos objeto a serem examinados. Quando você especifica arquivos, objdump mostra informações sobre cada um dos arquivos objeto membro. As formas longas e curtas de opções, mostradas aqui como alternativas, são equivalentes. Pelo menos uma opção da lista - a, - d, - D, - e, - f, - g, - G, - h, - H, - p, - r, - R, - s, - S, - T, - T, - V, - x deve ser dado. - a --archive-header Se algum dos arquivos objfile forem arquivos, exiba as informações do cabeçalho do arquivo (em um formato semelhante ao ls - l). Além da informação que você poderia alistar com ar tv. Objdump - a mostra o formato do arquivo objeto de cada membro do arquivo. --adjust-vma offset Ao despejar informações, primeiro adicione o deslocamento a todos os endereços de seção. Isso é útil se os endereços de seção não correspondem à tabela de símbolos, o que pode acontecer ao colocar seções em endereços particulares ao usar um formato que não pode representar endereços de seção, como a. out. - b bfdname --target bfdname Especifique se o formato de código de objeto dos arquivos de objeto é bfdname. Esta opção pode não ser necessária objdump pode reconhecer automaticamente muitos formatos. Por exemplo, exibe informações resumidas dos cabeçalhos de seção (-h) de fu. o. Que é explicitamente identificado (-m) como um arquivo de objeto VAX no formato produzido por compiladores Oasys. Você pode listar os formatos disponíveis com a opção - i. - C --demangle style Decode (demangle) nomes de símbolo de nível inferior em nomes de nível de usuário. Além de remover qualquer sublinhado inicial prepended pelo sistema, isso torna os nomes das funções C legíveis. Diferentes compiladores têm diferentes estilos de manipulação. O argumento opcional de estilo de desmembramento pode ser usado para escolher um estilo de demarcação apropriado para o seu compilador. - g --debugging Mostrar informações de depuração. Isso tenta analisar STABS e informações de formato de depuração IEEE armazenadas no arquivo e imprimi-lo usando um C como sintaxe. Se nenhum desses formatos for encontrado, esta opção recairá na opção - W para imprimir quaisquer informações DWARF no arquivo. - e --debugging-tags Like - g. Mas a informação é gerada em um formato compatível com a ferramenta ctags. - d --disassemble Exibe os mnemônicos do montador para as instruções da máquina de objfile. Esta opção apenas desmagnete as seções que devem conter instruções. - D --disassemble-all Like - d. Mas desmontar o conteúdo de todas as seções, não apenas aqueles esperados para conter instruções. Se o alvo for uma arquitetura ARM esse switch também tem o efeito de forçar o desassemblador a decodificar partes de dados encontradas em seções de código como se fossem instruções. --prefix-addresses Ao desmontar, imprima o endereço completo em cada linha. Este é o formato de desmontagem mais antigo. - EB - EL --endian Especifique o endianness dos arquivos de objeto. Isso afeta somente a desmontagem. Isso pode ser útil ao desmontar um formato de arquivo que não descreve informações de endianness, como S-records. - f --file-headers Exibe informações resumidas do cabeçalho geral de cada um dos arquivos objfile. - F --file-offsets Ao desmontar seções, sempre que um símbolo é exibido, também exibe o deslocamento do arquivo da região de dados que está prestes a ser despejado. Se os zeros estiverem sendo ignorados, então, quando a desmontagem for retomada, informe ao usuário quantos zeros foram ignorados eo deslocamento do arquivo do local de onde a desmontagem é retomada. Ao despejar seções, exiba o deslocamento do arquivo do local de onde o despejo é iniciado. --file-start-context Especifique que, ao exibir a codificação de origem interligada (que assume - S) de um arquivo que ainda não foi exibido, estenda o contexto para o início do arquivo. - h --section-headers --headers Exibe informações de resumo dos cabeçalhos de seção do arquivo de objeto. Os segmentos de arquivo podem ser realocados para endereços não padrão, por exemplo, usando o - Ttext. - Tdata. Ou - Tbss opções para ld. No entanto, alguns formatos de arquivo de objeto, como a. out, não armazenam o endereço inicial dos segmentos de arquivo. Nessas situações, embora ld replace as seções corretamente, usar objdump - h para listar os cabeçalhos da seção do arquivo não pode mostrar os endereços corretos. Em vez disso, ele mostra os endereços habituais, que estão implícitos para o destino. - H --help Imprima um resumo das opções para objdump e sair. - i --info Exibe uma lista mostrando todas as arquiteturas e formatos de objeto disponíveis para especificação com - b ou - m. - j name --section name Exibe informações somente para o nome da seção. - l --line-numbers Rotule a exibição (usando informações de depuração) com o nome do arquivo e os números das linhas de origem correspondentes ao código do objeto ou relocs mostrados. Útil somente com - d. - D. Ou - r. - m machine --architecture Especifica a arquitetura a ser usada ao desmontar arquivos de objeto. Isso pode ser útil ao desmontar arquivos de objeto que não descrevem informações de arquitetura, como registros S. Você pode listar as arquiteturas disponíveis com a opção - i. Se o alvo for uma arquitetura ARM, essa opção terá um efeito adicional. Restringe a desmontagem apenas às instruções suportadas pela arquitetura especificada pela máquina. Se for necessário usar esta opção, porque o arquivo de entrada não contém nenhuma informação de arquitetura, mas também é desejado desmontar todas as instruções use - marm. - M opções --disassembler-opções opções Passar informações específicas de destino para o desmontador. Apenas suportado em alguns alvos. Se for necessário especificar mais do que uma opção desassembladora, várias opções - M podem ser usadas ou podem ser colocadas juntas em uma lista separada por vírgulas. Se o alvo for uma arquitetura ARM, este parâmetro pode ser usado para selecionar qual conjunto de nomes de registros é usado durante o desmon - selador. Especificando - M reg-names-std (o padrão) selecionará os nomes de registro conforme usado na documentação do conjunto de instruções do ARM, mas com o registro 13 chamado sp, o registro 14 chamado lr e o registro 15 chamado pc. Especificar - M reg-names-apcs selecionará o conjunto de nomes usado pelo padrão de chamada de procedimento ARM, enquanto especificando - M reg-names-raw, apenas usará r seguido do número de registro. Há também duas variantes no esquema de nomeação de registro APCS habilitado por - M reg-names-atpcs e - M reg-names-special-atpcs que usam as convenções de nomeação ARMThumb Procedure Call Standard. (Ou com os nomes normais do registro ou os nomes especiais do registro). Esta opção também pode ser usada para arquiteturas ARM para forçar o desmontador a interpretar todas as instruções como instruções Thumb usando o switch --disassembler-optionsforce-thumb. Isso pode ser útil ao tentar desmontar o código de polegar produzido por outros compiladores. Para o x86, algumas das funções duplicação de opções da opção - m, mas permitem controle de granulação mais fino. Várias seleções do seguinte podem ser especificadas como uma seqüência de caracteres separados por vírgula. X86-64. I386 e i8086 selecionam desmontagem para a arquitetura fornecida. Intel e att selecione entre o modo sintaxe Intel e o modo de sintaxe ATampT. Intel-mnemonic e att-mnemonic selecionam entre o modo mnemônico de Intel eo modo mnemônico de ATampT. Intel-mnemonic implica intel e att-mnemonic implica att. Addr64. Addr32. Addr16. Data32 e data16 especificam o tamanho de endereço e o tamanho de operando padrão. Essas quatro opções serão substituídas se x86-64. I386 ou i8086 aparecem mais tarde na cadeia de opção. Por último, sufixo. Quando no modo ATampT, instrui o desassemblador para imprimir um sufixo mnemônico mesmo quando o sufixo poderia ser inferida pelos operandos. Para PowerPC, booke controla a desmontagem de instruções BookE. 32 e 64 selecionam PowerPC e PowerPC64 desmontagem, respectivamente. E300 seleciona a desmontagem para a família e300. 440 seleciona a desmontagem para o PowerPC 440. ppcps seleciona a desmontagem para as instruções individuais emparelhadas do PPC750CL. Para MIPS. Esta opção controla a impressão de nomes mnemônicos de instruções e nomes de registros em instruções desmontadas. Podem ser especificadas múltiplas seleções a partir do seguinte como uma seqüência separada por vírgulas e as opções inválidas são ignoradas: sem alias. Imprima a mnemônica da instrução bruta em vez de alguma mísseis de instruções pseudo. I. e. Print daddu ou ou em vez de mover, sll em vez de nop, etc. gpr-names ABI Imprimir GPR (registro de uso geral) nomes como apropriado para o ABI especificado. Por padrão, os nomes GPR são selecionados de acordo com o ABI do binário sendo desmontado. Fpr-names ABI Imprimir FPR (floating-point register) nomes como apropriado para o ABI especificado. Por padrão, os números FPR são impressos em vez de nomes. Cp0-names ARCH Print CP0 (coprocessador coprocessador de controle do sistema 0) registra nomes conforme apropriado para a CPU ou arquitetura especificada por ARCH. Por padrão, os nomes de registro CP0 são selecionados de acordo com a arquitetura ea CPU do binário sendo desmontada. Hwr-names ARCH Imprimir HWR (registro de hardware, usado pela instrução rdhwr) nomes apropriados para a CPU ou arquitetura especificada por ARCH. Por padrão, os nomes HWR são selecionados de acordo com a arquitetura ea CPU do binário sendo desmontada. Reg-names ABI Imprimir nomes GPR e FPR como apropriado para o ABI selecionado. Reg-names ARCH Imprime nomes de registro específicos da CPU (nomes CP0 e HWR) conforme apropriado para a CPU ou arquitetura selecionada. Para qualquer uma das opções listadas acima, ABI ou ARCH podem ser especificados como numéricos para ter números impressos em vez de nomes, para os tipos selecionados de registros. Você pode listar os valores disponíveis de ABI e ARCH usando a opção --help. Para VAX. Você pode especificar endereços de entrada de função com - M entrada: 0xf00ba. Você pode usar isso várias vezes para desmontar corretamente os arquivos binários VAX que não contêm tabelas de símbolos (como ROM dumps). Nesses casos, a máscara de entrada de função seria de outra forma descodificada como instruções do VAX, o que provavelmente levaria o resto da função a ser desmontada erroneamente. - p --private-headers Imprime informações que são específicas para o formato de arquivo de objeto. A informação exata impressa depende do formato do arquivo objeto. Para alguns formatos de arquivo de objeto, nenhuma informação adicional é impressa. - r --reloc Imprime as entradas de realocação do arquivo. Se usado com - d ou - D. As deslocalizações são impressas intercaladas com a desmontagem. - R --dynamic-reloc Imprime as entradas de realocação dinâmica do arquivo. Isso só é significativo para objetos dinâmicos, como certos tipos de bibliotecas compartilhadas. Quanto a - r. Se usado com - d ou - D. As deslocalizações são impressas intercaladas com a desmontagem. - s --full-contents Exibe o conteúdo completo de qualquer seção solicitada. Por padrão todas as seções não vazias são exibidas. - S - fonte Exibe o código-fonte entremeado com desmontagem, se possível. Implica - d. Prefixo prefix Especifica prefixo para adicionar aos caminhos absolutos quando usado com - S. --prefix-strip level Indica quantos nomes de diretórios iniciais devem ser removidos dos caminhos absolutos hardwired. Não tem efeito sem prefixo prefixo. - show-raw-insn Ao desmontar as instruções, imprima as instruções em hexadecimal, bem como em forma simbólica. Este é o padrão, exceto quando - prefixo-endereços é usado. --no-show-raw-insn Ao desmontar instruções, não imprima os bytes de instrução. Este é o padrão quando --prefix-addresses é usado. --insn-largura largura Exibir bytes de largura em uma única linha ao desmontar instruções. - WlLiaprmfFsoR --dwarfrawline, decodedline, info, abbrev, pubnames, aranges, macro, quadros, frames-interp, str, loc, Ranges Exibe o conteúdo das seções de depuração no arquivo, se houver algum. Se uma das letras ou palavras opcionais segue o interruptor, então apenas os dados encontrados nessas seções específicas serão despejados. - G - stabs Exibe o conteúdo completo de qualquer seção solicitada. Exibe o conteúdo das seções. stab e. stab. index e. stab. excl de um arquivo ELF. Isso só é útil em sistemas (como o Solaris 2.0) no qual as entradas de tabela de símbolos de depuração do. stab são transportadas em uma seção ELF. Na maioria dos outros formatos de arquivo, as entradas da tabela de símbolos de depuração são intercaladas com símbolos de vinculação e são visíveis na saída --syms. --start-address address Inicia a exibição de dados no endereço especificado. Isso afeta a saída do - d. - r e - s opções. --stop-address address Parar de exibir dados no endereço especificado. Isso afeta a saída do - d. - r e - s opções. - t --syms Imprime as entradas da tabela de símbolos do arquivo. Isso é semelhante às informações fornecidas pelo programa nm, embora o formato de exibição é diferente. O formato da saída depende do formato do arquivo que está sendo despejado, mas há dois tipos principais. A aparência é a seguinte: onde o número dentro dos colchetes é o número da entrada na tabela de símbolos, o número sec é o número da seção, o valor fl são os bits de sinalização de símbolos, o número ty é o tipo de símbolos, o scl Número é a classe de armazenamento de símbolos eo valor nx é o número de entradas auxiliares associadas ao símbolo. Os dois últimos campos são o valor dos símbolos e seu nome. O outro formato de saída comum, geralmente visto com arquivos baseados em ELF, tem a seguinte aparência: Aqui o primeiro número é o valor dos símbolos (às vezes referido como seu endereço). O próximo campo é na verdade um conjunto de caracteres e espaços indicando os bits de sinalizador que são definidos no símbolo. Esses caracteres são descritos abaixo. A seguir está a seção com a qual o símbolo está associado ou ABS se a seção é absoluta (ou seja, não conectado a qualquer seção), ou UND se a seção é referenciada no arquivo sendo despejado, mas não definido lá. Depois que o nome da seção vem outro campo, um número, que para símbolos comuns é o alinhamento e para outro símbolo é o tamanho. Finalmente, o nome dos símbolos é exibido. Os caracteres de sinalizador são divididos em 7 grupos da seguinte forma: l O símbolo é um local (l), global (g), global único (u), nem global nem local (um espaço) ou global e local (). Um símbolo não pode ser nem local nem global por uma variedade de razões, e. Porque é usado para depuração, mas provavelmente é uma indicação de um erro se é sempre local e global. Os símbolos globais exclusivos são uma extensão GNU para o conjunto padrão de ligações de símbolos ELF. Para esse símbolo, o vinculador dinâmico irá certificar-se de que, em todo o processo, há apenas um símbolo com esse nome e tipo de uso. O símbolo é fraco (w) ou forte (um espaço). O símbolo denota um construtor (C) ou um símbolo comum (um espaço). O símbolo é um aviso (W) ou um símbolo normal (um espaço). Um nome de símbolo de aviso é uma mensagem a ser exibida se o símbolo que segue o símbolo de aviso é sempre referenced. Linux Objdump Comando Exemplos (Desmonte um arquivo binário) O comando Objdump no Linux é usado para fornecer informações completas sobre arquivos de objeto. Este comando é usado principalmente pelos programadores que trabalham em compiladores, mas ainda é uma ferramenta muito útil para programadores normais também quando se trata de depuração. Neste artigo, vamos entender como usar o comando objdump através de alguns exemplos. A sintaxe básica do objdump é: Existe um vasto leque de opções disponíveis para este comando. Vamos tentar cobrir uma boa quantidade deles neste tutorial. O arquivo binário ELF do seguinte programa C é usado em todos os exemplos mencionados neste artigo. Nota: O acima é apenas um código de teste que estava sendo usado para algum outro propósito, mas achei que era simples o suficiente para usar para este artigo. 1. Exibir o conteúdo do cabeçalho do arquivo global usando a opção - f Considere o seguinte exemplo: Então vemos que as informações relacionadas ao cabeçalho do arquivo geral foram mostradas na saída. NOTA: O formato executável utilizado nos exemplos é ELF. Para saber mais sobre isso, consulte o nosso artigo sobre o formato de arquivo ELF. Conteúdo de cabeçalho de arquivo específico de formato de objeto 2.Display usando a opção - p O exemplo a seguir imprime as informações específicas de formato de arquivo de objeto. 3. Exibir o conteúdo dos cabeçalhos de seção usando a opção - h Pode haver várias seções em um arquivo de objeto. As informações relacionadas a eles podem ser impressas usando a opção - h. Os exemplos a seguir mostram várias seções. Como você vê, há um total de 26 (somente a saída parcial é mostrada aqui). Então, vemos que as informações relacionadas a todos os cabeçalhos de seção foram impressas na saída. Na saída acima, Size é o tamanho da seção carregada, VMA representa o endereço de memória virtual, LMA representa o endereço de memória lógico, File off é este section8217s deslocado a partir do início do arquivo, Algn representa alinhamento, CONTENTS, ALLOC, LOAD , READONLY, DATA são sinalizadores que representam que uma seção específica deve ser LOADED ou READONLY etc. 4. Exibir o conteúdo de todos os cabeçalhos usando a opção - x As informações relacionadas a todos os cabeçalhos no arquivo de objeto podem ser recuperadas usando - x opção. O exemplo a seguir exibe todas as seções (somente a saída parcial é mostrada aqui): 5. Exibir o conteúdo da montagem de seções executáveis ​​usando a opção - d Considere o exemplo a seguir. O conteúdo do assembler das seções executáveis ​​(no arquivo do objeto) é exibido nesta saída (saída parcial mostrada abaixo): 6. Exibir o conteúdo do conjunto de todas as seções usando a opção - D Caso o conteúdo do conjunto de todas as seções seja necessário na saída, A opção - D pode ser usada. Considere o seguinte resultado: Então vemos que a saída relevante foi exibida. Como a saída era muito longa, então eu a cortei. Note que eu usei o comando pager para controlar a saída. 7. Exibir o conteúdo completo de todas as seções usando a opção - s Considere o seguinte exemplo: Assim, vemos que o conteúdo completo de todas as seções foi exibido na saída. 8. Exibir informações de depuração usando a opção - g Considere o seguinte exemplo: Assim, vemos que todas as informações de depuração disponíveis foram impressas na saída. 9. Exibir o conteúdo da tabela de símbolos (ou tabelas) usando a opção - t Considere o seguinte exemplo: então, verificamos que o conteúdo da tabela de símbolos foi exibido na saída. 10. Exibir o conteúdo da tabela de símbolos dinâmicos usando a opção - T Os símbolos dinâmicos são aqueles que são resolvidos durante o tempo de execução. As informações relacionadas a esses símbolos podem ser recuperadas usando a opção - D. Considere o seguinte exemplo: então, vemos que as informações relacionadas aos símbolos dinâmicos foram exibidas na saída. 11. Exibir as entradas de deslocamento dinâmico no arquivo usando a opção - R. Considere o seguinte exemplo: então, verificamos que todas as entradas de deslocamento dinâmico foram exibidas na saída. 12. Exibir a seção de interesse usando a opção - j Isso é extremamente útil quando você conhece a seção relacionada à qual a informação é necessária. A opção - j é usada neste caso. Considere o seguinte exemplo: então vemos que as informações relacionadas à seção de rodata foram exibidas acima. 13. Use o formato de desmontagem mais antigo usando a opção 8211prefix-addresses O formato mais antigo imprime o endereço completo em cada linha. Considere o seguinte exemplo: então, vemos que o endereço completo foi impresso na saída. 14. Aceitar opções de entrada de um arquivo usando a opção Se você quiser, as opções para objdump podem ser lidas de um arquivo. Isso pode ser feito usando a opção 82168217. Considere o seguinte exemplo: Neste exemplo acima, usei as opções - v e - i. Enquanto - v é usado para imprimir as informações da versão, - i é usado para fornecer formatos de objetos e arquiteturas suportados. Agora eu criei um arquivo e adicione estas duas opções lá. Execute o objdump chamando o arquivo options. txt como mostrado abaixo. Isso exibe a mesma saída que acima, pois ele está lendo as opções do arquivo de opções. txt. objdump exibe informações sobre um ou mais arquivos de objeto. As opções controlam as informações específicas a serem exibidas. Esta informação é útil principalmente para os programadores que estão trabalhando nas ferramentas de compilação, ao contrário de programadores que apenas querem seu programa para compilar e trabalhar. ObjFile. São os arquivos objeto a serem examinados. Quando você especifica arquivos, objdump mostra informações em cada um dos arquivos de objeto do membro. As formas longas e curtas de opções, mostradas aqui como alternativas, são equivalentes. Pelo menos uma opção da lista - a, - d, - D, - e, - f, - g, - G, - h, - H, - p, - P, - r, - R, - s, S, - t, - T, - V, - x deve ser dado. - a --archive-header Se qualquer um dos arquivos objfile forem arquivos, exiba as informações do cabeçalho do arquivo (em um formato semelhante a ls - l). Além das informações que você pode listar com ar tv, objdump - a mostra o formato do arquivo objeto de cada membro do arquivo. --adjust-vma offset Ao despejar informações, primeiro adicione offset para todos os endereços das seções. Isso é útil se os endereços da seção não correspondem à tabela de símbolos, o que pode acontecer ao colocar seções em determinados endereços ao usar um formato que não pode representar os endereços das seções, como a. out. - b bfdname --target bfdname Especifique se o formato de código de objeto dos arquivos de objeto é bfdname. Esta opção pode não ser necessária objdump pode reconhecer automaticamente muitos formatos. Exibe informações resumidas dos cabeçalhos de seção (-h) de fu. o. Que é explicitamente identificado (-m) como um arquivo de objeto VAX no formato produzido por compiladores Oasys. Você pode listar os formatos disponíveis com a opção - i. Consulte Seleção de alvos. Para maiores informações. - C --Demangle style Decode (demangle) nomes de símbolos de baixo nível em nomes de nível de usuário. Além de remover qualquer rascunho inicial previamente feito pelo sistema, isso torna os nomes das funções C legíveis. Diferentes compiladores têm diferentes estilos de transformação. O argumento de estilo de demândalo opcional pode ser usado para escolher um estilo de desmembramento adequado para o compilador. Veja cfilt. Para obter mais informações sobre desmembramento. - g --debugging Exibe informações de depuração. Isso tenta analisar STABS e informações de formato de depuração IEEE armazenadas no arquivo e imprimi-lo usando um C como sintaxe. Se nenhum desses formatos for encontrado, esta opção recairá na opção - W para imprimir quaisquer informações DWARF no arquivo. - e --debugging-tags Como - g. Mas a informação é gerada em um formato compatível com a ferramenta ctags. - d --disassemble Exibe os mnemônicos da montagem para as instruções da máquina do objfile. Esta opção apenas desmonta as seções que devem conter instruções. - D - desassemble-all Como - d. Mas desmontar o conteúdo de todas as seções, não apenas aqueles esperados para conter instruções. Esta opção também tem um efeito sutil sobre a desmontagem de instruções em seções de código. Quando a opção - d está em vigor, objdump assumirá que quaisquer símbolos presentes em uma seção de código ocorrem no limite entre instruções e ele se recusará a desmontar através de tal limite. Quando a opção - D está em vigor, no entanto, esta suposição é suprimida. Isso significa que é possível que a saída de - d e - D seja diferente se, por exemplo, os dados estiverem armazenados em seções de código. Se o alvo for uma arquitetura ARM esse switch também tem o efeito de forçar o desassemblador a decodificar partes de dados encontradas em seções de código como se fossem instruções. --prefix-addresses Ao desmontar, imprima o endereço completo em cada linha. Este é o formato de desmontagem mais antigo. - EB - EL --endian Especifique o endianness dos arquivos de objeto. Isso afeta somente a desmontagem. Isso pode ser útil ao desmontar um formato de arquivo que não descreva informações de endianness, como S-records. - f --file-headers Exibe informações de resumo do cabeçalho geral de cada um dos arquivos objfile. - F --file-offsets Ao desmontar seções, sempre que um símbolo é exibido, também exibe o deslocamento do arquivo da região de dados que está prestes a ser despejado. Se os zeros estiverem sendo ignorados, então, quando a desmontagem for retomada, informe ao usuário quantos zeros foram ignorados eo deslocamento do arquivo do local de onde a desmontagem é retomada. Ao despejar seções, exiba o deslocamento do arquivo do local de onde o despejo é iniciado. --file-start-context Especifique que, ao exibir a codificação de origem interligada (que assume - S) de um arquivo que ainda não foi exibido, estenda o contexto para o início do arquivo. - h --section-headers - headers Exibe informações de resumo dos cabeçalhos de seção do arquivo de objeto. Os segmentos de arquivo podem ser realocados para endereços não padrão, por exemplo, usando o - Ttext. - Tdata. Ou - Tbss opções para ld. No entanto, alguns formatos de arquivo de objeto, como a. out, não armazenam o endereço inicial dos segmentos do arquivo. Nessas situações, embora ld realoca as seções corretamente, usando objdump - h para listar os cabeçalhos de seção de arquivo não é possível mostrar os endereços corretos. Em vez disso, ele mostra os endereços habituais, que estão implícitos para o destino. Note, em alguns casos, é possível que uma seção tenha os atributos READONLY e NOREAD definidos. Nesses casos, o atributo NOREAD tem precedência, mas objdump irá relatar ambos, uma vez que a configuração exata dos bits de sinalizador pode ser importante. - H --help Imprime um resumo das opções para objdump e exit. - i --info Exibe uma lista que mostra todas as arquiteturas e formatos de objetos disponíveis para a especificação com - b ou - m. - j name --section name Exibe informações somente para o nome da seção. - l --line-numbers Rótulo da exibição (usando informações de depuração) com o nome do arquivo e os números de linha de origem correspondentes ao código objeto ou Relocs mostrado. Útil somente com - d. - D. Ou - r. - m machine --architecture Especifica a arquitetura a ser usada ao desmontar arquivos de objeto. Isso pode ser útil ao desmontar arquivos de objeto que não descrevem informações de arquitetura, como registros S. Você pode listar as arquiteturas disponíveis com a opção - i. Se o destino for uma arquitetura ARM, este parâmetro tem um efeito adicional. Restringe a desmontagem apenas às instruções suportadas pela arquitetura especificada pela máquina. Se for necessário usar essa opção porque o arquivo de entrada não contém nenhuma informação de arquitetura, mas também é desejável desmontar todas as instruções use - marm. - M opções --disassembler-opções opções Passar informações específicas do alvo para o desmontador. Apenas suportado em alguns alvos. Se for necessário especificar mais de uma opção de desmontagem, então várias opções - M podem ser usadas ou podem ser colocadas juntas em uma lista separada por vírgulas. Se o alvo for uma arquitetura ARM, essa opção pode ser usada para selecionar qual conjunto de nome de registro é usado durante o desassimilador. Especificando - M reg-names-std (o padrão) irá selecionar os nomes de registro como usado na documentação do conjunto de instruções ARMs, mas com o registro 13 chamado sp, o registrador 14 chamado lr e o registrador 15 chamado pc. Especificando - M reg-names-apcs irá selecionar o conjunto de nomes usados ​​pelo ARM Procedure Call Standard, enquanto especificando - M reg-names-raw usará apenas r seguido do número de registro. Existem também duas variantes no esquema de nomenclatura de registro APCS habilitado por - M reg-names-atpcs e - M reg-names-special-at que usam as convenções de nomenclatura ARMThumb Procedure Call Standard. (Ou com os nomes normais do registro ou os nomes especiais do registro). Esta opção também pode ser usada para arquiteturas ARM para forçar o desmontador a interpretar todas as instruções como instruções Thumb usando o switch --disassembler-optionsforce-thumb. Isso pode ser útil ao tentar desmontar o código do polegar produzido por outros compiladores. Para o x86, algumas das opções duplicam as funções da opção - m, mas permitem um controle de grained mais fino. Várias seleções do seguinte podem ser especificadas como uma seqüência de caracteres separados por vírgula. X86-64 i386 i8086 Selecione a desmontagem para a arquitetura fornecida. Intel att Selecione entre modo de sintaxe de intel e modo de sintaxe de ATampT. Amd64 intel64 Selecione entre AMD64 ISA e Intel64 ISA. Intel-mnemonic att-mnemonic Selecione entre o modo mnemônico da Intel e o modo mnemônico ATampT. Nota: intel-mnemonic implica intel e att-mnemonic implica att. Addr64 addr32 addr16 data32 data16 Especifique o tamanho do endereço e o tamanho do operando padrão. Essas quatro opções serão substituídas se x86-64. I386 ou i8086 aparecem mais tarde na cadeia de opção. Sufixo Quando no modo ATampT, instrui o desassemblador a imprimir um sufixo mnemônico mesmo quando o sufixo puder ser inferido pelos operandos. Para PowerPC, booke controla a desmontagem de instruções BookE. 32 e 64 selecionam PowerPC e PowerPC64 desmontagem, respectivamente. E300 seleciona a desmontagem para a família e300. 440 seleciona a desmontagem para o PowerPC 440. ppcps seleciona a desmontagem para as instruções individuais emparelhadas do PPC750CL. Para MIPS, esta opção controla a impressão de nomes mnemônicos de instruções e nomes de registros em instruções desmontadas. Várias seleções dos itens a seguir podem ser especificadas como uma seqüência de caracteres separada por vírgula e as opções inválidas são ignoradas: no-aliases Imprime o mnemônico de instrução bruta em vez de algum mnemônico de pseudo instrução. I. e. Imprimir daddu ou ou em vez de mover, sll em vez de nop, etc msa Desmontar MSA instruções. Virt Desmonte as instruções ASE de virtualização. Xpa Desmonte as instruções ASE do endereço físico eXtended (XPA). Gpr-names ABI Imprimir GPR (registro de uso geral) nomes como apropriado para o ABI especificado. By default, GPR names are selected according to the ABI of the binary being disassembled. fpr-names ABI Print FPR (floating-point register) names as appropriate for the specified ABI. By default, FPR numbers are printed rather than names. cp0-names ARCH Print CP0 (system control coprocessor coprocessor 0) register names as appropriate for the CPU or architecture specified by ARCH. By default, CP0 register names are selected according to the architecture and CPU of the binary being disassembled. hwr-names ARCH Print HWR (hardware register, used by the rdhwr instruction) names as appropriate for the CPU or architecture specified by ARCH. By default, HWR names are selected according to the architecture and CPU of the binary being disassembled. reg-names ABI Print GPR and FPR names as appropriate for the selected ABI. reg-names ARCH Print CPU-specific register names (CP0 register and HWR names) as appropriate for the selected CPU or architecture. For any of the options listed above, ABI or ARCH may be specified as numeric to have numbers printed rather than names, for the selected types of registers. You can list the available values of ABI and ARCH using the --help option. For VAX, you can specify function entry addresses with - M entry:0xf00ba. You can use this multiple times to properly disassemble VAX binary files that dont contain symbol tables (like ROM dumps). In these cases, the function entry mask would otherwise be decoded as VAX instructions, which would probably lead the rest of the function being wrongly disassembled. - p --private-headers Print information that is specific to the object file format. The exact information printed depends upon the object file format. For some object file formats, no additional information is printed. - P options --private options Print information that is specific to the object file format. The argument options is a comma separated list that depends on the format (the lists of options is displayed with the help). For XCOFF, the available options are: header aout sections syms relocs lineno, loader except typchk traceback toc ldinfo Not all object formats support this option. In particular the ELF format does not use it. - r --reloc Print the relocation entries of the file. If used with - d or - D. the relocations are printed interspersed with the disassembly. - R --dynamic-reloc Print the dynamic relocation entries of the file. This is only meaningful for dynamic objects, such as certain types of shared libraries. As for - r. if used with - d or - D. the relocations are printed interspersed with the disassembly. - s --full-contents Display the full contents of any sections requested. By default all non-empty sections are displayed. - S --source Display source code intermixed with disassembly, if possible. Implies - d. --prefix prefix Specify prefix to add to the absolute paths when used with - S. --prefix-strip level Indicate how many initial directory names to strip off the hardwired absolute paths. It has no effect without --prefix prefix. --show-raw-insn When disassembling instructions, print the instruction in hex as well as in symbolic form. This is the default except when --prefix-addresses is used. --no-show-raw-insn When disassembling instructions, do not print the instruction bytes. This is the default when --prefix-addresses is used. --insn-width width Display width bytes on a single line when disassembling instructions. - WlLiaprmfFsoRt --dwarfrawline, decodedline, info, abbrev, pubnames --dwarfaranges, macro, frames, frames-interp, str, loc --dwarfRanges, pubtypes, traceinfo, traceabbrev --dwarftracearanges, gdbindex Displays the contents of the debug sections in the file, if any are present. If one of the optional letters or words follows the switch then only data found in those specific sections will be dumped. Note that there is no single letter option to display the content of trace sections or. gdbindex. Note: the output from the info option can also be affected by the options --dwarf-depth. the --dwarf-start and the --dwarf-check. --dwarf-depth n Limit the dump of the. debuginfo section to n children. This is only useful with --dwarfinfo. The default is to print all DIEs the special value 0 for n will also have this effect. With a non-zero value for n. DIEs at or deeper than n levels will not be printed. The range for n is zero-based. --dwarf-start n Print only DIEs beginning with the DIE numbered n. This is only useful with --dwarfinfo. If specified, this option will suppress printing of any header information and all DIEs before the DIE numbered n. Only siblings and children of the specified DIE will be printed. This can be used in conjunction with --dwarf-depth. --dwarf-check Enable additional checks for consistency of Dwarf information. - G --stabs Display the full contents of any sections requested. Display the contents of the. stab and. stab. index and. stab. excl sections from an ELF file. This is only useful on systems (such as Solaris 2.0) in which. stab debugging symbol-table entries are carried in an ELF section. In most other file formats, debugging symbol-table entries are interleaved with linkage symbols, and are visible in the --syms output. --start-address address Start displaying data at the specified address. This affects the output of the - d. - r and - s options. --stop-address address Stop displaying data at the specified address. This affects the output of the - d. - r and - s options. - t --syms Print the symbol table entries of the file. This is similar to the information provided by the nm program, although the display format is different. The format of the output depends upon the format of the file being dumped, but there are two main types. One looks like this: where the number inside the square brackets is the number of the entry in the symbol table, the sec number is the section number, the fl value are the symbols flag bits, the ty number is the symbols type, the scl number is the symbols storage class and the nx value is the number of auxilary entries associated with the symbol. The last two fields are the symbols value and its name. The other common output format, usually seen with ELF based files, looks like this: Here the first number is the symbols value (sometimes refered to as its address). The next field is actually a set of characters and spaces indicating the flag bits that are set on the symbol. These characters are described below. Next is the section with which the symbol is associated or ABS if the section is absolute (ie not connected with any section), or UND if the section is referenced in the file being dumped, but not defined there. After the section name comes another field, a number, which for common symbols is the alignment and for other symbol is the size. Finally the symbols name is displayed. The flag characters are divided into 7 groups as follows: l g u. The symbol is a local (l), global (g), unique global (u), neither global nor local (a space) or both global and local (). A symbol can be neither local or global for a variety of reasons, e. g. because it is used for debugging, but it is probably an indication of a bug if it is ever both local and global. Unique global symbols are a GNU extension to the standard set of ELF symbol bindings. For such a symbol the dynamic linker will make sure that in the entire process there is just one symbol with this name and type in use. w The symbol is weak (w) or strong (a space). C The symbol denotes a constructor (C) or an ordinary symbol (a space). W The symbol is a warning (W) or a normal symbol (a space). A warning symbols name is a message to be displayed if the symbol following the warning symbol is ever referenced. I i The symbol is an indirect reference to another symbol (I), a function to be evaluated during reloc processing (i) or a normal symbol (a space). d D The symbol is a debugging symbol (d) or a dynamic symbol (D) or a normal symbol (a space). F f O The symbol is the name of a function (F) or a file (f) or an object (O) or just a normal symbol (a space). - T --dynamic-syms Print the dynamic symbol table entries of the file. This is only meaningful for dynamic objects, such as certain types of shared libraries. This is similar to the information provided by the nm program when given the - D ( --dynamic ) option. --special-syms When displaying symbols include those which the target considers to be special in some way and which would not normally be of interest to the user. - V --version Print the version number of objdump and exit. - x --all-headers Display all available header information, including the symbol table and relocation entries. Using - x is equivalent to specifying all of - a - f - h - p - r - t. - w --wide Format some lines for output devices that have more than 80 columns. Also do not truncate symbol names when they are displayed. - z --disassemble-zeroes Normally the disassembly output will skip blocks of zeroes. This option directs the disassembler to disassemble those blocks, just like any other data.

No comments:

Post a Comment