Commit graph

206 commits

Author SHA1 Message Date
pancake
106fedeef4 Add the 'null' debugger plugin 2017-09-23 02:34:37 +02:00
pancake
94b2fc64d2 Implement RIODescData and adjust RIOMach to work with it
- Handles a magic to ensure the destination struct is the expected one
- Based on r_str_hash, but it must be cached
- Use more r_io_desc_get_pid ()
2017-09-11 01:24:13 +02:00
Ren Kimura
d0cceb49ef Add dir.dbgsnap for the backstep debugger snapshots 2017-08-11 17:06:03 +02:00
Ren Kimura
7ce197eb44 Add initial support for hw watchpoint (#8132)
* Add initial support of hw watchpoint

* Fixed parse bug

* Fixed rwx str
2017-08-06 05:27:01 +02:00
xarkes
3d681b0fe5 Renamed windbg plugin (#8117) 2017-08-03 14:58:39 +02:00
javierptd
edfd37e7e4 first PR heap jemalloc analysis 2017-08-03 13:08:21 +02:00
leberus
f3d11405e7 Fix debug for Linux 2017-08-02 14:49:56 +02:00
Ren Kimura
3ffc7e1831 Fixed type confusion of free functions (#8072) 2017-07-31 18:30:05 +02:00
Ren Kimura
b294c3e0d7 Add dcb (debug continue back) command (#7979)
* Add dcb (debug continue back) command
* Add braces
2017-07-23 14:47:11 +08:00
Ren Kimura
432dcb0a5b Add dts- and dtsC commands (#7939) 2017-07-17 14:13:43 +02:00
pancake
f36cd87cb1 Partial fix for #7545 2017-07-09 13:15:13 +02:00
Ren Kimura
bd3247c03b Add dtst and dtsf commands for save and restore sessions. (#7880)
* Add memory diff dump function
* Add base snapshot dump
* Add resotring function
* Fixed some bugs
* Fixed code format
* Removed packed attribute
2017-07-09 12:36:00 +02:00
Xiao Di Guan
6ae9d891db Fix xnu_wait stopping prematurely (#7744) (#7745)
* Fix xnu_wait stopping prematurely (#7744)
* Use task_swap_exception_ports (instead of *get* then *set*)
* Add new debugger stop reason for user-initiated breaks
* Stop the inferior when `dw` is interrupted (#7744)
* Stop the inferior after attaching
2017-06-24 17:57:11 -05:00
Ren Kimura
0adb01dcb8 Fixed wrong logic of forward execution of dsb (#7798)
* Fixed wrong logic of forward execution of dsb

* Fixed typo
2017-06-21 07:52:14 -05:00
Ren Kimura
32042123e2 Add plain checkpoint system (#7782) 2017-06-20 05:09:58 -05:00
Srimanta Barua
683e115ee5 Moved r_debug_get_baddr to debug API 2017-06-14 15:38:10 +02:00
Ren Kimura
487b305a8d Changed finding logic of session key (#7719) 2017-06-10 12:38:23 +02:00
Ren Kimura
3dcd3b79bd Renewed dsb command for new session format (#7651) 2017-06-01 10:47:12 +02:00
pancake
ba6dce4d73 Add REgg as dependency of RDebug 2017-05-28 22:38:10 +02:00
Srimanta Barua
06aae3080e Added kill signal for gdb client 2017-05-25 15:41:07 +02:00
Ren Kimura
d3f5773219 Add new trace session format 2017-05-23 19:37:11 +02:00
Ren Kimura
de259c83d1 Add diff-style memory snapshot 2017-05-20 12:37:45 +02:00
0x0dada
7327642241 Fix incorrect modes various .c files. (#7287) 2017-04-16 10:10:04 +02:00
pancake
94d85cad32 Fix #7213 - Retrieve UID on XNU and Linux for RDebugPid 2017-04-09 23:41:32 +02:00
alvarofe
aa4374d347 Add missing definition r_debug_step_back 2017-03-27 00:29:31 +02:00
Ren Kimura
ce5758b739 Add reverse singlestep command 'dsb' (#7116) 2017-03-25 16:00:25 +01:00
Ren Kimura
863e3566d2 Add snap_set command (#7032) 2017-03-16 10:09:17 +01:00
pancake
5057cb6fb6 Update ABI for debug, core and anal plugs 2017-02-28 02:29:54 +01:00
alvarofe
f33febdd4f Remove r_db.h 2017-02-24 23:42:17 +01:00
leberus
c5149f97b7 Fix: Fixed regression pointed by #6650 (#6672) 2017-02-03 18:20:07 +01:00
Lars Haukli
71cc67e390 Windows debugger: Added dce command. Fixed dmm commands. (#6628)
* Use double quotes to make .dmm* work on Windows
* Fix r2pipe.cmdj('dmmj') command on Windows. Report correct path when listing modules ('dmm')
* Removed unused local variable
* Added 'dce' command for windows
* Escape backslashes for JSON output only
* Do not include r_debug_native_continue() for __CYGWIN__ builds. Removed unnecessary memset.
* Added exception for CYGWIN to not escape backslashes in path
* Escape backslashes in both file paths and map names. Use map name for 'f mod.%s' instead of file path
* Added more exceptions for CYGWIN
* Validate escaped strings
2017-02-02 13:27:39 +01:00
leberus
4fd1e990d9 Add: coredump refactoring + RDebugMap offset field (#6633) 2017-02-01 22:17:59 +01:00
leberus
286ca4d0ed Add: support for dbg.follow.child option (#6525) 2017-01-18 00:40:30 +01:00
leberus
dc5be7a767 Improving debug on linux (#6435) 2017-01-11 17:39:09 +01:00
SkUaTeR
8e6be1b54b Thread list and some fixes for the w32 debugger (#6355) 2016-12-21 09:07:58 +01:00
pancake
6296f4b794 Add option to stop syscall tracing -before- the syscall is executed 2016-12-09 22:19:47 +01:00
pancake
d26917a0a2 Fix #6141 - implement pkill 2016-12-09 18:12:38 +01:00
SkUaTeR
20a9bbd14a Rreg fpu changes (#6191)
* test with rreg for values greater than 64
* check for redirected regs in debug reg sync
2016-11-14 23:58:29 +01:00
dromero
ac644878a8 Send KILL to child on ^C in dc when dbg.consbreak is set 2016-11-06 00:46:10 +01:00
pancake
94d47c79bb Completely remove all references to list.h 2016-10-27 13:33:27 +02:00
pancake
466c9ff066 Initial implementation of the RDebug.io plugin 2016-10-08 02:39:50 +02:00
pancake
41d6e9edde Add bash autocompletion support 2016-10-04 14:34:06 +02:00
Tiago Gasiba
f0a2d8657d Add support for conditional breakpoints running r2 commands 2016-09-01 19:11:46 +02:00
Joshua J. Drake
329acd33e4 Fix #5196: Make tracepoints work again
To accomplish this, we add a new debug stop reason R_DEBUG_REASON_TRACEPOINT
and return it from r_debug_wait whenever a tracing breakpoint is hit. Then, in
r_debug_continue_kill, we recognize this state and do the old r_debug_step
trick to progress the session. Previous rework of r_debug_recoil takes care of
the heavy lifting and we continue on our way.
2016-07-02 05:14:56 +03: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
Joshua J. Drake
0431a0efdf Properly handle forks on Linux 2.5.46+ (#5153)
Linux 2.5.46 made changes to the ptrace(2) API to inform a tracer when various
events occur. These are known as PTRACE_EVENTs. Start handling PTRACE_EVENTs
by:

 * Handling PTRACE_EVENT_FORK and PTRACE_EVENT_EXIT
 * For _FORK, stores the newly created pid in dbg->forked_pid
 * Add the "dpc" command to select the most recently forked child process.
 * Add the "dpc*" command to show the recently forked process' pid.

Additional minor changes to white space are included.

NOTE: This partially addresses #3549. It does handleLinux before 2.5.46.
2016-06-17 04:20:18 +02:00
pancake
608b79d2b4 Finally fix the build on osx-ppc 2016-06-06 17:30:07 +02:00
pancake
95b2e511f5 Fix some warnings 2016-06-01 12:23:10 +02:00
Álvaro Felipe Melchor
6b827c1563 Fix #4796 - Add dbm aka module relative breakpoints 2016-05-16 01:00:11 +02:00