Changelog
=========

python-ptrace 0.6
-----------------

User visible changes:

 * python-ptrace now depends on Python 2.5
 * Invalid memory access: add fault address in the name
 * Update Python 3.0 conversion patch
 * Create -i (--show-ip) option to strace.py: show instruction pointer
 * Add a new example (itrace.py) written by Mark Seaborn and based
   on strace.py

API changes:

 * PtraceSyscall: store the instruction pointer at syscall enter (if the
   option instr_pointer=True, disabled by default)
 * Remove PROC_DIRNAME and procFilename() from ptrace.linux_proc

Bugfixes:

 * Fix locateProgram() for relative path
 * Fix interpretation of memory fault on MOSVW instruction (source is ESI and
   destination is EDI, and not the inverse!)

python-ptrace 0.5 (2008-09-13)
------------------------------

Visible changes:

 * Write an example (the most simple debugger) and begin to document the code
 * gdb.py: create "dbginfo" command
 * Parse socket syscalls on FreeBSD
 * On invalid memory access (SIGSEGV), eval the dereference expression to get
   the fault address on OS without siginfo (eg. FreeBSD)
 * Fixes to get minimal Windows support: fix imports, fix locateProgram()

Other changes:

 * Break the API:
   - Rename PtraceDebugger.traceSysgood() to PtraceDebugger.enableSysgood()
   - Rename PtraceDebugger.trace_sysgood to PtraceDebugger.use_sysgood
   - Remove PtraceProcess.readCode()
 * Create createChild() function which close all files except stdin,
   stdout and stderr
 * On FreeBSD, on process exit recalls waitpid(pid) to avoid zombi process


python-ptrace 0.4.2 (2008-08-28)
--------------------------------

 * BUGFIX: Fix typo in gdb.py (commands => command_str), it wasn't possible to
   write more than one command...
 * BUGIFX: Fix typo in SignalInfo class (remove "self."). When a process
   received a signal SIGCHLD (because of a fork), the debugger exited because
   of this bug.
 * BUGFIX: Debugger._wait() return abnormal process exit as a normal event,
   the event is not raised as an exception
 * PtraceSignal: don't clear preformatted arguments (eg. arguments of execve)

python-ptrace 0.4.1 (2008-08-23)
--------------------------------

 * The project has a new dedicated website: http://python-ptrace.hachoir.org/
 * Create cptrace: optional Python binding of ptrace written in C (faster
   than ptrace, the Python binding written in Python with ctypes)
 * Add name attribute to SignalInfo classes
 * Fixes to help Python 3.0 compatibility: don't use sys.exc_clear()
   (was useless) in writeBacktrace()
 * ProcessState: create utime, stime, starttime attributes

python-ptrace 0.4.0 (2008-08-19)
--------------------------------

Visible changes:

 * Rename the project to "python-ptrace" (old name was "Ptrace)
 * strace.py: create --ignore-regex option
 * PtraceSignal: support SIGBUS, display the related registers and
   the instruction
 * Support execve() syscall tracing

Developer changes:

 * New API is incompatible with 0.3.2
 * PtraceProcess.waitProcessEvent() accepts optional blocking=False argument
 * PtraceProcess.getreg()/setreg() are able to read/write i386 and x86-64
   "sub-registers" like al or bx
 * Remove iterProc() function, replaced by openProc() with explicit
   call to .close() to make sure that files are closed
 * Create searchProcessesByName()
 * Replace CPU_PPC constant by CPU_POWERPC and create CPU_PPC32 and CPU_PPC64
 * Create MemoryMapping object, used by readMappings() and findStack() methods
   of PtraceProcess
 * Always define all PtraceProcess methods but raise an error if the function
   is not implemented

Version 0.3.2 (2008-07-25)
--------------------------

 * Rewrite ip_int2str() using inet_ntoa() to avoid IPy dependency
 * Add kill() and unlink() syscall prototypes
 * Fix sign conversion error in ptrace() to fix error detection
 * Catch OSError in ptrace.disasm (unable to find libdistorm64.so)
 * PtraceDebugger.addProcess(): detach the process on exception
 * Breakpoint: don't store bytes if the process is not running anymore
 * writeError() now re-raise KeyboardInterrupt
 * PtraceProcess: don't detach or terminate process if it is was running
 * PtraceProcess: never send SIGTRAP signal to a process!

Version 0.3.1 (2008-07-08)
--------------------------

Minor update:

 * ptrace.ctypes_errno: use ctypes_support.get_errno() when it's available
 * Create RUNNING_PYPY constant is ptrace.os_tools
 * Remove ptrace dependency from ptrace.pydistorm to be able to use
   it outside ptrace

Version 0.3 (2008-03-26)
------------------------

 * Support OpenBSD i386
 * Use ptrace_io() on FreeBSD for faster readBytes()/writeBytes() methods
 * Use ptrace_peekuser() to read registers on OS without ptrace_getregs()
   (eg. Linux 2.4 on PPC)
 * Breakpoint works on PPC CPU (use TRAP instruction)
 * Delete process and raise ProcessExit on abnormal process death
   (eg. detected by waitpid(pid))
 * Write new Python binding to distorm64 library
 * gdb.py: create "backtrace" command
 * gdb.py: support operators in expressions (eg. $eip+4)


Version 0.2 (2008-02-14)
------------------------

 * Able to trace multiple processes
 * Many new gdb.py commands: hexdump, signal, print, etc.
 * Support i386 (Linux, FreeBSD), x86_64 (Linux) and PPC (Linux)
 * Guess reason why a signal is sent: invalid memory read, stack
   overflow, division by zero, etc.
 * Create simple C program to test strace.py and gdb.py
 * Move files to three main modules: ptrace.binding, ptrace.syscall
   and ptrace.debugger

Version 0.1 (2008-02-08)
------------------------

 * First public release

