.\" Man page generated from reStructuredText .\" by the Docutils 0.22.3 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PYTHON-PTRACE" "1" "Dec 14, 2025" "0.9.9" "python-ptrace" .SH "نام (NAME)" python\-ptrace \- مستندات ابزار اشکال‌زدایی python-ptrace [تصویر: عدم نگهداری پروژه] [تصویر] \% .sp \fBاین پروژه دیگر نگهداری نمی‌شود و به دنبال یک نگه‌دارنده جدید است.\fP .sp python\-ptrace یک اشکال‌زدای (debugger) نوشته‌شده به زبان پایتون است که از فراخوان سیستمی ptrace (در Linux، BSD و Darwin برای ردیابی فرآیندها) استفاده می‌کند. .INDENT 0.0 .IP \(bu 2 مستندات python\-ptrace \% .IP \(bu 2 python\-ptrace در GitHub \% .IP \(bu 2 python\-ptrace در نمایه بسته‌های پایتون (PyPI) \% .UNINDENT .sp python\-ptrace یک پروژه متن‌باز نوشته‌شده به زبان پایتون تحت مجوز GNU GPLv2 است. این پروژه از پایتون ۳٫۶ و جدیدتر پشتیبانی می‌کند. .SH "ویژگی‌ها (FEATURES)" .INDENT 0.0 .IP \(bu 2 رابط کاربری شیءگرای سطح بالا در پایتون: PtraceDebugger و PtraceProcess .IP \(bu 2 توانایی کنترل چندین فرآیند: دریافت رویدادهای fork در Linux .IP \(bu 2 خواندن/نوشتن بایت‌ها در آدرس دلخواه: مدیریت هم‌ترازی حافظه و تقسیم بایت‌ها به طول کلمه پردازنده (cpu word) .IP \(bu 2 اجرای گام‌به‌گام با استفاده از ()ptrace_singlestep یا وقفه سخت‌افزاری ۳ .IP \(bu 2 امکان استفاده از دیزاسمبلر distorm \% .IP \(bu 2 تخلیه (Dump) ثبات‌ها، نگاشت‌های حافظه، پشته و غیره .IP \(bu 2 ردیاب و تجزیه‌کننده فراخوان‌های سیستمی \%<#\:syscall> (دستور strace.py) .UNINDENT .sp وضعیت: .INDENT 0.0 .IP \(bu 2 سیستم‌عامل‌های پشتیبانی‌شده: Linux، FreeBSD، OpenBSD .IP \(bu 2 معماری‌های پشتیبانی‌شده: x86، x86_64 (در Linux)، PPC (در Linux)، ARM (در Linux EAPI) .UNINDENT .sp ویژگی‌های ناموجود: .INDENT 0.0 .IP \(bu 2 نمادها (Symbols): امکان توقف (break) روی یک تابع یا خواندن مقدار متغیر وجود ندارد .IP \(bu 2 عدم پشتیبانی از زبان C: اشکال‌زدا کد اسمبلی را نمایش می‌دهد، نه کد C (یا ++C یا زبان‌های دیگر) شما را! .IP \(bu 2 عدم پشتیبانی از ریسه‌ها (threads) .UNINDENT .SH "فهرست مطالب (TABLE OF CONTENTS)" .SS نصب python\-ptrace .sp python\-ptrace از پایتون ۳٫۶ و جدیدتر پشتیبانی می‌کند. .SS بسته‌های لینوکس .INDENT 0.0 .IP \(bu 2 دبیان: بسته Debian برای python\-ptrace \%\&. .IP \(bu 2 مندریوا: بسته Mandriva برای python\-ptrace \% .IP \(bu 2 اوپن‌امبدد: دستورالعمل python\-ptrace در OpenEmbedded \% .IP \(bu 2 آرچ لینوکس: بسته Arch Linux برای python\-ptrace \% .IP \(bu 2 جنتو: dev\-python/python\-ptrace \% .UNINDENT .sp همچنین ببینید: python\-ptrace در نمایه بسته‌های پایتون (PyPI) \% .SS نصب از مبدأ (Source) .SS دانلود آرشیو فشرده (Tarball) .sp آخرین آرشیو فشرده را از نمایه بسته‌های پایتون (PyPI) دریافت کنید: \%\&. .SS دانلود نسخه توسعه .sp دانلود نسخه توسعه با استفاده از Git: .INDENT 0.0 .INDENT 3.5 .sp .EX git clone https://github.com/vstinner/python\-ptrace.git .EE .UNINDENT .UNINDENT .sp مرور کد منبع python\-ptrace \%\&..SS وابستگی‌های اختیاری .INDENT 0.0 .IP \(bu 2 دیزاسمبلر distorm (اختیاری) \% .UNINDENT .SS نصب .sp نکته: استفاده از pip اکیداً توصیه می‌شود. .sp به‌عنوان کاربر ریشه تایپ کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 setup.py install .EE .UNINDENT .UNINDENT .sp یا با استفاده از برنامه sudo: .INDENT 0.0 .INDENT 3.5 .sp .EX sudo python3 setup.py install .EE .UNINDENT .UNINDENT .SS cptrace .sp برای اشکال‌زدایی سریع‌تر و پرهیز از ctypes، می‌توانید cptrace را نیز نصب کنید: رابط پایتونی تابع ()ptrace که به زبان C نوشته شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 setup_cptrace.py install .EE .UNINDENT .UNINDENT .SS اجرای آزمون‌ها .SS اجرای آزمون‌ها با tox .sp برای اجرای تمام آزمون‌ها، کافی است تایپ کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX tox .EE .UNINDENT .UNINDENT .sp پروژه tox \% یک محیط مجازی تمیز برای اجرای آزمون‌ها ایجاد می‌کند. .SS اجرای دستی آزمون‌ها .sp تایپ کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 runtests.py python3 test_doc.py .EE .UNINDENT .UNINDENT .sp همچنین امکان اجرای یک آزمون خاص وجود دارد: .INDENT 0.0 .INDENT 3.5 .sp .EX PYTHONPATH=$PWD python3 tests/test_strace.py .EE .UNINDENT .UNINDENT .SS کاربرد python\-ptrace .SS سلام دنیا (Hello World) .sp مثالی کوتاه برای اتصال به یک فرایند در حال اجرا. این کد اشاره‌گر دستورالعمل را دریافت می‌کند، یک تک‌گام اجرا می‌کند، و اشاره‌گر دستورالعمل جدید را به دست می‌آورد: .INDENT 0.0 .INDENT 3.5 .sp .EX import ptrace.debugger import signal import subprocess import sys def debugger_example(pid): debugger = ptrace.debugger.PtraceDebugger() print(\(dqAttach the running process %s\(dq % pid) process = debugger.addProcess(pid, False) # process is a PtraceProcess instance print(\(dqIP before: %#x\(dq % process.getInstrPointer()) print(\(dqExecute a single step\(dq) process.singleStep() # singleStep() gives back control to the process. We have to wait # until the process is trapped again to retrieve the control on the # process. process.waitSignals(signal.SIGTRAP) print(\(dqIP after: %#x\(dq % process.getInstrPointer()) process.detach() debugger.quit() def main(): args = [sys.executable, \(aq\-c\(aq, \(aqimport time; time.sleep(60)\(aq] child_popen = subprocess.Popen(args) debugger_example(child_popen.pid) child_popen.kill() child_popen.wait() if __name__ == \(dq__main__\(dq: main() .EE .UNINDENT .UNINDENT.SS API .SS PtraceProcess .sp کلاس PtraceProcess ابزاری کمکی برای دستکاری یک فرآیندِ تحت ردگیری است. .sp مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX tracer = PtraceProcess(pid) # attach the process tracer.singleStep() # execute one instruction tracer.cont() # continue execution tracer.syscall() # break at next syscall tracer.detach() # detach process # Get status tracer.getreg(\(aqal\(aq) # get AL register value regs = tracer.getregs() # read all registers bytes = tracer.readBytes(regs.ax, 10) # read 10 bytes tracer.dumpCode() # dump code (as assembler or hexa is the disassembler is missing) tracer.dumpStack() # dump stack (memory words around ESP) # Modify the process shellcode = \(aq...\(aq ip = tracer.getInstrPointer() # get EIP/RIP register bytes = tracer.writeBytes(ip, shellcode) # write some bytes tracer.setreg(\(aqebx\(aq, 0) # set EBX register value to zero .EE .UNINDENT .UNINDENT .sp برای مشاهده متدهای بیشتر، کد منبع \fBptrace/debugger/process.py\fP را مطالعه کنید. .SS ردگیری فراخوانی‌های سیستم (syscalls) .sp ابزار python\-ptrace می‌تواند فراخوانی‌های سیستم را با استفاده از \fBPTRACE_SYSCALL\fP ردگیری کند\&. .SS PtraceSyscall .sp پیمانه ptrace.syscall شامل کلاس PtraceSyscall است: این کلاس یک تجزیه‌گر برای فراخوانی‌های سیستم لینوکس مشابه با برنامه strace است. .sp مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX connect(5, , 28) = 0 open(\(aq/usr/lib/i686/cmov/libcrypto.so.0.9.8\(aq, 0, 0 ) = 4 mmap2(0xb7e87000, 81920, 3, 2066, 4, 297) = 0xb7e87000 rt_sigaction(SIGWINCH, 0xbfb7d4a8, 0xbfb7d41c, 8) = 0 .EE .UNINDENT .UNINDENT .sp می‌توانید اطلاعات بیشتری به دست آورید: نوع نتیجه، آدرس مقدار، نوع آرگومان‌ها و نام آرگومان‌ها. .sp مثال‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX long open(const char* filename=\(aq/usr/lib/i686/cmov/libcrypto.so.0.9.8\(aq at 0xb7efc027, int flags=0, int mode=0 ) = 4 long fstat64(unsigned long fd=4, struct stat* buf=0xbfa46e2c) = 0 long set_robust_list(struct robust_list_head* head=0xb7be5710, size_t len_ptr=12) = 0 .EE .UNINDENT .UNINDENT .SS strace.py .sp برنامه strace.py بسیار شبیه برنامه strace است: نمایش فراخوانی‌های سیستم یک برنامه. مثال: .SS قابلیت‌ها .INDENT 0.0 .IP \(bu 2 خروجی مناسب سیگنال: به [[signal|python\-ptrace signal handling]] مراجعه کنید .IP \(bu 2 پشتیبانی از چندین فرآیند .IP \(bu 2 امکان ردگیری فرآیندهای در حال اجرا .IP \(bu 2 امکان نمایش نام، نوع و آدرس آرگومان‌ها .IP \(bu 2 گزینه \fB\-\-filename\fP برای نمایش تنها فراخوانی‌های سیستمی که از نام فایل‌ها استفاده می‌کنند .IP \(bu 2 گزینه \fB\-\-socketcall\fP برای نمایش تنها فراخوانی‌های سیستم مرتبط با شبکه (استفاده از سوکت) .IP \(bu 2 گزینه \fB\-\-syscalls\fP برای فهرست کردن تمام فراخوانی‌های سیستم شناخته‌شده .UNINDENT .SS مثال .INDENT 0.0 .INDENT 3.5 .sp .EX $ ./strace.py /bin/ls execve(/bin/ls, [[\(aq/bin/ls\(aq],|[/* 40 vars */]]) = 756 brk(0) = 0x0805c000 access(\(aq/etc/ld.so.nohwcap\(aq, 0) = \-2 (No such file or directory) mmap2(NULL, 8192, 3, 34, \-1, 0) = 0xb7f56000 access(\(aq/etc/ld.so.preload\(aq, 4) = \-2 (No such file or directory) (...) close(1) = 0 munmap(0xb7c5c000, 4096) = 0 exit_group(0) \-\-\-done\-\-\- .EE .UNINDENT .UNINDENT .SS گزینه‌ها .sp این برنامه گزینه‌های متعددی دارد. به عنوان مثال با \fB\-\-socketcall\fP (نمایش تنها توابع شبکه): .INDENT 0.0 .INDENT 3.5 .sp .EX $ ./strace.py \-\-socketcall nc localhost 8080 execve(/bin/nc, [[\(aq/bin/nc\(aq,|\(aqlocalhost\(aq, \(aq8080\(aq]], [[/*|40 vars */]]) = 12948 socket(AF_FILE, SOCK_STREAM, 0) = 3 connect(3, , 110) = \-2 (No such file or directory) socket(AF_FILE, SOCK_STREAM, 0) = 3 connect(3, , 110) = \-2 (No such file or directory) socket(AF_INET, SOCK_STREAM, 6) = 3 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, 3217455272L, 4) = 0 connect(3, , 16) = \-111 (Connection refused) (...) .EE .UNINDENT .UNINDENT.SS gdb.py .sp \fBgdb.py\fP یک دیباگر خط فرمان \fIمشابه gdb\fP است، اما با قابلیت‌های کمتر: بدون پشتیبانی از نمادها (symbols)، بدون پشتیبانی از زبان C، بدون پشتیبانی از thread و غیره. .SS برخی دستورها (Some commands) .INDENT 0.0 .IP \(bu 2 \fBcont\fP: ادامه اجرای برنامه .IP \(bu 2 \fBstepi\fP: اجرای یک instruction .IP \(bu 2 \fBstep\fP: اجرای یک instruction، اما بدون ورود به فراخوانی‌ها (calls) .UNINDENT .sp برای مشاهده فهرست تمام دستورهای موجود، \fBhelp\fP را وارد کنید. .SS ویژگی‌ها (Features) .INDENT 0.0 .IP \(bu 2 دستور print مقدار را به صورت ده‌دهی (decimal) و شانزده‌شانزدهی (hexadecimal)، و همچنین نگاشت حافظه مرتبط (در صورت وجود) نمایش می‌دهد: .INDENT 2.0 .INDENT 3.5 .sp .EX (gdb) print $eip Decimal: 3086383120 Hexadecimal: 0xb7f67810 Address is part of mapping: 0xb7f67000\-0xb7f81000 => /lib/ld\-2.6.1.so (r\-xp) .EE .UNINDENT .UNINDENT .IP \(bu 2 خروجی مناسب از signal: به [[signal|python\-ptrace signal handling]] مراجعه کنید .IP \(bu 2 ردیاب syscall با دستور \(dqsys\(dq: به \fIpython\-ptrace system call tracer \fP\& مراجعه کنید. یک مثال کوتاه: .INDENT 2.0 .INDENT 3.5 .sp .EX (gdb) sys long access(char* filename=\(aq/etc/ld.so.nohwcap\(aq at 0xb7f7f35b, int mode=F_OK) = \-2 (No such file or directory) .EE .UNINDENT .UNINDENT .IP \(bu 2 پشتیبانی از چندین فرآیند (process): .INDENT 2.0 .INDENT 3.5 .sp .EX (gdb) proclist (active) (gdb) proc Process ID: 24187 (parent: 24182) Process state: T (traced) Process command line: [[\(aqtests/fork_execve\(aq] (...) (gdb)|switch; proc Switch to Process ID: 24188 (parent: 24187) Process state: T (traced) Process command line: [\(aq/bin/ls\(aq]] (...) .EE .UNINDENT .UNINDENT .IP \(bu 2 امکان اجرای چندین دستور در یک خط با استفاده از جداکننده \(dq;\(dq: .INDENT 2.0 .INDENT 3.5 .sp .EX (gdb) print $eax; set $ax=0xdead; print $eax Decimal: 0 Hexadecimal: 0x00000000 Set $ax to 57005 Decimal: 57005 Hexadecimal: 0x0000dead .EE .UNINDENT .UNINDENT .IP \(bu 2 تنها با کد پایتون خالص (pure Python) نوشته شده است، بنابراین گسترش آن ساده است .IP \(bu 2 تجزیه‌گر عبارات (Expression parser) از تمام عملگرهای محاسباتی (\fBa+b\fP، \fBa/b\fP، \fBa< Quit gdb. .EE .UNINDENT .UNINDENT.SS رویدادهای فرآیند در python\-ptrace .SS رویدادهای فرآیند .sp تمامی رویدادهای فرآیند بر پایهٔ کلاس ProcessEvent هستند. .INDENT 0.0 .IP \(bu 2 ProcessExit: فرآیند با یک کد خروج (exitcode) پایان یافته، توسط یک سیگنال کشته شده، یا به شکل غیرعادی خارج شده است .IP \(bu 2 ProcessSignal: فرآیند یک سیگنال دریافت کرده است .IP \(bu 2 NewProcessEvent: فرآیند جدیدی ایجاد شده است، برای نمونه پس از فراخوان سیستمی fork() .UNINDENT .sp صفت‌ها: .INDENT 0.0 .IP \(bu 2 تمامی رویدادها دارای صفت \(dqprocess\(dq هستند .IP \(bu 2 رویداد ProcessExit دارای صفت‌های \(dqexitcode\(dq و \(dqsignum\(dq است (هر دو می‌توانند None باشند) .IP \(bu 2 رویداد ProcessSignal دارای صفت‌های \(dqsignum\(dq و \(dqname\(dq است .UNINDENT .sp برای NewProcessEvent، از صفت process.parent جهت دریافت فرآیند والد استفاده کنید. .sp نکته: ProcessSignal دارای متد display() برای نمایش محتوای خود است. درست پس از دریافت پیام از آن استفاده کنید، چرا که حافظه فرآیند را برای تحلیل دلایل ارسال سیگنال می‌خواند. .SS انتظار برای هر رویداد فرآیند .sp عمومی‌ترین تابع waitProcessEvent() است: این تابع منتظر هر رویدادی از فرآیند (خروج، سیگنال یا فرآیند جدید) می‌ماند: .INDENT 0.0 .INDENT 3.5 .sp .EX event = debugger.waitProcessEvent() .EE .UNINDENT .UNINDENT .sp برای انتظار جهت یک یا چند سیگنال، از متدهای waitSignals() استفاده کنید. بدون آرگومان، منتظر هر سیگنالی می‌ماند. رویدادهایی غیر از سیگنال به عنوان استثنای Python ایجاد می‌شوند. مثال‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX signal = debugger.waitSignals() signal = debugger.waitSignals(SIGTRAP) signal = debugger.waitSignals(SIGINT, SIGTERM) .EE .UNINDENT .UNINDENT .sp نکته: متغیر signal یک شیء ProcessSignal است؛ از signal.signum جهت دریافت شماره سیگنال استفاده کنید. .SS انتظار برای رویدادهای یک فرآیند خاص .sp جهت انتظار برای هر رویدادی از یک فرآیند، از متد waitEvent() استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX event = process.waitEvent() .EE .UNINDENT .UNINDENT .sp برای انتظار جهت یک یا چند سیگنال، از متد waitSignals() استفاده کنید. بدون آرگومان، منتظر هر سیگنالی می‌ماند. سایر رویدادهای فرآیند به عنوان استثنای Python ایجاد می‌شوند. مثال‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX signal = process.waitSignals() signal = process.waitSignals(SIGTRAP) signal = process.waitSignals(SIGINT, SIGTERM) .EE .UNINDENT .UNINDENT .sp نکته: همانند debugger.waitSignals()، متغیر signal یک شیء ProcessSignal است. .SS مدیریت سیگنال در python\-ptrace .SS مقدمه .sp کلاس PtraceSignal هنگام دریافت یک سیگنال تلاش می‌کند اطلاعات مفیدی را نمایش دهد. بسته به شماره سیگنال، اطلاعات متفاوتی را نشان می‌دهد. .sp این کلاس از دستورالعمل جاری که به کد اسمبلی دیکد شده است برای درک دلیل ارسال سیگنال استفاده می‌کند. .sp در حال حاضر تنها Intel x86 (معماری i386 و احتمالاً x86_64) پشتیبانی می‌شود. .sp هنگامی که یک فرآیند سیگنالی دریافت می‌کند، python\-ptrace تلاش می‌کند علت ارسال سیگنال را توضیح دهد. .sp اطلاعات عمومی (برای همه سیگنال‌ها نمایش داده نمی‌شود، برای نمونه برای SIGABRT نشان داده نمی‌شود): .INDENT 0.0 .IP \(bu 2 دستورالعمل CPU که موجب فروپاشی (crash) شده است .IP \(bu 2 ثبات‌های CPU مرتبط با فروپاشی .IP \(bu 2 نگاشت‌های حافظه مربوط به آدرس‌های حافظه .UNINDENT .sp دسته‌بندی سیگنال‌ها: .INDENT 0.0 .IP \(bu 2 SIGFPE .INDENT 2.0 .IP \(bu 2 تقسیم بر صفر .UNINDENT .IP \(bu 2 SIGSEGV، SIGBUS .INDENT 2.0 .IP \(bu 2 خواندن نامعتبر حافظه .IP \(bu 2 نوشتن نامعتبر حافظه .IP \(bu 2 سرریز پشته .IP \(bu 2 دسترسی نامعتبر به حافظه .UNINDENT .IP \(bu 2 SIGABRT .INDENT 2.0 .IP \(bu 2 توقف نابهنگام برنامه (abort) .UNINDENT .IP \(bu 2 SIGCHLD .INDENT 2.0 .IP \(bu 2 خروج فرآیند فرزند .UNINDENT .UNINDENT.SS مثال‌ها .SS تقسیم بر صفر (SIGFPE) .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGFPE Division by zero \- instruction: IDIV DWORD [[EBP\-0x8] \- register ebp=0xbfdc4a98 .EE .UNINDENT .UNINDENT .SS خواندن/نوشتن نامعتبر حافظه (SIGSEGV) .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGSEGV Invalid read from 0x00000008 \- instruction: MOV EAX, [EAX+0x8]] \- mapping: 0x00000008 is not mapped in memory \- register eax=0x00000000 .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX PID: 23766 Signal: SIGSEGV Invalid write to 0x00000008 (size=4 bytes) \- instruction: MOV DWORD [[EAX+0x8],|0x2a \- mapping: 0x00000008..0x0000000b is not mapped in memory \- register eax=0x00000000 .EE .UNINDENT .UNINDENT .sp اطلاعات ارائه‌شده: .INDENT 0.0 .IP \(bu 2 نشانی خطای دسترسی به حافظه (segmentation fault) .IP \(bu 2 (در صورت امکان) اندازه خواندن/نوشتن نامعتبر در حافظه .IP \(bu 2 دستور پردازنده (CPU) که موجب فروپاشی (crash) شده است .IP \(bu 2 ثبات‌های پردازنده (CPU) مرتبط با فروپاشی .IP \(bu 2 نگاشت‌های حافظه برای نشانی حافظه مرتبط .UNINDENT .SS سرریز پشته (SIGSEGV) .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGSEGV STACK OVERFLOW! Stack pointer is in 0xbf534000\-0xbfd34000 => [stack]] (rw\-p) \- instruction: MOV BYTE [[EBP\-0x1004],|0x0 \- mapping: 0xbf533430 is not mapped in memory \- register =0xbf533430 \- register ebp=0xbf534448 .EE .UNINDENT .UNINDENT .SS خروج فرزند (SIGCHLD) .INDENT 0.0 .INDENT 3.5 .sp .EX PID: 24008 Signal: SIGCHLD Child process 24009 exited normally Signal sent by user 1000 .EE .UNINDENT .UNINDENT .sp اطلاعات: .INDENT 0.0 .IP \(bu 2 شناسه فرآیند فرزند .IP \(bu 2 شناسه کاربر فرآیند فرزند .UNINDENT .SS مثال‌ها .sp خواندن نامعتبر: .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGSEGV Invalid read from 0x00000008 \- instruction: MOV EAX, [EAX+0x8] \- mapping: (no memory mapping) \- register eax=0x00000000 .EE .UNINDENT .UNINDENT .sp نوشتن نامعتبر (MOV): .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGSEGV Invalid write to 0x00000008 (size=4 bytes) \- instruction: MOV DWORD [EAX+0x8], 0x2a \- mapping: (no memory mapping) \- register eax=0x00000000 .EE .UNINDENT .UNINDENT .sp abort(): .INDENT 0.0 .INDENT 3.5 .sp .EX Signal: SIGABRT Program received signal SIGABRT, Aborted. .EE .UNINDENT .UNINDENT.SS کد منبع .sp ببینید: .INDENT 0.0 .IP \(bu 2 \fBptrace/debugger/ptrace_signal.py\fP .IP \(bu 2 \fBptrace/debugger/signal_reason.py\fP .UNINDENT .SS ماژول پایتون cptrace .sp انقیاد پایتون (Python binding) برای ptrace نوشته‌شده به زبان C. .SS مثال .sp مثال نمونه: .INDENT 0.0 .INDENT 3.5 .sp .EX >>> import cptrace >>> cptrace.ptrace(1, 1) Traceback (most recent call last): File \(dq\(dq, line 1, in ValueError: ptrace(request=1, pid=1, 0x(nil), 0x(nil)) error #1: Operation not permitted .EE .UNINDENT .UNINDENT .SS نویسندگان .SS مشارکت‌کنندگان .INDENT 0.0 .IP \(bu 2 Anthony Gelibert \- رفع اشکال cptrace در Apple .IP \(bu 2 Dimitris Glynos \- پیروی از دستورهای gdb.py .IP \(bu 2 Jakub Wilk \- اصلاح برای GNU/kFreeBSD .IP \(bu 2 Mark Seaborn \- ایجاد گزینه \-i برای strace .IP \(bu 2 Mickaël Guérin aka KAeL \- پورت به OpenBSD .IP \(bu 2 teythoon \- تبدیل تمام کلاس‌ها به کلاس‌های نوع جدید (new\-style classes) .IP \(bu 2 .INDENT 2.0 .IP T. 3 Bursztyka aka Tuna \- پورت به x86_64 .UNINDENT .IP \(bu 2 Victor Stinner \- نویسنده و نگه‌دارنده python\-ptrace .UNINDENT .SS قدردانی .INDENT 0.0 .IP \(bu 2 نویسندگان procps (برنامه‌های top و uptime) .UNINDENT .SS تاریخچه تغییرات .SS python\-ptrace 0.9.9 (2024\-03\-13) .INDENT 0.0 .IP \(bu 2 اصلاح آرگومان‌های فراخوان‌های سیستمی pipe/pipe2 جهت نمایش مناسب در قالب فراخوانی. وصله توسط José Pereira. .IP \(bu 2 افزودن پشتیبانی از شناسه‌های فرعی دستگاه (minor device ID) سه‌رقمی در \fBPROC_MAP_REGEX\fP\&. وصله توسط fab1ano. .IP \(bu 2 افزودن پشتیبانی از RISCV (riscv32/riscv64). وصله توسط Andreas Schwab و vimer/yuzibo. .IP \(bu 2 رفع استثنای سرگردان ایجادشده توسط فرایندهای فرزندی که با کد خروج ۲۵۵ خاتمه می‌یابند. وصله توسط Duane Voth/duanev. .IP \(bu 2 حذف استفاده از ماژول \fBimp\fP\&. همکاری بین Mario Haustein/hamarituc و Stephen Kitt/skitt. .UNINDENT .SS python\-ptrace 0.9.8 (2021\-03\-17) .INDENT 0.0 .IP \(bu 2 افزودن پشتیبانی از Arm 64bit (AArch64). .IP \(bu 2 پیاده‌سازی \fBPTRACE_GETREGSET\fP و \fBPTRACE_SETREGSET\fP که در AArch64 مورد نیاز و در لینوکس در دسترس هستند. .IP \(bu 2 مورد #66: رفع انتظار \fBSIGTRAP|0x80\fP یا \fBSIGTRAP\fP در syscall_state.exit (\fBPTRACE_O_TRACESYSGOOD\fP). .IP \(bu 2 شاخه توسعه \fBmaster\fP به \fBmain\fP تغییر نام یافت.\& برای دیدن دلایل، \% را ببینید. .UNINDENT .SS python\-ptrace 0.9.7 (2020\-08\-10) .INDENT 0.0 .IP \(bu 2 افزودن ماژول جاافتاده به دستورالعمل‌های نصب .IP \(bu 2 به‌روزرسانی README.rst .IP \(bu 2 بازگشت پروژه به وضعیت آزمایشی (beta) و نگه‌داری .UNINDENT .SS python\-ptrace 0.9.6 (2020\-08\-10) .INDENT 0.0 .IP \(bu 2 حذف ثابت RUNNING_WINDOWS: نرم‌افزار python\-ptrace از Windows پشتیبانی نمی‌کند. .IP \(bu 2 پایان پشتیبانی از Python 2.7. وابستگی six دیگر مورد نیاز نیست. .IP \(bu 2 افزودن close_fds و pass_fds به تابع createChild(). وصله توسط Jean\-Baptiste Skutnik. .IP \(bu 2 بهبود خروجی strace.py برای پرچم‌های open و پارامترهای اختیاری open. وصله توسط Jean\-Baptiste Skutnik. .IP \(bu 2 افزودن پشتیبانی از PowerPC 64\-bit (ppc64). وصله توسط Jean\-Baptiste Skutnik. .UNINDENT .SS python\-ptrace 0.9.5 (2020\-04\-13) .INDENT 0.0 .IP \(bu 2 اصلاح readProcessMappings() برای شناسه دستگاه ۳ رقمی. وصله توسط Cat Stevens. .IP \(bu 2 پایان پشتیبانی از Python 2. .UNINDENT.SS python\-ptrace 0.9.4 (2019\-07\-30) .INDENT 0.0 .IP \(bu 2 Issue #36: رفع مشکل جدا شدن (detaching) از شیء فرآیندی که بدون is_attached=True ایجاد شده است .IP \(bu 2 پروژه اکنون به ماژول six نیاز دارد. .IP \(bu 2 پروژه منتقل شد به: \% .UNINDENT .SS python\-ptrace 0.9.3 (2017\-09\-19) .INDENT 0.0 .IP \(bu 2 Issue #42: رفع مشکل test_strace.py: سازگاری با فراخوان سیستمی openat(). .UNINDENT .SS python\-ptrace 0.9.2 (2017\-02\-12) .INDENT 0.0 .IP \(bu 2 Issue #35: رفع مشکل strace.py هنگام ردگیری چندین فرآیند: استفاده از فرآیند صحیح. اصلاحات پیشنهادشده توسط Daniel Trnka. .UNINDENT .SS python\-ptrace 0.9.1 (2016\-10\-12) .INDENT 0.0 .IP \(bu 2 افزودن ردگیری فرآیندهای ایجادشده با فراخوان سیستمی clone (که معمولاً به عنوان نخ‌ها یا threads شناخته می‌شوند). .IP \(bu 2 gdb.py: افزودن دستور \fBgcore\fP، رونوشت‌برداری (تخلیه) از حافظهٔ فرآیند. .IP \(bu 2 امکان استفاده از نام دستورات بدون مسیر مطلق. .IP \(bu 2 اصلاح بایندینگ ptrace: پاک‌سازی errno پیش از فراخوانی ptrace(). .IP \(bu 2 اصلاح PtraceSyscall.exit() برای کدهای خطای ناشناخته .IP \(bu 2 پروژه به GitHub منتقل شد: \% .IP \(bu 2 حذف ماژول \fBptrace.ctypes_errno\fP: استفادهٔ مستقیم از تابع \fBctypes.get_errno()\fP .IP \(bu 2 حذف ماژول \fBptrace.ctypes_errno\fP: استفادهٔ مستقیم از نوع‌های \fBctypes.c_int8\fP، \fBctypes.c_uint32\fP و ... .UNINDENT .SS python\-ptrace 0.9 (2016\-04\-23) .INDENT 0.0 .IP \(bu 2 افزودن پروتوتایپ تمام فراخوان‌های سیستمی لینوکس .IP \(bu 2 افزودن نمادهای خطا (مانند ENOENT) افزون بر متن خطا، برای strace .IP \(bu 2 اصلاح حالت open به طوری که O_RDONLY در صورتی که تنها حالت دسترسی به فایل باشد، نمایش داده شود .IP \(bu 2 Python 3: اصلاح قالب‌بندی آرگومان‌های رشته‌ای فراخوان سیستمی (مانند نام فایل‌ها)، رمزگشایی بایت‌ها با استفاده از کدگذاری محلی (locale) .IP \(bu 2 Issue #17: تجزیه‌کنندهٔ فراخوان‌های سیستمی اکنون از O_CLOEXEC و SOCK_CLOEXEC پشتیبانی می‌کند، اصلاح آزمون‌های واحد روی Python 3.4 و نسخه‌های جدیدتر .UNINDENT .SS python\-ptrace 0.8.1 (2014\-10\-30) .INDENT 0.0 .IP \(bu 2 به‌روزرسانی MANIFEST.in جهت گنجاندن تمام فایل‌ها .IP \(bu 2 اصلاحات جهت پشتیبانی از Python 3.5 .UNINDENT .SS python\-ptrace 0.8 (2014\-10\-05) .INDENT 0.0 .IP \(bu 2 Issue #9: بازنویسی متدهای waitProcessEvent() و waitSignals() در PtraceProcess برای فراخوانی نکردن waitpid() با مقدار pid=\-1. یک شرایط رقابتی (race condition) با waitpid(\-1) و fork وجود دارد؛ وضعیت فرآیند فرزند ممکن است پیش از آن‌که دیباگر از ایجاد فرآیند فرزند جدید مطلع شود، بازگردانده شود. .IP \(bu 2 Issue #10: اصلاح PtraceProcess.readBytes() برای فرآیندهایی که توسط دیباگر ایجاد نشده‌اند (مانند fork) در صورتی که هسته دسترسی به نگاشت‌های خصوصی /proc/pid/mem را مسدود کند. استفادهٔ جایگزین از PTRACE_PEEKTEXT که کندتر است اما دیباگری که فرآیند را ردگیری می‌کند همواره مجاز به استفاده از آن است. .UNINDENT .SS python\-ptrace 0.7 (2013\-03\-05) .INDENT 0.0 .IP \(bu 2 پشتیبانی آزمایشی از Python 3.3 در همان پایه کد .IP \(bu 2 حذف پشتیبانی از Python 2.5 .IP \(bu 2 حذف ماژول ptrace.compatibility .IP \(bu 2 اصلاح Process.readStruct() و Process.readArray() روی x86_64 .IP \(bu 2 پشتیبانی آزمایشی از معماری ARM (رابط Linux EAPI)، برنامهٔ strace.py روی Raspberry Pi (armv6l) آزمایش شده است .UNINDENT .SS python\-ptrace 0.6.6 (2013\-12\-16) .INDENT 0.0 .IP \(bu 2 اصلاح os_tools.RUNNING_LINUX برای Python 2.x کامپایل‌شده روی هستهٔ لینوکس 3.x .IP \(bu 2 پشتیبانی از FreeBSD روی x86_64 .IP \(bu 2 افزودن پروتوتایپ ناموجود فراخوان سیستمی unlinkat(). وصله توسط Matthew Fernandez نوشته شده است. .UNINDENT .SS python\-ptrace 0.6.5 (2013\-06\-06) .INDENT 0.0 .IP \(bu 2 syscall: اصلاح تجزیهٔ socketcall در Linux x86 .IP \(bu 2 syscall: اصلاح پروتوتایپ socket() .UNINDENT .SS python\-ptrace 0.6.4 (2012\-02\-26) .INDENT 0.0 .IP \(bu 2 تبدیل تمام کلاس‌ها به کلاس‌های new\-style، وصله توسط teythoon نوشته شده است .IP \(bu 2 اصلاح کامپایل روی Apple، وصله توسط Anthony Gelibert نوشته شده است .IP \(bu 2 پشتیبانی از GNU/kFreeBSD، وصله توسط Jakub Wilk نوشته شده است .IP \(bu 2 پشتیبانی از sockaddr_in6 (نشانی IPv6) .UNINDENT .SS python\-ptrace 0.6.3 (2011\-02\-16) .INDENT 0.0 .IP \(bu 2 پشتیبانی از distrom3 .IP \(bu 2 پشتیبانی از Python 3 .IP \(bu 2 تغییر نام گزینهٔ \-\-socketcall در strace.py به \-\-socket، و اصلاح این گزینه برای FreeBSD و Linux/64 bits .IP \(bu 2 افزودن MANIFEST.in: شامل کردن تمام فایل‌ها در بستهٔ توزیع سورس (تست‌ها، ماژول cptrace و ...) .UNINDENT.SS python\-ptrace 0.6.2 (2009\-11\-09) .INDENT 0.0 .IP \(bu 2 رفع اشکال زیرثبات‌های ۶۴ بیتی (تنظیم ماسک برای eax، ebx، ecx و edx) .UNINDENT .SS python\-ptrace 0.6.1 (2009\-11\-07) .INDENT 0.0 .IP \(bu 2 ایجاد دستورهای follow، showfollow، resetfollow و xray در gdb.py. وصله توسط Dimitris Glynos نوشته شده است .IP \(bu 2 وب‌گاه پروژه منتقل شد به: \fBhttp://bitbucket.org/haypo/python\-ptrace\fP .IP \(bu 2 جایگزینی انواع داده (u)intXX_t با c_(u)intXX .IP \(bu 2 ایجاد متد MemoryMapping.search() و اکنون MemoryMapping یک ارجاع ضعیف به فرایند نگه می‌دارد .UNINDENT .SS python\-ptrace 0.6 (2009\-02\-13) .sp تغییرات قابل مشاهده برای کاربر: .INDENT 0.0 .IP \(bu 2 اکنون python\-ptrace به Python 2.5 وابسته است .IP \(bu 2 دسترسی نامعتبر به حافظه: افزودن آدرس خطا در نام .IP \(bu 2 به‌روزرسانی وصله تبدیل Python 3.0 .IP \(bu 2 ایجاد گزینه \-i (\-\-show\-ip) در strace.py: نمایش اشاره‌گر دستورالعمل .IP \(bu 2 افزودن یک مثال جدید (itrace.py) نوشته‌شده توسط Mark Seaborn و مبتنی بر strace.py .UNINDENT .sp تغییرات API: .INDENT 0.0 .IP \(bu 2 در PtraceSyscall: ذخیره اشاره‌گر دستورالعمل هنگام ورود به فراخوان سیستمی (اگر گزینه instr_pointer=True باشد، به‌طور پیش‌فرض غیرفعال است) .IP \(bu 2 حذف PROC_DIRNAME و procFilename() از ptrace.linux_proc .UNINDENT .sp رفع باگ‌ها: .INDENT 0.0 .IP \(bu 2 رفع اشکال locateProgram() برای مسیر نسبی .IP \(bu 2 رفع اشکال تفسیر خطای حافظه در دستورالعمل MOSVW (مبدأ ESI و مقصد EDI است، نه برعکس!) .UNINDENT .SS python\-ptrace 0.5 (2008\-09\-13) .sp تغییرات قابل مشاهده: .INDENT 0.0 .IP \(bu 2 نوشتن یک مثال (ساده‌ترین دیباگر) و آغاز مستندسازی کد .IP \(bu 2 در gdb.py: ایجاد دستور \(dqdbginfo\(dq .IP \(bu 2 تجزیه فراخوان‌های سیستمی socket در FreeBSD .IP \(bu 2 در دسترسی نامعتبر به حافظه (SIGSEGV)، ارزیابی عبارت dereference برای دریافت آدرس خطا در سیستم‌عامل‌های فاقد siginfo (مانند FreeBSD) .IP \(bu 2 اصلاحات برای پشتیبانی حداقلی از Windows: رفع اشکال ایمپورت‌ها، رفع اشکال locateProgram() .UNINDENT .sp سایر تغییرات: .INDENT 0.0 .IP \(bu 2 شکستن سازگاری API: \- تغییر نام PtraceDebugger.traceSysgood() به PtraceDebugger.enableSysgood() \- تغییر نام PtraceDebugger.trace_sysgood به PtraceDebugger.use_sysgood \- حذف PtraceProcess.readCode() .IP \(bu 2 ایجاد تابع createChild() که تمام فایل‌ها به جز stdin، stdout و stderr را می‌بندد .IP \(bu 2 در FreeBSD، فراخوانی مجدد waitpid(pid) هنگام خروج فرایند برای جلوگیری از ایجاد فرایند زامبی .UNINDENT .SS python\-ptrace 0.4.2 (2008\-08\-28) .INDENT 0.0 .IP \(bu 2 رفع باگ: رفع غلط املایی در gdb.py (تغییر commands => command_str)، امکان نوشتن بیش از یک دستور وجود نداشت... .IP \(bu 2 رفع باگ: رفع غلط املایی در کلاس SignalInfo (حذف \(dqself.\(dq). هنگامی که فرایندی یک سیگنال SIGCHLD دریافت می‌کرد (به دلیل fork)، دیباگر به علت این باگ خارج می‌شد. .IP \(bu 2 رفع باگ: متد Debugger._wait() خروج غیرعادی فرایند را به عنوان یک رخداد عادی برمی‌گرداند؛ این رخداد به عنوان استثنا بالا کشیده نمی‌شود .IP \(bu 2 در PtraceSignal: آرگومان‌های از پیش قالب‌بندی‌شده (مانند آرگومان‌های execve) پاک نشوند .UNINDENT .SS python\-ptrace 0.4.1 (2008\-08\-23) .INDENT 0.0 .IP \(bu 2 پروژه یک وب‌گاه اختصاصی جدید دارد: \% .IP \(bu 2 ایجاد cptrace: بایندینگ پایتون اختیاری برای ptrace که با C نوشته شده است (سریع‌تر از ptrace، بایندینگ پایتون که با ctypes در پایتون نوشته شده بود) .IP \(bu 2 افزودن صفت name به کلاس‌های SignalInfo .IP \(bu 2 اصلاحاتی برای کمک به سازگاری با Python 3.0: عدم استفاده از sys.exc_clear() (که بی‌فایده بود) در writeBacktrace() .IP \(bu 2 در ProcessState: ایجاد صفت‌های utime، stime و starttime .UNINDENT .SS python\-ptrace 0.4.0 (2008\-08\-19) .sp تغییرات قابل مشاهده: .INDENT 0.0 .IP \(bu 2 تغییر نام پروژه به \(dqpython\-ptrace\(dq (نام پیشین \(dqPtrace بود) .IP \(bu 2 در strace.py: ایجاد گزینه \-\-ignore\-regex .IP \(bu 2 در PtraceSignal: پشتیبانی از SIGBUS، نمایش ثبات‌های مربوطه و دستورالعمل .IP \(bu 2 پشتیبانی از ردگیری فراخوان سیستمی execve() .UNINDENT .sp تغییرات توسعه‌دهندگان: .INDENT 0.0 .IP \(bu 2 رابط API جدید با نسخه 0.3.2 ناسازگار است .IP \(bu 2 متد PtraceProcess.waitProcessEvent() آرگومان اختیاری blocking=False را می‌پذیرد .IP \(bu 2 متدهای PtraceProcess.getreg()/setreg() قادر به خواندن/نوشتن \(dqزیرثبات‌های\(dq i386 و x86\-64 مانند al یا bx هستند .IP \(bu 2 حذف تابع iterProc() و جایگزینی با openProc() به همراه فراخوانی صریح .close() برای اطمینان از بسته شدن فایل‌ها .IP \(bu 2 ایجاد searchProcessesByName() .IP \(bu 2 جایگزینی مقدار ثابت CPU_PPC با CPU_POWERPC و ایجاد CPU_PPC32 و CPU_PPC64 .IP \(bu 2 ایجاد شیء MemoryMapping، مورد استفاده توسط متدهای readMappings() و findStack() در PtraceProcess .IP \(bu 2 تعریف همیشگی تمام متدهای PtraceProcess، اما بالا کشیدن خطا در صورت عدم پیاده‌سازی تابع .UNINDENT.SS "کارهای در دست اقدام (TODO)" .SS "وظایف اصلی (Main tasks)" .INDENT 0.0 .IP \(bu 2 رفع اشکال strace.py \-\-socketcall: تابع SyscallState.enter() پیش از پردازش socketcall، تابع ignore_callback را فراخوانی می‌کند .IP \(bu 2 پشتیبانی از backendهای دیگر: .INDENT 2.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 واسط GDB MI: \% .IP \(bu 2 ابزار ktrace: (در FreeBSD و Darwin): به پشتیبانی از Darwin کمک خواهد کرد .IP \(bu 2 ابزار utrace (دیباگر جدید لینوکس): \% .IP \(bu 2 vtrace؟ .IP \(bu 2 ابزار PyDBG: روی Windows کار می‌کند .UNINDENT .UNINDENT .UNINDENT .IP \(bu 2 نمادهای بازگردانی رد پشته (Backtrace symbols): .INDENT 2.0 .IP \(bu 2 کتابخانه GNU BFD؟ .IP \(bu 2 elfsh؟ .IP \(bu 2 برنامه addr2line؟ .IP \(bu 2 بررسی تابع dl_iterate_phdr() از libdl .UNINDENT .IP \(bu 2 پشتیبانی از دیس‌اسمبلرهای دیگر (به‌جز distorm)، و در نتیجه هر دو نحو Intel (اینتل و AT&T) .INDENT 2.0 .IP \(bu 2 BFD .IP \(bu 2 \% .IP \(bu 2 libasm (ERESI) .IP \(bu 2 libdisasm (bastard) .IP \(bu 2 \% .UNINDENT .IP \(bu 2 پشتیبانی از ریسه‌ها (threads): سایر backendها (به‌جز python\-ptrace) از پیش از ریسه‌ها پشتیبانی می‌کنند .UNINDENT .SS "وظایف فرعی (Minor tasks)" .INDENT 0.0 .IP \(bu 2 رفع اشکال دستور \(dqstep\(dq در gdb.py روی پرش‌ها (jump). نمونه‌ای که در آن دستور step هرگز متوقف نخواهد شد: .INDENT 2.0 .INDENT 3.5 .sp .EX (gdb) where ASM 0xb7e3b917: JMP 0xb7e3b8c4 (eb ab) ASM 0xb7e3b919: LEA ESI, [ESI+0x0] (8db426 00000000) .EE .UNINDENT .UNINDENT .IP \(bu 2 حذف وصله موقت (hack) عبارت \(dqexcept PtraceError, err: if err.errno == ESRCH\(dq در gdb.py؛ تشخیص خاتمه فرایند باید توسط PtraceProcess یا PtraceDebugger انجام شود .IP \(bu 2 استفاده از نقطه‌توقف‌های سخت‌افزاری اینتل (Intel hardware breakpoints): بررسی کد منبع vtrace .IP \(bu 2 پشتیبانی از Darwin: .INDENT 2.0 .IP \(bu 2 ابزار ktrace؟ نیاز به کامپایل مجدد هسته Darwin با گزینه KTRACE دارد .IP \(bu 2 دریافت ثبات‌ها (registers): \% .IP \(bu 2 PT_DENY_ATTACH: \% .IP \(bu 2 PT_DENY_ATTACH: \% .UNINDENT .UNINDENT .SH "پیوندها (LINKS)" .SS "پروژه‌های استفاده‌کننده از python\-ptrace" .INDENT 0.0 .IP \(bu 2 فازر Fusil \% .UNINDENT .SS "اعلان‌های python\-ptrace" .INDENT 0.0 .IP \(bu 2 فهرست پستی فازینگ (fuzzing mailing list) \% .IP \(bu 2 reverse\-engineering.net \% .UNINDENT .SS "کاربردهای ptrace" .INDENT 0.0 .IP \(bu 2 محیط ایزوله (Sandboxing): Plash \% .UNINDENT .SS "پروژه‌های مشابه" .INDENT 0.0 .IP \(bu 2 نرم‌افزار vtrace \%: کتابخانه پایتون (Windows و Linux) با پشتیبانی از ریسه‌ها (threads) .IP \(bu 2 نرم‌افزار subterfuge \% نوشته Mike Coleman: کتابخانه پایتون (Linux): شامل بایندینگ پایتون برای ptrace نوشته‌شده با زبان C برای Python 2.1/2.2. با Python 2.5 کار نمی‌کند (پروژه قدیمی است و از سال ۲۰۰۲ نگهداری نشده است) .IP \(bu 2 برنامه strace \% (لینوکس، BSD) .IP \(bu 2 برنامه ltrace (لینوکس) .IP \(bu 2 برنامه truss (سولاریس و BSD) .IP \(bu 2 نرم‌افزار pytstop \% نوشته Philippe Biondi: دیباگری مشابه gdb اما در مرحله بسیار اولیه (برای نمونه، فاقد دیس‌اسمبلر)، با استفاده از بایندینگ پایتون ptrace نوشته‌شده با C (برگرفته از subterfuge) .IP \(bu 2 اسکریپت strace.py \% نوشته Philippe Biondi .IP \(bu 2 مجموعه Fenris \%: مجموعه‌ای از ابزارهای مناسب برای تحلیل کد، دیباگ، تحلیل پروتکل، مهندسی معکوس، جرم‌یابی دیجیتال، عیب‌یابی، ممیزی امنیتی و پژوهش در زمینه آسیب‌پذیری .IP \(bu 2 ابزار PyDBG \%: دیباگر ویندوز نوشته‌شده با پایتون خالص .UNINDENT.SS "مقاله‌های جالب" .INDENT 0.0 .IP \(bu 2 (fr) Surveiller les connexions avec auditd \% (2007) .IP \(bu 2 Playing with ptrace() for fun and profit \% (2006) .IP \(bu 2 PTRACE_SETOPTIONS tests \% (2005) .IP \(bu 2 Process Tracing Using Ptrace \% (2002) .UNINDENT .SH "نویسندگان (AUTHORS)" Victor Stinner .SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2014, Victor Stinner .\" End of generated man page.