33 Commits

Author SHA1 Message Date
Fangrui Song
304c9501fb Fix memory leaks in libr/anal (#7992)
libr/anal/p/anal_x86_cs.c use static variable for `op->{dst,src[0]}->reg` because they are not freed in `r_anal_op_fini`.
libr/core/cmd_anal.c
  + r_anal_op fields of `op` should be freed.
  + cmd_esil_mem leaks are not addressed.
libr/anal/esil.c esil->db_trace should be freed.

Also fix a trivial memset bug in libr/bin/format/elf/elf.c
2017-07-24 09:42:15 +02:00
Ren Kimura
b0157a3f50 Merge dt and at (#7925)
* Duplicate atl and atd commands
* Merge and duplicate att, ata and at- commands
* Merged at* to dt*
* Merged at+ to dt+
* Moved atr to dtr
* Modified dt* message
* Moved atD to dtD
* Moved esil trace commands, ate to dte
* Duplicate at command
* Fixed some bugs
2017-07-17 14:13:13 +02:00
Ahmed Mohamed Abd El-MAwgood
4f413e7720 initial support for type matching (#5480)
Enabling stepping over
Basic (sym.imp.*) call catching routines
Fixing esil tracing bug and verbosity
Adding some apis for handling function prototypes and abstacting sbd queries
Fixing the double execusion bug in esil tracing
passing types into vars for `stack`
fixing trailing spaces
doing the regester branch
doing the stack_rev
2016-08-13 12:09:14 +02:00
Joshua J. Drake
70ef08de79 Address feedback from PR #5198 (#5260) 2016-07-01 17:41:13 +02:00
Joshua J. Drake
d380a83d23 Invert some logic to avoid nested brace hell (#5198) 2016-07-01 16:15:42 +02:00
Joshua J. Drake
722c62827b Major rework to the native debugger (esp on Linux) (#5185)
The major contribution here is completely re-worked breakpoint hit/recoil
handling. This work fixes #4907 and lays the ground work for future native
debugger improvements (multi-threading, etc).

* Give a human friendly type to enums
* Change many wait functions to return RDebugReasonType
* Better return checking (from r_debug_reg_sync, r_bp_restore)
* Optimized register synchronization
* Lots of comments and whitespace changes
* Improved inferior death detection

Handle EXIT_PID events differently than DEAD process events

* Move breakpoint/recoil handling to wait/cont/step

Rather than handing breakpoint related things inside cmd_debug.c, do that
inside the r_debug API functions. This seems like the most logical place for it
to live since it should apply to just about any platform/architecture.  This
also centralizes calling into "cmd.bp" handling via the CoreBind callback.

* Track how the caller wishes to continue

It turns out that handling break point recoils is very complicated. The ptrace
API on Linux returns SIGTRAP for just about every type of operation (not just
breakpoints getting hit). Add the "recoil_mode" flag to indicate whether we are
single-stepping or continuing and whether or not we are inside the recoil.

* Proper handling for swstep=true

Since r_debug_step_soft calls r_debug_continue, it's already hitting the recoil
case there. Move the recoil handling from r_debug_step to r_debug_step_hard
only.

For the swstep=true case, special handling is required inside r_debug_recoil.
By resetting all of the breakpoints except the one we just hit, we ensure we
can step the original instruction and hit the new swstep breakpoint. Add a new
bp function called r_bp_restore_except to do this.

To make matters worse, we cannot use a BreakpointItem pointer because that
leads to a use-after-free condition. Instead, we the breakpoint address
instead.

Now breakpoints should work regardless of the swtep setting.

* Always call the recoil before continuing

Some callers of r_debug_continue might not have ever inserted any breakpoints
before. If we don't restore breakpoints before each call to the underlying
continue we won't hit them.

* Hide software step breakpoint events from the user

When a breakpoint even happens due to a software-step, hide it from the user.
They aren't really breakpoints as far as they are concerned.

* Improve process exit handling on Linux

There are three types of process exiting events on Linux:

1. PTRACE_EVENT_EXIT occurs just before a process exits. It's not possible to
prevent it from exiting, but it can be used to inspect the pre-exit state.
2. The process can exit for a variety of reasons and we can notice when we call
waitpid(2).
3. The process could die randomly on us :-/

On Windows, h->wait will return R_DEBUG_REASON_EXIT_PID, but it's more likely
on Linux to find out the process is already dead.

* Check more bits within waitpid status

We can often make a decision about what happened strictly by looking at the
status returned from waitpid. In other cases, we need to call
r_debug_handle_signals.

If we reach the end of this function without knowing what happened, consider it
an error.
2016-06-22 10:34:45 +02:00
pancake
95b2e511f5 Fix some warnings 2016-06-01 12:23:10 +02:00
Sven Steinbauer
547f8bbc5c Infer fixes Round 2 (#4993) 2016-05-24 22:22:15 +02:00
pancake
49975ccf95 Fix #3286 - Use stdbool.h 2015-09-14 02:08:31 +02:00
pancake
1f277f72e9 Add asm.indentspace and implement .atd and atl 2015-08-12 10:40:24 +02:00
shuall
0807686d86 #3052 all printf member functions changed to cb_printf 2015-08-09 03:25:05 +02:00
pancake
66ead9b96b Add ate command for the anal trace logs with ESIL (and backstepping)
- r2 -e dbg.trace=true -e anal.trace=true -d ls
> 10ds  # perform 10 steps
> ate   # show anal trace logs
> .ate `atek idx` # backstepping
> ate-* # clear logs
2015-02-22 11:40:55 +01:00
pancake
6a6290a4da Implement Sdb in RDebug.Traces. O(n) vs O(1) in pd with asm.traces=true 2014-11-02 01:21:45 +01:00
pancake
6fcd870a5c Bring back asm.trace and dbg.trace to life 2014-10-30 23:58:22 +01:00
fr33tux
3d801f90ff Remove r_list_destroy, replaced it by r_list_purge 2014-05-03 01:27:10 +02:00
pancake
322a8a7654 Fix build for latest refactoring 2013-12-06 05:18:57 +01:00
Fedor Sakharov
13547a0bbf Fix #370 - Some memory leaks
Fix memory leak in r_config_new.
  cfg->nodes->free should be a custom function that frees RConfigNode
  structure correctly, but not the ordinary free.
Fix memory leak in r_anal_new.
  In r_anal_free need to call r_meta_free to free the
  whole RMeta structure, not only it's data list.
  The r_meta_free doesn't seem to have any leak itself.
Fix leaking anal->hints.
Fix memory leaks in r_cmd_free
Fix memory leak in r_cmd_plugin_init
Fix memleak in r_lib_new
Fix memory leak in r_io_plugin_init
Fix memory leak in r_debug_trace_new
Fix memory leaks in r_io_new
Fix memory leak in r_graph_new
Fix memory leak in r_sys_getdir.
  Note: calling getcwd with dir=NULL is a Linux-specific extension
  of POSIX, not sure if works on other non-windows platforms.
Fixes a typo
2013-11-19 01:51:40 +01:00
pancake
7c1e0c85d9 Support for remote raw commands (client/server)
See the '.:' command
Full integration with awk bindings
Add install make target for the awk bindings
Handle as debug mode if io->file->debug
Fix typo quite/quiet in rabin2
Resolve $pc,$bp,$sp,$a0.. in r_core_num
Minor random fixups
2012-11-05 02:00:34 +01:00
pancake
be6c39c54f * Use r_list_foreach[_safe] where appropriate. 2012-02-14 18:19:16 +01:00
pancake
a43068bde0 * brainfuck debugger is finally usable
- Added breakpoint and code analysis plugins for bf
  - *mem++ != mem[0]++
  - Full register get/set support
  - Support for step and continue-until-syscall
  - Work in progress breakpoint support
* Added bfvm_reset() hooked to plugin->kill
* Enhacements in r_core and r_debug for better debugger support
  - Added plugin->step_over delegate
2011-10-09 04:15:32 +02:00
pancake
4c0b8f437b * Added 'pw' and 'pq' commands to print 32bit and 64bit hex values
* Autocomplete 'dcu' argument
* Analyze [pc+delta] mov and lea opcodes on x86-64
  - Resolves indirect string pointers for ObjectiveC binaries
* Handle UCALL in dso
* Fix x86-64 register profile for OSX
* Implement r_mem_get_num()
* Various fixes in 'pf' command
2011-06-09 01:20:02 +02:00
Nibble
332524e120 * Rename r_anal_aop_* to r_anal_op_*
--HG--
rename : libr/anal/aop.c => libr/anal/op.c
2011-02-24 14:06:49 +01:00
Nibble
f3f094117a * Huge refactoring of r_anal code and API 2011-02-11 11:22:43 +01:00
pancake
7c844bb576 * Fix all vapi files fixing valaswig bindings
- Implement missing methods
2010-11-24 23:19:17 +01:00
pancake
1356a9bdd1 * Highlight destination offset when cursor on jmp/call in visual
* Show call decompilations under the opcode as a comment
* Rename RRegister as RReg
  - Deprecate r_reg_init and use r_reg_new
  - Rewrite the list.h dependency in r_reg in order to use r_list
  - Fix some memory leaks
* Implement push/pop methods in RReg class
  - add test case using it
  - will be used for register diffing and tracing
2010-09-18 02:51:17 +02:00
pancake
9587e5ac9a * Implement #md5 #md4 #sha1 #sha256 #sha512
* Fix r_print flags in visual
* Fix r_debug_trace_pc
* Import some macros from bithacks.h
2010-07-16 00:02:33 +02:00
pancake
4f8fc7d926 * Added traced field in RAnalBB
- Display 'traced' flag in 'abl' command
* Initial work on 'dd' command (filedescriptors)
  - API defined, not yet implemented or used
2010-06-18 11:09:19 +02:00
pancake
23ad3d2415 * Added asm.linescall=false (default)
- Implemented in anal_reflines to skip call analysis for lines
* Set dbg.trace=true by default
* Display trace count and times in 'pd' (asm.trace)
  - counter starts as 1, not 0 :)
* Added 'absolute' variable in RAnalValue (not yet used..)
  - Defines the sign of the value (needs arch-dependent code)
* Sync TODO files
2010-06-17 02:22:50 +02:00
pancake
f0cca138db * Fix 'bx lr' and 'ldr pc,[pc,#]' code analysis for arm
* Added 'ata' command to specify a list of valid traceable adddresses
* some initial work on r_db.. iterators not yet supported
2010-06-13 11:59:17 +02:00
pancake
c9a403cf71 * More work on 'at' command
* RRange ported to r_list (not yet tested)
* Fix r_cmd.vapi RCmdPlugin struct definition
2010-06-04 23:47:35 +02:00
pancake
b7c554b24a * Some linkage fixes for binr/
* Added 'at' command (not yet implemented at all)
  - Some refactoring in r_debug_trace code
  - Remove deprecated r_trace.h
2010-06-04 00:56:44 +02:00
pancake
34435b1285 * Mental note: %lld/%llx does not exist on windows
- Use the macro PFMT64{xod} in case
2010-04-14 13:02:23 +02:00
pancake
da9c4a21c4 * Remove debug printf in elf.c
* Oops. add missing trace.c
* Remove trash from old trace
2010-03-12 19:11:43 +01:00