12. TODO (Contribute!)

Things that need to get done to this document. Note, none of these things are going to be particularly easy. But then again, neither was writing up the rest of this tutorial.

12.1. Write assembly tutorial section

This needs to be written for AT&T syntax and as.


  1. Asm Basics:

    1. Common asm instructions and their side-effects

    2. Link to a more complete and comprehensive opcode description page

  2. Parts of a program

  3. Declairing variables

  4. Writing functions

  5. Calling functions in libc

  6. Calling syscalls

  7. Linking against libc

12.2. Create Diagrams & example outputs

We need someone to run through the tools showcased here and generate some sample output files for the more complicated ones. Also, diagrams for the stack section are needed, as well as the array section.

Target programs:

  1. opera

  2. vmware

  3. crossover

  4. IDA

12.3. More detail

More detail is needed in some places, especially in the area of widget interception. (describing the event loop and suggesting good breakpoint places for GTK, Qt might be nice)

Add resources and links section for each chapter (where applicable)

12.4. Update disasm.pl

The simpler things to do to this script would be to clean up the FIXME's, and add options to it (such as --no-show-raw-insn) Also, making an attempt at derefrencing pointers based on some heuristic would be nice. Check out this perl disassembler for ideas (not too many ideas.. its output format sucks).

If anyone is feeling extremely hardcore and wants to help modify Steve and Nasko's perl script to make the output more intuitive, feel free. A directed graph would be fantastic, automatic determination of main would also be great (use graph theory on your directed graph). There is also a utility called ptrace that is part of the LDasm project. Interfacting it (or gdb) with disasm.pl script to set a break point for each function would be a heroic task as well (because this would be the equivalent of ltrace, except for ALL functions in a program, not just the libs).

12.5. Do this for windows

If any of the dual booters in the crowd want to create a similar document for windows and/or give a talk, submissions are encouraged. Do note that in the meantime, all of these utils exist for windows as well, thanks to the cygwin project. (LINK). They should work the same there.

12.6. Do this for protocols

Protocol reverse engineering is a bit different than software engineering, tho many of the tools are the same. A tutorial on "reverse engineering" network protocols and data formats would also be helpful.

12.7. Do this for hardware

If anyone wants to present tactics for reverse engineering device drivers or electronic equipment, submissions are also welcome.