Giter Site home page Giter Site logo

idadwarf's Introduction

IDADWARF README

IDADWARF is an IDA plugin that imports DWARF debugging symbols
into an IDA database.

The plugin is written in C++ with some GNU extensions.

IDADWARF is (c) 2009 Vincent Rasneur and is licensed under the GPLv3.

How to use it?
--------------

Just copy the 'idadwarf.plw' file to the IDA plugins directory.
This file has been compiled with the IDA 5.5 SDK.
When loading an ELF file, there should be a new "IDADWARF ELF vX.X" entry
in the "Edit/plugins" menu.

Warning: only use this plugin on an already analyzed database.

How to build it?
----------------

See the INSTALL file.

What information can be retrieved from the debugging symbols?
-------------------------------------------------------------

It depends on the compiler... If the compiler has successfully generated the debugging symbols
for all the code being compiled, that means the symbols contain:
* all the data types (not only the program types, but the libraries types too (glibc, ...))
* function prototypes and static/automatic variables information.
* global variables info
* assembler/line number mapping
* etc...

IDADWARF can retrieve a significant part of these informations:
* found data types are stored in the "Local Types" window.
* found functions are given their "normal" prototypes.
* stack frame information is readable now :)
  i.e. no arg_XX or var_XX, but the real names. The types are shown in a comment.
* nearly the same for global/static variables.
* label names (loc_XXXX) are replaced by their source code names.
* register names are replaced by their variable names.
* enumerations are applied in the assembly listing:
  'cmp eax, 2' is replaced by 'cmp eax, MY_ENUM_CONSTANT'
* structures members are applied too:
  'mov eax, [ebx+12]' is replaced by 'mov eax, [ebx+my_struc.my_member]'
* code cross-references for all the processed functions
  the plugin handles 2 types of argument passing: 'push arg' and 'mov [esp+offset], arg'
* preprocessor macro definitions are displayed

Some limitations of the plugin:
-------------------------------

* only DWARF 2 and 3 support (nobody uses DWARF 1 anyway...)
* C debugging symbols will give the best results.
  There is nearly no C++ support for now: no namespaces, objects, templates, references...
  No Pascal or FORTRAN or [your language here] either.
* only ELF binaries are supported.
* types retrieval works for all the architectures, other retrievals (functions, variables, ...)
  can only be performed when working on an IA32 (metapc) program.
* the heuristics used by the plugin can fail...
* if the debugging symbols are crappy, no data will be imported.
* the compilation procedure is funky ;-)

Why such a plugin exists?
-------------------------

If a program being disassembled contains debugging symbols, then why not use them?
A great number of programs in production systems are compiled with debugging symbols.

The plugin is also useful when we want to check the binary output of a compiler.
The "assembly with debugging information" listing generated by GCC is not
really usable. Now you can use this plugin to have your commented assembly listing :)

What can I find in the tarball?
-------------------------------

* README : is the current file
* INSTALL : informations to build the plugin from source
* CODING_STYLE : C++ coding style for the plugin
* TODO: things to be done later :)
* bin/ : contains the IDADWARF DLL, compiled for IDA Pro 5.5
* src/ : contains the source files
* tests/ : contains test files, type 'make' to build them
* tests/bin/ : contains test binaries
  (for now, the httpd daemon compiled with debug symbols)
* screens/ : contains some screenshots of the plugin

How can I contact the author?
-----------------------------

You can send an email to [email protected] or [email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.