Thursday, 14 September 2017

Binarie Options Objdump Smonta Braccio


Im cercando di smontare un oggetto costruito per ARM con gcc. Purtroppo, objdump sta cercando di indovinare se il codice è ARM e Thumb, ed è sempre sbagliato: si pensa che il mio codice è pollice quando la sua realtà braccio. Vedo che objdump ha un'opzione per costringerlo a interpretare tutte le istruzioni come Thumb (-Mforce-pollice), ma doesnt avere uno per forzare la modalità ARM Questo mi sembra un omissione davvero strano per me, e la sua seriamente ostacolando la mia capacità di ottenere lavoro svolto (Im su un dispositivo embedded e il mio unico mezzo di debug è quello di esaminare lo smontaggio). Ive ha provato vari approcci, tra cui cercando di dire objdump di utilizzare un'architettura ARM che pretende molto sostegno del pollice, ma nulla sembra funzionare. Tutte le idee (e sì, lo so che le istruzioni sono davvero ARM.) Ha chiesto 25 ago 11 in 16:43 Questo suona come un insetto in entrambi compilerlinker o objdump. Normalmente i simboli dovrebbero essere contrassegnati correttamente se theyre pollice o ARM e smontati conseguenza. Detto questo, ce n'è un paio di cose che puoi provare: file come semplice binario (-D binario - b) interpretare - questo disabiliterà simbolo controllo e sarà smontare tutto il file come ARM. Unico inconveniente: un sacco di spazzatura in uscita, non belle indirizzi. usare IDA Pro. Anche se indovina in modo non corretto, si può sempre ignorare la sua decisione. Inoltre, è un ambiente di smontaggio molto più bello :) risposto 25 ago 11 in 16:56 Ho bisogno di informazioni sui simboli e so cosa I39m guardando, in modo da utilizzare doesn39t binario grezzo tagliare, I39m paura. Il file in questione non dispone di informazioni di debug quindi le informazioni di marcatura dovrebbe essere lì. Il mio processo di compilazione è complicata, ma non comporta gcc durante tutte le idee che cosa potrebbe essere Escludendo la marcatura ndash David simbolo raffigurato 26 11 agosto a 10:42 It39s difficile dire what39s è esattamente il problema. Stampa il contenuto della tabella dei simboli e dare un'occhiata a printinsn (braccio) in braccio dis. c. Forse che vi darà qualche idea. ndash Igor Skochinsky 26 agosto 11 al 13: Esempi 30Linux objdump comando (Smontare un file binario) objdump comando in Linux viene utilizzato per fornire informazioni approfondite sul file oggetto. Questo comando è utilizzato principalmente dai programmatori che lavorano su compilatori, ma ancora la sua uno strumento molto utile per i programmatori normali, anche quando si tratta di debug. In questo articolo, capiremo come utilizzare il comando objdump attraverso alcuni esempi. Sintassi di base di objdump è: Vi è una vasta gamma di opzioni disponibili per questo comando. Cercheremo di coprire una buona quantità di loro in questo tutorial. Il file binario ELF del seguente programma C è utilizzato in tutti gli esempi citati in questo articolo. Nota: Quanto sopra è solo un codice di prova che veniva utilizzato per altri scopi, ma ho trovato abbastanza semplice da utilizzare per questo articolo. 1. Visualizzare il contenuto del file di intestazione generale utilizzando l'opzione - f Si consideri il seguente esempio: Così vediamo che le informazioni relative all'intestazione complessiva file è stato mostrato in uscita. NOTA: Il formato eseguibile utilizzato negli esempi è ELF. Per saperne di più, fare riferimento al nostro articolo sul formato di file ELF. 2.Display oggetto formato specifico contenuto intestazione del file usando l'opzione - p L'esempio seguente stampa le informazioni specifiche formato di file oggetto. 3. Visualizzare il contenuto delle intestazioni di sezione con opzione - h Ci possono essere varie sezioni in un file oggetto. Informazioni relative ad essi può essere stampato utilizzando l'opzione - h. Gli esempi che seguono mostrano varie sezioni. Come potete vedere ci sono un totale di 26 (solo l'uscita parziale è mostrato qui). Così vediamo che le informazioni relative a tutte le intestazioni di sezione appare in uscita. In uscita sopra, la dimensione è la dimensione della sezione di carico, VMA rappresenta l'indirizzo di memoria virtuale, LMA rappresenta l'indirizzo di memoria logico, file fuori è questo section8217s compensato a partire dall'inizio del file, ALGN rappresenta l'allineamento, CONTENUTI, ALLOC, CARICO , READONLY, i dati sono bandiere che rappresentano che una sezione particolare è quello di essere caricato o 'in sola lettura, ecc 4. visualizzare il contenuto di tutte le intestazioni con - x opzione Informazioni relative a tutte le intestazioni nel file oggetto possono essere recuperati utilizzando il - x opzione. L'esempio seguente mostra tutte le sezioni (solo per l'uscita parziale è mostrato qui): 5. CONTENUTO display assemblatore di sezioni eseguibili utilizzando l'opzione - d Si consideri il seguente esempio. I contenuti assemblatore di sezioni eseguibili (nel file oggetto) vengono visualizzati in questa uscita (uscita parziale illustrato di seguito): 6. contenuto del display assemblatore di tutte le sezioni che utilizzano - D opzione Nel caso in cui il contenuto assemblatore di tutte le sezioni è richiesto in uscita, l'opzione - D può essere utilizzato. Si consideri il seguente output: Così vediamo che è stata esposta la relativa uscita. Dal momento che l'uscita è stata molto lunga, quindi ho ritagliato esso. Si noti che ho usato il comando cercapersone per controllare l'uscita. 7. Visualizzare il contenuto completo di tutte le sezioni utilizzando l'opzione - s Si consideri il seguente esempio: Così vediamo che il contenuto completo per tutte le sezioni sono state esposte in uscita. 8. Visualizzazione delle informazioni di debug usando l'opzione - g Si consideri il seguente esempio: Così vediamo che tutte le informazioni di debug disponibili è stato stampato in uscita. 9. Visualizzare il contenuto della tabella dei simboli (o tabelle) utilizzando l'opzione - t Si consideri il seguente esempio: Così vediamo che il contenuto della tabella dei simboli sono stati esposti in uscita. 10. visualizzare il contenuto della tabella di simboli dinamica utilizzando l'opzione - T simboli dinamici sono quelli che vengono risolti in fase di esecuzione. Le informazioni relative a questi simboli possono essere recuperate utilizzando l'opzione - D. Si consideri il seguente esempio: Così vediamo che le informazioni relative ai simboli dinamici è stato visualizzato in uscita. 11. visualizzare le voci di trasferimento dinamiche nel file utilizzando l'opzione - R Si consideri il seguente esempio: così vediamo che tutte le voci di trasferimento dinamiche sono state esposte in uscita. 12. sezione Visualizzazione di interesse utilizzando opzione - j Ciò è estremamente utile quando si conosce la sezione relativa ai quali è richiesta l'informazione. Il - j opzione viene utilizzata in questo caso. Si consideri il seguente esempio: Così vediamo che le informazioni relative alla sezione Rodata è stato visualizzato sopra. 13. Utilizzare il formato di smontaggio vecchio utilizzando l'opzione 8211prefix indirizzi Il vecchio formato stampa l'indirizzo completo su ogni riga. Si consideri il seguente esempio: Così vediamo che l'indirizzo completo sono state stampate in uscita. 14. Accettare le opzioni di input da un file utilizzando l'opzione Se si desidera, le opzioni per objdump può essere letto da un file. Questo può essere fatto utilizzando 82.168.217 opzione. Si consideri il seguente esempio: In questo esempio sopra, ho usato le opzioni - v e - i. Mentre - v viene utilizzato per stampare le informazioni sulla versione, - i viene utilizzato per fornire i formati di oggetto supportati e architetture. Ora ho creato un file e aggiungere queste due opzioni lì. Eseguire il objdump chiamando il file options. txt come illustrato di seguito. Questo visualizza lo stesso output come sopra, come si sta leggendo le opzioni dal file. objdump options. txt (1) - Linux pagina man Descrizione objdump visualizza informazioni su uno o più file oggetto. Le opzioni controllano quale particolare le informazioni da visualizzare. Questa informazione è particolarmente utile per i programmatori che stanno lavorando ai tool di compilazione, al contrario di programmatori che vogliono solo il loro programma per compilare e lavoro. objfile. sono i file oggetto da esaminare. Quando si specifica archivi, objdump sono riportate le informazioni su ciascuno dei file oggetto membro. Le forme lunghe e corte di opzioni, qui mostrate come alternative, sono equivalenti. Almeno un opzione dalla lista - a, - d, - D, - e, - f, - g, - G, - h, - H, - p, - r, - R, - s, - S, - t, - T, - V, - x deve essere data. - a --archive-header Se uno qualsiasi dei file objfile sono archivi, visualizzare le informazioni di intestazione archivio (in un formato simile a ls - l). Oltre alle informazioni è possibile elencare con tv ar. objdump - a mostra il formato di file oggetto di ogni membro dell'archivio. --adjust-VMA compensate quando il dumping informazioni, aggiungere prima offset per tutti gli indirizzi di sezione. Questo è utile se gli indirizzi sezione non corrispondono alla tabella dei simboli, che può accadere quando mettere sezioni a particolari indirizzi quando si utilizza un formato che non può rappresentare gli indirizzi di sezione, come ad esempio a. out. - b bfdname --target bfdname specificare che il formato object-code per i file oggetto è bfdname. Questa opzione potrebbe non essere necessaria objdump in grado di riconoscere automaticamente molti formati. Ad esempio, visualizza le informazioni di riepilogo delle intestazioni di sezione (H) di fu. o. che è esplicitamente identificato (-m) come file oggetto VAX nel formato prodotto da compilatori Oasys. Si possono elencare i formati disponibili con l'opzione - i. - C Decode --demangle stile (demangle) i nomi dei simboli di basso livello in nomi a livello utente. Oltre a rimuovere ogni underscore iniziale aggiunto dal sistema, questo rende nomi di funzioni C leggibile. Diversi compilatori hanno differenti stili di codifica. L'argomento opzionale dello stile di decodifica può essere usato per scegliere uno stile appropriato di decodifica per il proprio compilatore. - g --debugging display informazioni di debug. Questo tenta di analizzare coltellate e IEEE informazioni sul formato di debug memorizzate nel file e stamparlo utilizzando una C come sintassi. Se nessuno di questi formati si trovano questa opzione ricade l'opzione - W per stampare tutte le informazioni NANO nel file. - e --debugging-tag come - g. ma l'informazione è generato in un formato compatibile con lo strumento ctags. - d display --disassemble mnemonici assembler per le istruzioni macchina da objfile. Questa opzione smonta solo quelle sezioni che dovrebbero contenere le istruzioni. - D --disassemble-All - d come. ma disassemblare il contenuto di tutte le sezioni, non solo quelli attesi per contenere istruzioni. Se il bersaglio è un'architettura ARM questo interruttore ha anche l'effetto di costringere il disassembler per decodificare frammenti di dati presenti nelle sezioni di codice come se fossero istruzioni. --prefix indirizzi Quando si smonta, stampare l'indirizzo completo su ogni riga. Questo è il formato di smontaggio più vecchio. - EB - EL --endian Specificare il endianness dei file oggetto. Questo riguarda solo lo smontaggio. Questo può essere utile quando smontare un formato di file che non descrive le informazioni endianness, come S-record. - f --file-header informazioni Display dall'intestazione complessiva di ciascuno dei file objfile. - F --file-Offset durante lo smontaggio sezioni, ogni volta che viene visualizzato un simbolo, mostrano anche il file di offset della regione di dati che è in procinto di essere oggetto di dumping. Se zeri vengono ignorati, poi quando lo smontaggio riprende, dire all'utente quanti zeri erano saltati e il file di offset del luogo da dove il disassemblaggio riprende. Quando scaricate sezioni, visualizzare il file di offset della posizione da cui inizia la discarica. --file-start-contesto di specificare che, quando la visualizzazione di fonte interlisted codedisassembly (assume - S) da un file che non è ancora stato visualizzato, estendere il contesto per l'inizio del file. - h --section-headers --headers informazioni Display dalle intestazioni di sezione del file oggetto. segmenti di file possono essere trasferiti a indirizzi non standard, ad esempio utilizzando il - Ttext. - Tdata. o opzioni - Tbss per ld. Tuttavia, alcuni formati di file oggetto, come ad esempio a. out, non conservare l'indirizzo iniziale dei segmenti di file. In tali situazioni, anche se ld trasferisce correttamente sezioni, utilizzando objdump - h per elencare le intestazioni di sezione del file non può mostrare gli indirizzi corretti. Invece, mostra i soliti indirizzi, impliciti per la destinazione. - H --help Stampa un riepilogo delle opzioni per objdump e uscire. - i --info Visualizza una lista che mostra tutte le architetture ei formati oggetto disponibili per la specifica con - b o - m. - j nome --section informazioni Nome visualizzato solo per nome della sezione. - l --line-numeri di etichette di display (utilizzando le informazioni di debug) con i numeri di nome file e di linea della sorgente corrispondente al codice oggetto o relocs mostrato. Utile solo con - d. - D. o - R. - m macchina --architecture macchina Specificare l'architettura da utilizzare durante lo smontaggio file oggetto. Questo può essere utile quando smontare file oggetto che non descrivono le informazioni di architettura, come la S-record. Si possono elencare le architetture disponibili con l'opzione - i. Se il bersaglio è un'architettura ARM allora questo interruttore ha un effetto aggiuntivo. Esso limita lo smontaggio ai soli istruzioni supportate dall'architettura specificato da macchina. Se è necessario utilizzare questo interruttore perché il file di input non contiene alcuna informazione architettura, ma è anche desiderato di smontare tutte le istruzioni utilizzano - marm. opzioni - M --disassembler-opzioni di opzioni di passare informazioni specifiche destinazione al disassemblatore. Supportato solo su alcuni obiettivi. Se è necessario specificare più di una opzione disassembler quindi più opzioni - M possono essere utilizzati o possono essere messi insieme in un elenco separato da virgole. Se il bersaglio è un'architettura ARM allora questo interruttore può essere usato per selezionare quale registrare il nome impostato viene utilizzato durante disassembler. Specificando - M Reg-nomi-STD (il default) selezionerà i nomi di registro ed usati in ARM s documentazione set di istruzioni, ma con il registro 13 chiamato sp, registrare 14 chiamato lr e registrare 15 chiamato pc. Specificando - M Reg-nomi-APC potranno selezionare il set di nome utilizzato dal ARM Procedure Call standard, ma devono specificare - M REG-nomi-prime vi basta usare R seguito dal numero di registro. Ci sono anche due varianti sul registro APCS denominazione schema abilitato per - M REG-nomi-atpcs e - M REG-nomi-special-atpcs che utilizzano le convenzioni di denominazione procedura ARMThumb chiamata standard. (In entrambi i casi con i nomi di registro normali oi nomi apposito registro). Questa opzione può essere utilizzata anche per le architetture ARM per forzare il disassembler di interpretare tutte le istruzioni come istruzioni Thumb utilizzando l'interruttore --disassembler-optionsforce-pollice. Ciò può essere utile quando si tenta di disassemblare codice pollice prodotte da altri compilatori. Per il 86, alcune delle opzioni duplicare funzioni dello switch - m, ma consentono un controllo più granulare. Più selezioni dal seguente possono essere specificati come una stringa separato da virgole. x86-64. i386 e i8086 selezionare lo smontaggio previsti per l'architettura. Intel e att scegliere tra la modalità sintassi Intel e modalità di sintassi ATampT. intel-mnemonico e ATT-mnemonico selezionare tra la modalità mnemonico Intel e modalità mnemonico ATampT. intel-mnemonico implica Intel e att-mnemonico implica att. addr64. addr32. addr16. data32 e DATO16 specificare il formato indirizzo predefinito e la dimensione degli operandi. Queste quattro opzioni saranno sovrascritte se x86-64. i386 o i8086 compaiono più tardi nella stringa di opzione. Infine, il suffisso. in modalità ATampT, istruisce il disassembler per stampare un suffisso mnemonico anche quando il suffisso potrebbe essere dedotto dalle operandi. Per PowerPC, booke controlla lo smontaggio delle istruzioni Booke. 32 e 64 selezionare PowerPC e PowerPC64 lo smontaggio, rispettivamente. e300 seleziona lo smontaggio per la famiglia e300. 440 seleziona lo smontaggio per i PowerPC 440. PPCP seleziona lo smontaggio per le singole istruzioni accoppiati del PPC750CL. Per MIPS. Questa opzione controlla la stampa di nomi mnemonici istruzione e registrare i nomi di istruzioni smontati. Più selezioni dal seguente possono essere specificati come una stringa separati da virgola, e le opzioni non valide vengono ignorate: no-alias Stampa mnemonico istruzioni prima al posto di qualche mnemonico istruzioni pseudo. Cioè daddu stampa o o al posto di movimento, SLL invece di nop, ecc GPR-nomi ABI Stampa GPR (registro di uso generale) nomi come appropriato per l'ABI specificato. Per impostazione predefinita, i nomi GPR vengono selezionati secondo l'ABI del binario essere smontato. fpr-nomi ABI Stampa FPR (registro in virgola mobile) nomi come appropriato per l'ABI specificato. Per impostazione predefinita, i numeri FPR sono stampati piuttosto che nomi. CP0 nomi ARCH Stampa CP0 (controllo del sistema coprocessore coprocessore 0) registrare i nomi a seconda della CPU o l'architettura specificata da ARCH. Per impostazione predefinita, i nomi dei registri CP0 vengono selezionati secondo l'architettura e la CPU dell'essere binario smontato. HWR nomi ARCH Stampa HWR (registro hardware, usato dall'istruzione rdhwr) nomi a seconda della CPU o l'architettura specificata da ARCH. Per impostazione predefinita, i nomi HWR vengono selezionati secondo l'architettura e la CPU dell'essere binario smontato. Reg-nomi ABI Stampa GPR e nomi FPR come appropriato per l'ABI selezionato. Reg-nomi ARCH stampa i nomi dei registri specifici della CPU (CP0 registrati e nomi HWR) a seconda dei casi per la CPU o l'architettura selezionata. Per una delle opzioni sopra elencate, ABI o ARCH può essere specificato come numerico per stampare i numeri piuttosto che i nomi, per i tipi selezionati di registri. Si possono elencare i valori disponibili di ABI e ARCH utilizzando l'opzione --help. Per VAX. è possibile specificare gli indirizzi di ingresso funzione con ingresso - M: 0xf00ba. È possibile utilizzare questo più volte di smontare correttamente i file binari VAX che dont contenere tabelle dei simboli (come la ROM discariche). In questi casi, la maschera di inserimento funzione altrimenti essere decodificato come istruzioni VAX che probabilmente portare il resto della funzione scorrettamente smontato. - p --private-headers le informazioni di stampa che è specifico per il formato di file oggetto. Le informazioni esatte stampato dipende dal formato di file oggetto. Per alcuni formati di file oggetto, nessuna informazione aggiuntiva viene stampato. - r --reloc stampare le voci di trasferimento del file. Se usato con - d o - D. le delocalizzazioni sono stampati intervallati con lo smontaggio. - R --dynamic-Reloc Stampa le voci di trasferimento dinamiche del file. Questo è significativo solo per gli oggetti dinamici, come certi tipi di librerie condivise. Per quanto riguarda - r. se utilizzato con - d o - D. le delocalizzazioni sono stampati intervallati con lo smontaggio. - s --full-contenuti da visualizzare l'intero contenuto di tutte le sezioni richieste. Per impostazione predefinita, vengono visualizzate tutte le sezioni non vuoti. - S --source Codice sorgente di visualizzazione mescolati con lo smontaggio, se possibile. Implica - d. prefix prefisso Specifica il prefisso da aggiungere ai percorsi assoluti quando viene utilizzato con - S. livello --prefix-strip indicare quanti nomi delle directory iniziali a spogliarvi lo percorsi assoluti cablati. Non ha alcun effetto senza --prefix prefisso. --show-raw-insn Quando smontaggio istruzioni, stampare le istruzioni in esadecimale come pure in forma simbolica. Questa è l'impostazione predefinita, tranne quando viene utilizzato --prefix-indirizzi. --no-show-raw-insn Quando si smonta le istruzioni, non stampare i byte di istruzioni. Questa è l'impostazione predefinita quando viene utilizzato --prefix-indirizzi. --insn larghezza byte larghezza di visualizzazione su una singola linea durante lo smontaggio istruzioni. - WlLiaprmfFsoR --dwarfrawline, Decodedline, informazioni, abbrev, pubnames, aranges, macro, telai, cornici-interp, str, LOC, intervalli di visualizzare il contenuto delle sezioni debug nel file, se presenti. Se una delle lettere o parole opzionali segue l'interruttore poi verranno scaricati solo i dati si trovano in quelle sezioni specifiche. --stabs - G Visualizza l'intero contenuto di tutte le sezioni richieste. Visualizzare il contenuto della. stab e. stab. index e. stab. excl sezioni da un file ELF. Questo è utile solo su sistemi (come Solaris 2.0) in cui. stab debug voci di tabelle di simboli si svolgono in una sezione ELF. Nella maggior parte degli altri formati di file, le voci di tabelle di simboli di debug sono intercalati con i simboli di collegamento, e sono visibili nell'output --syms. --start-indirizzo avviare la visualizzazione dei dati all'indirizzo specificato. Questo influisce sull'uscita del - d. - r - s e opzioni. --stop-indirizzo Fermare la visualizzazione dei dati all'indirizzo specificato. Questo influisce sull'uscita del - d. - r - s e opzioni. - t --syms stampare le voci della tabella dei simboli del file. Questo è simile alle informazioni fornite dal programma nm, anche se il formato di visualizzazione è diverso. Il formato dell'output dipende dal formato del file oggetto di dumping, ma ci sono due tipi principali. Si guarda in questo modo: dove il numero all'interno delle parentesi quadre è il numero della voce nella tabella dei simboli, il numero di secondi è il numero della sezione, il valore fl sono i bit simboli di bandiera, il numero di Ty è il tipo di simboli, SCL numero è la classe simboli stoccaggio e il valore nx è il numero di voci auxilary associato al simbolo. Gli ultimi due campi sono il valore simboli e il suo nome. L'altro formato di output comune, di solito visto con i file in base ELF, si presenta così: Ecco il primo numero è il valore di simboli (talvolta riferito come il suo indirizzo). Il campo successivo è in realtà un insieme di caratteri e spazi indicanti i flag bit impostati sul simbolo. Questi personaggi sono descritti di seguito. Avanti è la sezione con la quale il simbolo è associato o ABS se la sezione è assoluta (cioè non in contatto con qualsiasi sezione), o UND se la sezione si fa riferimento nel file oggetto di dumping, ma non definito lì. Dopo il nome della sezione viene altro campo, un numero, che per simboli comuni è l'allineamento e per altro simbolo è la dimensione. Infine viene visualizzato il nome simboli. I caratteri bandiera sono divisi in 7 gruppi come segue: l Il simbolo è un locale (l), globale (g), univoco globale (u), né globale nè locale (uno spazio) o entrambi globali e locali (). Un simbolo può essere né locale o globale per una varietà di ragioni, ad esempio perché viene utilizzato per il debugging, ma è probabilmente un'indicazione di un errore se è sempre locale e globale. simboli globali unici sono un'estensione GNU al set standard di attacchi di simboli ELF. Per tale simbolo il linker dinamico farà in modo che in tutto il processo non è solo un simbolo con questo nome e il tipo in uso. Il simbolo è debole (w) o forte (uno spazio). Il simbolo denota un costruttore (C) o un simbolo ordinaria (uno spazio). Il simbolo è un avvertimento (W) o un simbolo normale (uno spazio). Un nome di simboli di avviso è un messaggio da visualizzare se il simbolo segue il simbolo di avvertimento è sempre fatto riferimento.

No comments:

Post a Comment