| 1 |
ptrace is a Python binding of ptrace library. |
|---|
| 2 |
|
|---|
| 3 |
The binding works on: |
|---|
| 4 |
|
|---|
| 5 |
* Linux version 2.6.20 on i386, x86_64, PPC (may works on Linux 2.4.x and 2.6.x) |
|---|
| 6 |
* Linux version 2.4 on PPC |
|---|
| 7 |
* FreeBSD version 7.0RC1 on i386 (may works on FreeBSD 5.x/6.x) |
|---|
| 8 |
* OpenBSD version 4.2 on i386 |
|---|
| 9 |
|
|---|
| 10 |
Features: |
|---|
| 11 |
|
|---|
| 12 |
* High level Python object API : !PtraceDebugger and !PtraceProcess |
|---|
| 13 |
* Able to control multiple processes: catch fork events on Linux |
|---|
| 14 |
* Read/write bytes to arbitrary address: take care of memory alignment and split bytes to cpu word |
|---|
| 15 |
* Execution step by step using ptrace_singlestep() or hardware interruption 3 |
|---|
| 16 |
* Can use distorm (http://www.ragestorm.net/distorm/) disassembler |
|---|
| 17 |
* Dump registers, memory mappings, stack, etc. |
|---|
| 18 |
* Syscall tracer and parser (strace command) |
|---|
| 19 |
|
|---|
| 20 |
Website: http://fusil.hachoir.org/trac/wiki/Ptrace |
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
Installation |
|---|
| 24 |
============ |
|---|
| 25 |
|
|---|
| 26 |
Read INSTALL documentation file. |
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
Changelog |
|---|
| 30 |
========= |
|---|
| 31 |
|
|---|
| 32 |
Version 0.3.2 (2008-07-25) |
|---|
| 33 |
-------------------------- |
|---|
| 34 |
|
|---|
| 35 |
* Rewrite ip_int2str() using inet_ntoa() to avoid IPy dependency |
|---|
| 36 |
* Add kill() and unlink() syscall prototypes |
|---|
| 37 |
* Fix sign conversion error in ptrace() to fix error detection |
|---|
| 38 |
* Catch OSError in ptrace.disasm (unable to find libdistorm64.so) |
|---|
| 39 |
* PtraceDebugger.addProcess(): detach the process on exception |
|---|
| 40 |
* Breakpoint: don't store bytes if the process is not running anymore |
|---|
| 41 |
* writeError() now re-raise KeyboardInterrupt |
|---|
| 42 |
* PtraceProcess: don't detach or terminate process if it is was running |
|---|
| 43 |
* PtraceProcess: never send SIGTRAP signal to a process! |
|---|
| 44 |
|
|---|
| 45 |
Version 0.3.1 (2008-07-08) |
|---|
| 46 |
-------------------------- |
|---|
| 47 |
|
|---|
| 48 |
Minor update: |
|---|
| 49 |
|
|---|
| 50 |
* ptrace.ctypes_errno: use ctypes_support.get_errno() when it's available |
|---|
| 51 |
* Create RUNNING_PYPY constant is ptrace.os_tools |
|---|
| 52 |
* Remove ptrace dependency from ptrace.pydistorm to be able to use |
|---|
| 53 |
it outside ptrace |
|---|
| 54 |
|
|---|
| 55 |
Version 0.3 (2008-03-26) |
|---|
| 56 |
------------------------ |
|---|
| 57 |
|
|---|
| 58 |
* Support OpenBSD i386 |
|---|
| 59 |
* Use ptrace_io() on FreeBSD for faster readBytes()/writeBytes() methods |
|---|
| 60 |
* Use ptrace_peekuser() to read registers on OS without ptrace_getregs() |
|---|
| 61 |
(eg. Linux 2.4 on PPC) |
|---|
| 62 |
* Breakpoint works on PPC CPU (use TRAP instruction) |
|---|
| 63 |
* Delete process and raise ProcessExit on abnormal process death |
|---|
| 64 |
(eg. detected by waitpid(pid)) |
|---|
| 65 |
* Write new Python binding to distorm64 library |
|---|
| 66 |
* gdb.py: create "backtrace" command |
|---|
| 67 |
* gdb.py: support operators in expressions (eg. $eip+4) |
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
Version 0.2 (2008-02-14) |
|---|
| 71 |
------------------------ |
|---|
| 72 |
|
|---|
| 73 |
* Able to trace multiple processes |
|---|
| 74 |
* Many new gdb.py commands: hexdump, signal, print, etc. |
|---|
| 75 |
* Support i386 (Linux, FreeBSD), x86_64 (Linux) and PPC (Linux) |
|---|
| 76 |
* Guess reason why a signal is sent: invalid memory read, stack |
|---|
| 77 |
overflow, division by zero, etc. |
|---|
| 78 |
* Create simple C program to test strace.py and gdb.py |
|---|
| 79 |
* Move files to three main modules: ptrace.binding, ptrace.syscall |
|---|
| 80 |
and ptrace.debugger |
|---|
| 81 |
|
|---|
| 82 |
Version 0.1 (2008-02-08) |
|---|
| 83 |
------------------------ |
|---|
| 84 |
|
|---|
| 85 |
* First public release |
|---|
| 86 |
|
|---|