
Δουλεύω σε ένα βοηθητικό πρόγραμμα που θα πρέπει να επιλύσει τις διευθύνσεις εξάγωνο με ένα συμβολικό όνομα της συνάρτησης και τον πηγαίο κώδικα αριθμό γραμμής μέσα σε ένα δυαδικό. Το βοηθητικό πρόγραμμα θα τρέχει σε Linux για x86, αν και τα δυαδικά αναλύει θα είναι για ένα ενσωματωμένο σύστημα MIPS-based. Τα δυαδικά αρχεία MIPS είναι σε ELF μορφή, χρησιμοποιώντας DWARF για το συμβολικό πληροφοριών εντοπισμού σφαλμάτων.


Είμαι σχεδιάζει σήμερα στο πιάτο objdump, περνώντας σε μια λίστα με τις διευθύνσεις εξάγωνο και την ανάλυση της εξόδου για να πάρει τα ονόματα λειτουργία και αριθμούς γραμμής πηγής. Έχω συντάξει ένα objdump με υποστήριξη για MIPS εκτελέσιμα, και λειτουργεί.


Θα προτιμούσα να έχουμε ένα πακέτο που μου επιτρέπει να δούμε τα πράγματα εγγενώς από τον κώδικα Python χωρίς forking μια άλλη διαδικασία. Μπορώ να βρω καμία αναφορά libdwarf, libelf, ή libbfd για python.org, ούτε οποιαδήποτε αναφορά python για dwarfstd.org.


Υπάρχει μια κατάλληλη μονάδα διαθέσιμο κάπου;

 
Analizing MIPS εκτελέσιμα: είναι μια βιβλιοθήκη Python για την ανάλυση δυαδικά δεδομένα εκεί;
=============================================================================================



Παρακαλώ ελέγξτε [pyelftools](https://github.com/eliben/pyelftools) - μια νέα βιβλιοθήκη καθαρή Python γραφτό να γίνει αυτό.

 

Δεν ξέρω οποιουδήποτε, αλλά αν όλα τα άλλα αποτύχουν, μπορείτε να χρησιμοποιήσετε [ctypes](http://docs.python.org/lib/module-ctypes.html) να χρησιμοποιήσετε άμεσα libdwarf, libelf ή libbfd.

 

Θα πρέπει να δώσετε [Κατασκευάστε](http://construct.wikispaces.com/) μια δοκιμή. Είναι πολύ χρήσιμο να αναλύσει δυαδικά δεδομένα σε αντικείμενα python.


Υπάρχει ακόμη ένα παράδειγμα για το [ELF32](http://sebulbasvn.googlecode.com/svn/trunk/construct/formats/executable/elf32.py) μορφή αρχείου.

 

Έχω αναπτύξει ένα νάνο αναλυτή χρησιμοποιώντας [Construct](http://construct.wikispaces.com/) . Επί του παρόντος αρκετά τραχύ και ανάλυσης είναι αργή. Αλλά σκέφτηκα ότι θα έπρεπε τουλάχιστον να σας ενημερώσουμε. Μπορεί να ανταποκριθεί στις ανάγκες σας, με ένα κομμάτι της εργασίας.


Έχω τον κωδικό στο Mercurial, που φιλοξενείται στο bitbucket:


* <http://bitbucket.org/cmcqueen1975/pythondwarf/>
* <http://bitbucket.org/cmcqueen1975/construct/> (απαραίτητες τροποποιήσεις στην Κατασκεύασμα βιβλιοθήκη)


[Κατασκευάστε](http://construct.wikispaces.com/) είναι μια πολύ ενδιαφέρουσα βιβλιοθήκη. Νάνος είναι μια σύνθετη μορφή (όπως είμαι ανακάλυψη) και ωθεί Κατασκευάστε στα όριά της, νομίζω.

 

[hachior](http://bitbucket.org/haypo/hachoir/wiki/Home) είναι μια άλλη βιβλιοθήκη για την ανάλυση δυαδικά δεδομένα

 

Ίσως να ενδιαφέρονται για νάνου βιβλιοθήκη από [pydevtools](http://code.google.com/p/pydevtools/) :



```
>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)

```
 