Commit graph

76 commits

Author SHA1 Message Date
Jeffrey Crowell
7436b51095 add r_reg_32_to_64 for @condret
closes #5206
2016-06-25 00:03:44 -04:00
pancake
e4eb7e5ee9 Workaround for enum vs type swig hack 2016-06-22 19:43:19 +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
2138ca700c Fix #5019 - registers are now accessible by index 2016-05-31 14:11:09 +02:00
Karol Harasim
cdd4f70814 Add support for pch (2 byte C dump mode) (#5047) 2016-05-31 13:35:31 +02:00
pancake
740e43eadd Fix some segfault and consistencies 2016-04-04 01:59:30 +02:00
Mizari
59d614edf1 Added drw/arw command + r_reg_arena_set_bytes 2016-03-22 11:48:42 +01:00
pancake
7bef915a8d Implement arC/drC to show comments in regprofiles 2016-01-09 03:14:18 +01:00
pancake
4e6be05f62 ARM's SP is r13 and add LR in r14 2015-12-31 14:10:11 +01:00
pancake
92c1631a06 More indent fixes 2015-12-09 00:41:44 +01:00
pancake
85ba262c17 Fix #3761 - Fix drd and add aras command to swap arenas 2015-11-25 15:20:25 +01:00
pancake
cffa44b2f7 Add ara command and fix RReg.arena.push/pop implementation 2015-11-24 00:58:03 +01:00
pancake
5c99eb0c3f Uppercase register aliases 2015-10-31 01:59:01 +01:00
pancake
35f97e3862 Add register profile for AVR 2015-10-13 23:01:30 +02:00
pancake
5d0bdd4481 Enhacements to ease the iOS debugger development 2015-09-21 23:40:17 +02:00
pancake
4506a98cff Add arena.peek/poke, and fix emulation for asm.esil.anal 2015-09-10 01:42:56 +02:00
pancake
7a871d4cb5 Add drm command to get/set packed registers. Old drm is now drf 2015-08-23 04:43:31 +02:00
pancake
f776f5a515 Implement RReg API for long double and packed registers 2015-08-23 03:58:49 +02:00
pancake
9392424e30 Fix #2397 and #2398 - honor syscall args in dcs on linux-x86-64 2015-04-18 10:35:57 +02:00
jvoisin
a8937732b8 Fix all 'warning: function declaration isn’t a prototype [-Wstrict-prototypes]' 2015-01-13 03:40:35 +01:00
pancake
b7e1dc4354 Fix #1698 - dr rflags=cpz is now supported 2014-11-18 17:22:43 +01:00
trndr
567bcd39f1 Add bigendian register byteswap 2014-11-04 02:17:35 +01:00
pancake
42232354a7 Add 'ai' - address info, Enhace 'ad' (support patterns and sequences)
- ai shows: exec,read,write,flag,func,stack,heap,reg
- Add r_reg_regset_get()
- Implement r2.cmdj in r2.js
2014-10-15 02:24:22 +02:00
pancake
7029eab6af Enforce register arena, better fit size. Fix native mips reg profile size 2014-09-14 02:52:30 +02:00
pancake
63f00d0b0f Implement working ESIL backend for Brainfuck. Requires manual init 2014-09-13 02:24:50 +02:00
LemonBoy
61eaa5cafc Settle the pointer ownership issue once for all 2014-09-13 00:30:15 +02:00
LemonBoy
7833b0427d Rewrite register profile parser to make it cleaner and more robust
- Make all the reg profiles heap-allocated for consistency
- Fail gracefully when the profile has errors
- Minor fixups
2014-09-08 17:41:22 +02:00
pancake
e321c0e62c Add RReg bufdiffing apis to retrieve list of modified regs 2014-06-26 12:18:45 +02:00
pancake
2408ce9a42 Fix segfault in esil for arm-thumb and colorize 'ar?' 2014-06-19 04:52:28 +02:00
pancake
5c209802a7 More work on arm-thumb-capstone + esil 2014-06-19 04:03:11 +02:00
pancake
148733b7a1 Add linux-arm64 reg profile, fix linux-arm systracing. Handle multiple syscall stoppers in 'dcs' 2014-06-14 02:02:58 +02:00
pancake
2397c956c9 Use R2_ as unique header guard prefix 2014-03-27 16:34:17 +01:00
pancake
d3af1ea077 Fix #723 - header guards conforming to C standards 2014-03-27 02:32:26 +01:00
pancake
891a1e5bb8 Implement 'drx' command in RDebug plugin backends 2014-01-28 04:08:10 +01:00
pancake
01a2b485e7 Implement 'drc' command with all the RRegCond magic
- Fix all debug register profiles
- Support for X86 and ARM
- Allow to check conditional instructions
2014-01-08 23:23:06 +01:00
pancake
3e3092ac09 Add RRegCond api 2014-01-07 04:29:56 +01:00
pancake
04cfefb9d8 Fixes on dyldcache list and x86 branch analysis
Fix some branch analysis issues for x86
Add new simpler r_reg api r_reg_getv()
Store library offset in dyldcache xtract info
Accessible via rabin2 -A or r2 <file>
Looks like dyldcache is too slow and buggy for latest caches
Fix indentation in branch comments
2013-06-20 02:49:39 +02:00
pancake
bc0104563b Initial support for runtime versioned libraries
- This check will ensure you are running the latest r2 version.
2013-06-14 02:51:33 +02:00
Anton Kochkov
e075a18b56 Types cleanups 2012-07-22 12:01:39 +04:00
pancake
25f9abac3b * Oops. fix build 2012-03-07 18:18:22 +01:00
pancake
05a0196690 * Fix osx-x86-32 debug register profile
* Some struct->typedef renaming
2012-03-07 10:43:02 +01:00
pancake
2810f68d65 * Fix doublefree in reg_profile that was causing random segfaults 2011-04-02 18:55:47 +02:00
pancake
daff6aff5d * Fix set_reg_profile callback in r_anal_arm
* Fix dupness issue between RDebug and RAnal sharing RReg
  - Move reg_profile string into inner RReg
* Remove vm.arch setup in rasm2 -ri
2011-03-24 00:54:09 +01:00
pancake
98cc88700d * Added much more detailed vapis
- Enhaces API support for valaswig bindings
  - I'm probably breaking the build
2010-10-28 00:55:07 +02:00
pancake
124786c1ac * Added 'drd' command to show only modified regs
* Added r_list_foreach_prev()
* Add RSyscallPort to handle Hardware I/O ports
* Remove libr/TODO and refactor /TODO
* Link with 'ld' in rarc2-tool for nasm
2010-09-24 16:45:56 +02:00
pancake
84dd63b743 * Add 'bf' command to change block size based on flag size
- Added help in 'b?'
* Added support for bit-collection registers
  - eflags is now displayed as a string
  - debug/p/debug_native.c needs a correct x86 flag string
* Fix segfault when listing empty register sets
2010-09-24 04:09:39 +02:00
pancake
46aa9f5f7e * Implement stacked register storage
- Add support for register diffing
  - Colorize modified registers are step/cont
  - Add command 'dro' to show old register values
  - requires make clean
2010-09-23 20:42:35 +02:00
pancake
b339189b5f * Added r_reg_arena_set and r_reg_cmp in order to implement regdiffing
* Added R_DBG_REASON enums
2010-09-20 14:02:45 +02: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
a580ff4fa8 * Initial implementation of the subclassed RLFList class
- Implements a serialized RFList inside a RList container
  - Allows faster scans on contents
* Initial import of the RAnalCond/Value code
  - Not yet usable..just refactoring..
  - Handle null pointers in reg classes
* Added not-yet-working emit_arm.c for r2rc tool
2010-06-16 09:42:46 +02:00