Christoph Egger [Tue, 2 Jun 2015 21:16:06 +0000 (23:16 +0200)]
Run the disassembler in it's own thread
Makes the gui responsive while the disassembler is working. Would also
allow for severall worker threads in the disassembler in the future --
and more cool stuff!
Christoph Egger [Tue, 2 Jun 2015 21:15:15 +0000 (23:15 +0200)]
Pass NewFunctionEvents as objects, not pointers
The current assumption -- emit will only return once all signal
handlers are done -- is false when cross-thread signals
happen. Therefore we can't assume the stack-allocated event is alive
long enough to just pass pointers. We're copying that object now which
should be pretty small and don't get any memory leaks or lifeness
problems.
Christoph Egger [Tue, 2 Jun 2015 21:11:18 +0000 (23:11 +0200)]
Make LogDock and LogDockAppender communicate by signals
This way the Appender can work in a different thread from the gui dock
without causing problems. Also we no longer need to make the Appender
a friend of the gui dock and instead make the dock handle it's own
affairs
Christoph Egger [Tue, 26 May 2015 16:04:24 +0000 (18:04 +0200)]
in populateWidget create new TextDocument and attach it at the end
This is a *huge* performance improvement. Instead of using the
QTextDocument already attached to the QGraphicsTextItem, we create a
new QTextDocument and fill it. Only at the end of populateWidget() we
attach it to the QGraphicsTextItem. This way it will only be layouted
once and not per insert (three times per instruction).
Christoph Egger [Tue, 26 May 2015 13:48:21 +0000 (15:48 +0200)]
Make signals from geiser work
Move geiser to a proper QThread instead of a guile-only thread. This
way it can properly send/receive signals. Also for some obscure reason
the QVector<int> hack is needed for things to work
Christoph Egger [Mon, 25 May 2015 05:23:35 +0000 (07:23 +0200)]
Use protected domainsocket for geiser
Instead of opening a TCP port on localhost, use a UNIX domainsocket to
listen for connections. This way frida is properly protected against
other users on the same system.
Christoph Egger [Mon, 25 May 2015 04:28:32 +0000 (06:28 +0200)]
Fix formating of comments. Should not start with a linebreak
When displaying a comment, an additional linebreak was inserted right
after the ";;" mark and before the first comment. This linebreak is
removed here.
Christoph Egger [Tue, 19 May 2015 17:02:13 +0000 (19:02 +0200)]
Highlight jumptargets
+ Properly handle jmps at the right place in the gui
+ Try to center on the relevant BasicBlock
+ Change color of the BasicBlock
Centering needs us to increase the actual Scene size as well so we can
also center on widgets at the rim of the scene. Bug should only be
closed once this is implemented
Christoph Egger [Fri, 15 May 2015 23:25:20 +0000 (01:25 +0200)]
Handle cancel on InterpreterMenu
getOpenFileName() will return a Null-QString on cancel. Feeding that
filename to guile will die (reasonably) with an exception. Instead, we
now just exit from the handler in the gui if the Null-QString is
returned
Christoph Egger [Thu, 26 Mar 2015 16:45:34 +0000 (17:45 +0100)]
Properly fail if no appropriate Disassembler can be constructed
Currently, for mipsel there is no InstructionAnalysis available for some
reason. frida gives now a errormessage and survives instead of just
segfaulting
Christoph Egger [Thu, 26 Mar 2015 16:43:24 +0000 (17:43 +0100)]
Add testcases for disassembler
Testing basic functionality of the LLVM-based disassembler on amd64/elf
and amd64/MachO. More tests will follow as soon as I get reasonable test
binaries, we should at least also cover PE and arm (maybe ppc, mips, ..)
Christoph Egger [Wed, 25 Mar 2015 17:13:20 +0000 (18:13 +0100)]
Preliminary LLVM-3.6 support
Allows llvm-3.6 in cmake and does compile with 3.6. However it
does *not* work! It will segfault right away. One of the suspects is
different base for addresses used in llvm's getInstruction() and family.
Christoph Egger [Tue, 24 Mar 2015 15:45:27 +0000 (16:45 +0100)]
(De)serialization of Comments
serialization and deserialization of global comments. Local comments
need to go within the function and are not yet implemented. Also
includes several tests
Christoph Egger [Fri, 20 Mar 2015 12:51:56 +0000 (13:51 +0100)]
Bump Cmake compat version
Cmake before 3.0 failed to properly build out-of-tree with SWIG as it
tries to write the generated wrapper to a non-existent directory in the
build folder
Christoph Egger [Wed, 18 Mar 2015 18:31:55 +0000 (19:31 +0100)]
Install the guile-frida-bindings into system library path
Allows using only name in scm_load_module -- can be overwritten for
testing and works with the final binary. Would be even better if we
could hide the module in a private directory but I haven't found a nice
way so far
Christoph Egger [Wed, 18 Mar 2015 16:57:29 +0000 (17:57 +0100)]
Properly allow plugins to load for testing
Loads stuff from the cmake binary directory for testing -- so tests use
the newly built plugins and not some old installed ones (or fail if none
exist)
Christoph Egger [Mon, 16 Mar 2015 16:34:13 +0000 (17:34 +0100)]
Build working `make install` target
Should install the frida binary and the libraries into appropriate
places using the Cmake GNUInstallDirs module. Included is some cleanup
in the guile module.
Christoph Egger [Mon, 16 Mar 2015 15:40:18 +0000 (16:40 +0100)]
Restructure InformationManager
- Signals now all use Event objects to communicate information and all
share a common sane interface
- Organize signals consistently and grup by signal name
- Dynamic and local functions are now handled almost the same
- Changes all over the place to fix users for these changes
- proper iterator access for the maps so one can actually iterate over
all functions (for example a script)
- ignore these iterators where they would be most usefuill (scripting)
untill I figure out how to make SWIG compile them properly
Christoph Egger [Fri, 13 Mar 2015 13:51:29 +0000 (14:51 +0100)]
Basic MachO Support
Currently has no way to find the Entrypoint. Doesn't seem to be too easy
-- we probably need to get it out of the cpu_thread_state struct from
the thread_command in the MachO header.
Christoph Egger [Thu, 12 Mar 2015 15:46:00 +0000 (16:46 +0100)]
[BasicBlockWidget] Adjust inner widget size before drawing
Adjust size of the innner QGraphicsTextItem before getting it's size for
drawing the outer parts. That way the BasicBlockWidget always has the
correct size matching it's content
Christoph Egger [Wed, 11 Mar 2015 15:47:05 +0000 (16:47 +0100)]
Add log widget to lower dock
Make the lower dock container agnostic the former ScriptingDock now is
just taking care of the content inside one of the tabs and the FridaDock
is managing the Dock and TabWidget stuff.
Add a Logging Tab that outputs messages from the logging system for
inspection. Could well be improved (T12 T13 T14).
Christoph Egger [Tue, 10 Mar 2015 15:34:32 +0000 (16:34 +0100)]
Correctly handle function rename
The GUI now handles function rename events also for the list of
functions. One can now rename a function via scripting or in the loader
or in any other way and it will be properly renamed.
Christoph Egger [Tue, 10 Mar 2015 11:34:36 +0000 (12:34 +0100)]
Finish current function before starting next one
When BasicBlocks appear in multiple functions, we ran into the situation
where a unfinished basicblock is included in a different function and
causing bad loops as it's end address wasn't set yet