Changelog

python-ptrace 0.9.9

  • Fix arguments of pipe/pipe2 system calls for proper display in call format. Patch by José Pereira.
  • Introduced support for three-digit minor device IDs in PROC_MAP_REGEX. Patch by fab1ano.
  • Added RISCV (riscv32/riscv64) support. Patch by Andreas Schwab and vimer/yuzibo.
  • Fix stray exception raised by child processes terminating with exit code 255. Path by Duane Voth/duanev

python-ptrace 0.9.8 (2021-03-17)

  • Added Arm 64bit (AArch64) support.
  • Implemented PTRACE_GETREGSET and PTRACE_SETREGSET required on AArch64 and available on Linux.
  • Issue #66: Fix SIGTRAP|0x80 or SIGTRAP wait in syscall_state.exit (PTRACE_O_TRACESYSGOOD).
  • The development branch master was renamed to main. See https://sfconservancy.org/news/2020/jun/23/gitbranchname/ for the rationale.

python-ptrace 0.9.7 (2020-08-10)

  • Add missing module to install directives
  • Update README.rst
  • Project back in beta and maintenance

python-ptrace 0.9.6 (2020-08-10)

  • Remove RUNNING_WINDOWS constant: python-ptrace doesn’t not support Windows.
  • Drop Python 2.7 support. six dependency is no longer needed.
  • Add close_fds and pass_fds to createChild() function. Patch by Jean-Baptiste Skutnik.
  • Enhance strace.py output for open flags and open optional parameters. Patch by Jean-Baptiste Skutnik.
  • Add support for PowerPC 64-bit (ppc64). Patch by Jean-Baptiste Skutnik.

python-ptrace 0.9.5 (2020-04-13)

  • Fix readProcessMappings() for device id on 3 digits. Patch by Cat Stevens.
  • Drop Python 2 support.

python-ptrace 0.9.4 (2019-07-30)

python-ptrace 0.9.3 (2017-09-19)

  • Issue #42: Fix test_strace.py: tolerate the openat() syscall.

python-ptrace 0.9.2 (2017-02-12)

  • Issue #35: Fix strace.py when tracing multiple processes: use the correct process. Fix suggested by Daniel Trnka.

python-ptrace 0.9.1 (2016-10-12)

  • Added tracing of processes created with the clone syscall (commonly known as threads).
  • gdb.py: add gcore command, dump the process memory.
  • Allow command names without absolute path.
  • Fix ptrace binding: clear errno before calling ptrace().
  • Fix PtraceSyscall.exit() for unknown error code
  • Project moved to GitHub: https://github.com/haypo/python-ptrace
  • Remove the ptrace.ctypes_errno module: use directly the ctypes.get_errno() function
  • Remove the ptrace.ctypes_errno module: use directly ctypes.c_int8, ctypes.c_uint32, … types

python-ptrace 0.9 (2016-04-23)

  • Add all Linux syscall prototypes
  • Add error symbols (e.g. ENOENT), in addition to error text, for strace
  • Fix open mode so O_RDONLY shows if it’s the only file access mode
  • Python 3: fix formatting of string syscall arguments (ex: filenames), decode bytes from the locale encoding
  • Issue #17: syscall parser now supports O_CLOEXEC and SOCK_CLOEXEC, fix unit tests on Python 3.4 and newer

python-ptrace 0.8.1 (2014-10-30)

  • Update MANIFEST.in to include all files
  • Fix to support Python 3.5

python-ptrace 0.8 (2014-10-05)

  • Issue #9: Rewrite waitProcessEvent() and waitSignals() methods of PtraceProcess to not call waitpid() with pid=-1. There is a race condition with waitpid(-1) and fork, the status of the child process may be returned before the debugger is noticed of the creation of the new child process.
  • Issue #10: Fix PtraceProcess.readBytes() for processes not created by the debugger (ex: fork) if the kernel blocks access to private mappings of /proc/pid/mem. Fallback to PTRACE_PEEKTEXT which is slower but a debugger tracing the process is always allowed to use it.

python-ptrace 0.7 (2013-03-05)

  • Experimental support of Python 3.3 in the same code base
  • Drop support of Python 2.5
  • Remove the ptrace.compatibility module
  • Fix Process.readStruct() and Process.readArray() on x86_64
  • Experimental support of ARM architecture (Linux EAPI), strace.py has been tested on Raspberry Pi (armv6l)

python-ptrace 0.6.6 (2013-12-16)

  • Fix os_tools.RUNNING_LINUX for Python 2.x compiled on Linux kernel 3.x
  • Support FreeBSD on x86_64
  • Add missing prototype of the unlinkat() system call. Patch written by Matthew Fernandez.

python-ptrace 0.6.5 (2013-06-06)

  • syscall: fix parsing socketcall on Linux x86
  • syscall: fix prototype of socket()

python-ptrace 0.6.4 (2012-02-26)

  • Convert all classes to new-style classes, patch written by teythoon
  • Fix compilation on Apple, patch written by Anthony Gelibert
  • Support GNU/kFreeBSD, patch written by Jakub Wilk
  • Support sockaddr_in6 (IPv6 address)

python-ptrace 0.6.3 (2011-02-16)

  • Support distrom3
  • Support Python 3
  • Rename strace.py option –socketcall to –socket, and fix this option for FreeBSD and Linux/64 bits
  • Add MANIFEST.in: include all files in source distribution (tests, cptrace module, …)

python-ptrace 0.6.2 (2009-11-09)

  • Fix 64 bits sub registers (set mask for eax, ebx, ecx, edx)

python-ptrace 0.6.1 (2009-11-07)

  • Create follow, showfollow, resetfollow, xray commands in gdb.py. Patch written by Dimitris Glynos
  • Project website moved to: http://bitbucket.org/haypo/python-ptrace/
  • Replace types (u)intXX_t by c_(u)intXX
  • Create MemoryMapping.search() method and MemoryMapping now keeps a weak reference to the process

python-ptrace 0.6 (2009-02-13)

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 (e.g. 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…
  • BUGFIX: 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 (e.g. 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