So I figured that I would post some of the progress with EDB. I’ve been very happy with the function analysis engine that I developed, but there is one thing that it completely ignores, basic block analysis. Of course in order to identify functions it does technically break things down into blocks, but this information is discarded when a whole function is identified.
The main reason for this is that I had no real practical way to display this information in a useful way to users. A list of blocks wouldn’t do, there would simply be to many for anyone to make sense of them. Some other tools have a nice solution though…graphs :).
So I figured that it’s time EDB got a graphing plugin of sorts. And that’s where my focus has been lately. Finally after playing with the awesome QGraphicsView API, I have some results that are worth noting.
As you can see, it is looking pretty nice. All of the nodes are draggable so if you don’t like how it is layed out, you can adjust it. Of course it isn’t quite ready yet, otherwise I would have just tossed it into EDB and bumped the version. There are two major things I need to figure out.
- How big do I make the whole scene? Right now I just go with “very big”, but eventually, I’ll have to figure this out based on the content. This is very dependant on issue #2 though…
- I have no automatic layout engine. Currently in my test code, I’ve manually placed each node. This is likely to prove very difficult, but I’ll get there (Obviously if any graph experts out there want to help, feel free to email me ;-)).
Beyond that, I’m feeling pretty good about how it works.
You may be wondering why I didn’t just use GraphViz. Well, to be honest, I looked into it. But there didn’t seem to be any nice and simple way to get the results into a Qt widget. As far as I can tell, the API revolves around programatically generating a .dot file, and sending that through one of the graphviz renderer’s. Then taking the output file and finally displaying it. I don’t like all the temporary files and the dependency on external programs. I’m not a fan of “front-ends” in general, otherwise EDB would just be another GDB front end.
Though if I could do a pure library solution, I could work with the temporary files. Obviously I could have missed something in graphviz, if so, let me know :).
I hope to have things nice and ready for release soon.