Projects


In the past, all of my personal projects where hosted at this URL. However, as of 2015 I have migrated all of my open source projects to Github. I am pretty much always juggling several non-work related projects, so please check out my Github page if you'd like to see what I'm up to lately :-)

Because historically, this has been the homepage of edb, I will continue to update this page with information about it.

Additionally, information about my non-open source projects will continue to be found here

edb is and always will be free. However, if you feel that you'd like to support development, donations are always welcome. Either way, thank you for your support. Any money I receive as a donation will go directly into edb's development.

— or —
Donate 12z3uWcWNLHnLYzDJdSCdJhCiTAbrYT13q

edb


Announcements

The current version of edb is 0.9.20 of edb is available under the GPL-2 license for download!

If you are interested in latest and greatest, you are also encouraged to check out the latest in the master branch on github. This version supports x86 and x86-64 architectures. Please give it a try and let me know what I can do to improve it. Documentation is pretty much non-existant, but that's one of the reasons why this is not a 1.0 release :). Remember to read the README & the wiki, it has a lot of information, and please check the bugzilla before asking about a missing feature, it may already be in the works. Enjoy!

Downloads

I have produced an ebuild for all you fellow Gentoo users out there. The easiest way to use it is to do the following (as root):

mkdir -p /usr/local/portage/edb/dev-util/edb/
cp edb-0.9.20.ebuild /usr/local/portage/edb/dev-util/edb/
echo PORTDIR_OVERLAY=\"\${PORTDIR_OVERLAY} /usr/local/portage/edb\" >> /etc/make.conf
cd /usr/local/portage/edb/dev-util/edb/
ebuild edb-0.9.20.ebuild digest
ACCEPT_KEYWORDS=~x86 emerge -a dev-util/edb

History

I do a lot of work analyzing applications which I do not have the source code for. On Windows, OllyDbg is my tool of choice, but there is no Linux (or any other *nix) equivalent that I could find. Sure we have GDB, but GDB and all it's various frontends tend to lean towards debugging applications to which we have the source. What I really want is a debugger which is as functional and useable as OllyDbg but for Linux (and possibly more). So I started my own debugger which is currently based on the ptrace API. The hex dump views are based on the QHexView I developed which gives things a very polished look.

About

One of the main goals of this debugger is modularity. The interface is written in Qt4 and is therefore source portable to many platforms. The debugger core is a plugin and the platform specific code is isolated to just a few files, porting to a new OS would require porting these few files and implementing a plugin which implements the IDebugger interface. Also, because the plugins are based on the QPlugin API, and do their work through the IDebugger object, they are almost always portable with just a simple recompile.

The disassembly engine is my edisassm project. I feel that this disassembler is mature and works well. It is worth noting that the current version of edb has temporarily dropped AT&T syntax support. Once this is implemented in edisassm, it will return.

Bug Reporting

Bugs & requests are now tracked through the github issue tracker for the project. Please post any bugs you find or features you would like me to try to implement there.

Features

  • Intuitive GUI. Designed to be familiar, yet new.
  • The usual debugging operations (step-into/step-over/run/break)
  • Conditional breakpoints
  • Debugging core is implemented as a plugin so people can have drop in replacements. Of course if a given platform has several debugging APIs available, then you may have a plugin that implements any of them.
  • Basic instruction analysis
  • View/Dump memory regions
  • Effective address inspection
  • The data dump view is tabbed, allowing you to have several views of memory open at the same time and quickly switch between them.
  • Importing and generation of symbol maps
  • Plugins
    • Code analysis engine which can identify functions
    • Search for binary strings
    • Code Bookmarks
    • Breakpoint management
    • Check for updates
    • Output the current state to the console
    • Environment variable viewer
    • Hardware Breakpoints
    • Heap block enumeration
    • Opcode search engine plugin has basic functionality (similar to msfelfscan/msfpescan)
    • Open file enumeration
    • Reference finder
    • String searching (like strings command in *nix)
    • Basic ROP instruction search

Thanks

  • As of 06/2015, I was informated that edb will be included in the REMnux Linux Distribution.
  • As of 06/2011, I received an email letting me know that edb will be included in the BackTrack Linux Distribution and will be available via the backtrack repos with a simple: "apt-get install edb-debugger".
  • As of 12/2010, thanks to the work of Fernando Mercês from http://mentebinaria.com.br/, edb now has .deb files for users of Debian based distributions.
  • As of 12/2008, thanks to the work of Nicoleau Fabien, edb is now available in Fedora's stable repositories. You should be able to install it with a simple "yum install edb"! Thanks Nicoleau!

Screenshots

evanOS


This is my operating system. It is written in c++ with a tiny bit of assembly. My primary goal is to make a usable and useful operating system which is truly designed from the ground up to secure and flexible. Its design is influenced by a few operating systems. I plan to have a UNIX like filesystem, which will have the notion of "devices are files" but devices will live in there own namespace. For example, the first hard disk will be available as: device:///hard_disk/0 and will not be normally part of the actual filesystem. Similarly, instead of a /proc/ filesystem, I have process:///. However, a user will be able to reproduce a UNIX like /dev by mounting device:/// to /dev.

I plan to have the normal way of creating processes be somewhat like Win32, and not use fork/execve. This is simpler to work with from a programmers point of view. I do however plan to have fork/execve available in order to increase compatibility the vast library of existing UNIX applications.

In its current state, evanOS runs in long mode, and is 64-bit. It supports multiple processes/threads, semaphores, mutexes, monitors, ATA hard disk access with preliminary ext2/3 reading support, and a few other cool things.

A related side project of mine is a custom written from the ground up libc and libstd++. These are designed to be standards compliant and be able to operate in kernel mode. This way I can test and validate a lot of code in user space before jamming it into my kernel code. Also it allows me to reuse standard code for things like containers which are already have correct implementation. Finally the use of safe containers such as std::string will help greatly in the reduction of possibly insecure code. Once it moves along a bit more, I'll start posting source code so that if anyone is interested they can take a peek at what I'm up to :)

I have successfully added user mode processes, and the ability to load simple statically linked ELF binaries off disk and run them! Once I finalize my IPC API, then I can begin work on a real GUI which will in user space.

I also may choose to fork off the evanOS-libc and evanOS-libstdc++ into separate projects for people to use as well. The libc is pretty close to being complete and I'd call the libstdc++ 80%, usable but still missing some large pieces.

Some screen shots for your viewing pleasure...

Finished Booting

Listing Files

Read a File

Read CPU Info

Testing User Mode Exceptions

Version System Call

RPG Engine


This has always been one of my favorites. I am building a Final Fantasy 3 (Final Fantasy 6 in Japan) style RPG Engine. It is top down and tile driven in classic RPG style. The cool part is that pretty much every part of the games made are driven by my C like scripting language developed specifically for this engine. Everything from stepping onto an event tile (think doors/stairs/damage tile/etc) to talking to an NPC triggers a function call in the script. This allows every aspect of the plot of the game to be written outside the engine, making it more than just an engine, but an RPG creation engine. I have also developed a mostly functional map editor which currently is used to aid in development of the main game engine, but it will likely be part of a "suite" of programs which make up the creation engine.

Here's some nice screenshots for anyone curious, click on them for larger versions.

Game Play

Quick & Dirty Map Editor

Note: I am not an artist, so many if not all of the graphics are "borrowed" from other RPGs I have found on the internet. I will be posting a list of sources as soon as I find all the relevant URLs. If you would like to know the source of a given image, please feel free to contact me.

Ok, I found the program where i got my tiles from, they are from an RPG project known as O.H.R.R.P.H.C.E.. A very good RPG system, with a very fun wacky sense of humor to it.