Skip to content

Commit 03c4152

Browse files
Autorefresh Dev Documentation
1 parent 16a8f56 commit 03c4152

File tree

11 files changed

+102
-12
lines changed

11 files changed

+102
-12
lines changed

dev/_modules/libdebug/debugger/debugger.html

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,9 +509,9 @@ <h1>Source code for libdebug.debugger.debugger</h1><div class="highlight"><pre>
509509
<div class="viewcode-block" id="Debugger.terminate">
510510
<a class="viewcode-back" href="../../../libdebug.debugger.html#libdebug.debugger.debugger.Debugger.terminate">[docs]</a>
511511
<span class="k">def</span> <span class="nf">terminate</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Debugger</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
512-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Terminates the background thread.</span>
512+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Interrupts the process, kills it and then terminates the background thread.</span>
513513

514-
<span class="sd"> The debugger object cannot be used after this method is called.</span>
514+
<span class="sd"> The debugger object will not be usable after this method is called.</span>
515515
<span class="sd"> This method should only be called to free up resources when the debugger object is no longer needed.</span>
516516
<span class="sd"> &quot;&quot;&quot;</span>
517517
<span class="bp">self</span><span class="o">.</span><span class="n">_internal_debugger</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span></div>
@@ -828,6 +828,18 @@ <h1>Source code for libdebug.debugger.debugger</h1><div class="highlight"><pre>
828828
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the architecture of the process.&quot;&quot;&quot;</span>
829829
<span class="bp">self</span><span class="o">.</span><span class="n">_internal_debugger</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">map_arch</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
830830

831+
<span class="nd">@property</span>
832+
<span class="k">def</span> <span class="nf">kill_on_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Debugger</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
833+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Get whether the process will be killed when the debugger exits.&quot;&quot;&quot;</span>
834+
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_internal_debugger</span><span class="o">.</span><span class="n">kill_on_exit</span>
835+
836+
<span class="nd">@kill_on_exit</span><span class="o">.</span><span class="n">setter</span>
837+
<span class="k">def</span> <span class="nf">kill_on_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Debugger</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
838+
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
839+
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;kill_on_exit must be a boolean&quot;</span><span class="p">)</span>
840+
841+
<span class="bp">self</span><span class="o">.</span><span class="n">_internal_debugger</span><span class="o">.</span><span class="n">kill_on_exit</span> <span class="o">=</span> <span class="n">value</span>
842+
831843
<span class="nd">@property</span>
832844
<span class="k">def</span> <span class="nf">threads</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Debugger</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">ThreadContext</span><span class="p">]:</span>
833845
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the list of threads in the process.&quot;&quot;&quot;</span>

dev/_modules/libdebug/debugger/internal_debugger.html

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,9 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
551551
<span class="n">syscalls_to_not_pprint</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span>
552552
<span class="w"> </span><span class="sd">&quot;&quot;&quot;The syscalls to not pretty print.&quot;&quot;&quot;</span>
553553

554+
<span class="n">kill_on_exit</span><span class="p">:</span> <span class="nb">bool</span>
555+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;A flag that indicates if the debugger should kill the debugged process when it exits.&quot;&quot;&quot;</span>
556+
554557
<span class="n">threads</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">ThreadContext</span><span class="p">]</span>
555558
<span class="w"> </span><span class="sd">&quot;&quot;&quot;A list of all the threads of the debugged process.&quot;&quot;&quot;</span>
556559

@@ -615,6 +618,7 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
615618
<span class="bp">self</span><span class="o">.</span><span class="n">_is_running</span> <span class="o">=</span> <span class="kc">False</span>
616619
<span class="bp">self</span><span class="o">.</span><span class="n">resume_context</span> <span class="o">=</span> <span class="n">ResumeContext</span><span class="p">()</span>
617620
<span class="bp">self</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">map_arch</span><span class="p">(</span><span class="n">libcontext</span><span class="o">.</span><span class="n">platform</span><span class="p">)</span>
621+
<span class="bp">self</span><span class="o">.</span><span class="n">kill_on_exit</span> <span class="o">=</span> <span class="kc">True</span>
618622
<span class="bp">self</span><span class="o">.</span><span class="n">_process_memory_manager</span> <span class="o">=</span> <span class="n">ProcessMemoryManager</span><span class="p">()</span>
619623
<span class="bp">self</span><span class="o">.</span><span class="n">fast_memory</span> <span class="o">=</span> <span class="kc">False</span>
620624
<span class="bp">self</span><span class="o">.</span><span class="n">__polling_thread_command_queue</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">()</span>
@@ -783,11 +787,19 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
783787
<div class="viewcode-block" id="InternalDebugger.terminate">
784788
<a class="viewcode-back" href="../../../libdebug.debugger.html#libdebug.debugger.internal_debugger.InternalDebugger.terminate">[docs]</a>
785789
<span class="k">def</span> <span class="nf">terminate</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">InternalDebugger</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
786-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Terminates the background thread.</span>
790+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Interrupts the process, kills it and then terminates the background thread.</span>
787791

788-
<span class="sd"> The debugger object cannot be used after this method is called.</span>
792+
<span class="sd"> The debugger object will not be usable after this method is called.</span>
789793
<span class="sd"> This method should only be called to free up resources when the debugger object is no longer needed.</span>
790794
<span class="sd"> &quot;&quot;&quot;</span>
795+
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">instanced</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">running</span><span class="p">:</span>
796+
<span class="bp">self</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
797+
798+
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">instanced</span><span class="p">:</span>
799+
<span class="bp">self</span><span class="o">.</span><span class="n">kill</span><span class="p">()</span>
800+
801+
<span class="bp">self</span><span class="o">.</span><span class="n">instanced</span> <span class="o">=</span> <span class="kc">False</span>
802+
791803
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__polling_thread</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
792804
<span class="bp">self</span><span class="o">.</span><span class="n">__polling_thread_command_queue</span><span class="o">.</span><span class="n">put</span><span class="p">((</span><span class="n">THREAD_TERMINATE</span><span class="p">,</span> <span class="p">()))</span>
793805
<span class="bp">self</span><span class="o">.</span><span class="n">__polling_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>

dev/_modules/libdebug/debugger/internal_debugger_holder.html

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,23 @@
426426
<h1>Source code for libdebug.debugger.internal_debugger_holder</h1><div class="highlight"><pre>
427427
<span></span><span class="c1">#</span>
428428
<span class="c1"># This file is part of libdebug Python library (https://github.com/libdebug/libdebug).</span>
429-
<span class="c1"># Copyright (c) 2024 Gabriele Digregorio. All rights reserved.</span>
429+
<span class="c1"># Copyright (c) 2024 Gabriele Digregorio, Roberto Alessandro Bertolini. All rights reserved.</span>
430430
<span class="c1"># Licensed under the MIT license. See LICENSE file in the project root for details.</span>
431431
<span class="c1">#</span>
432432

433+
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
434+
435+
<span class="kn">import</span> <span class="nn">atexit</span>
433436
<span class="kn">from</span> <span class="nn">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span><span class="p">,</span> <span class="n">field</span>
434437
<span class="kn">from</span> <span class="nn">threading</span> <span class="kn">import</span> <span class="n">Lock</span>
438+
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">TYPE_CHECKING</span>
435439
<span class="kn">from</span> <span class="nn">weakref</span> <span class="kn">import</span> <span class="n">WeakKeyDictionary</span>
436440

441+
<span class="kn">from</span> <span class="nn">libdebug.liblog</span> <span class="kn">import</span> <span class="n">liblog</span>
442+
443+
<span class="k">if</span> <span class="n">TYPE_CHECKING</span><span class="p">:</span>
444+
<span class="kn">from</span> <span class="nn">libdebug.debugger.internal_debugger</span> <span class="kn">import</span> <span class="n">InternalDebugger</span>
445+
437446

438447
<div class="viewcode-block" id="InternalDebuggerHolder">
439448
<a class="viewcode-back" href="../../../libdebug.debugger.html#libdebug.debugger.internal_debugger_holder.InternalDebuggerHolder">[docs]</a>
@@ -448,6 +457,26 @@ <h1>Source code for libdebug.debugger.internal_debugger_holder</h1><div class="h
448457

449458

450459
<span class="n">internal_debugger_holder</span> <span class="o">=</span> <span class="n">InternalDebuggerHolder</span><span class="p">()</span>
460+
461+
462+
<span class="k">def</span> <span class="nf">_cleanup_internal_debugger</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
463+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Cleanup the internal debugger.&quot;&quot;&quot;</span>
464+
<span class="k">for</span> <span class="n">debugger</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">internal_debugger_holder</span><span class="o">.</span><span class="n">internal_debuggers</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
465+
<span class="n">debugger</span><span class="p">:</span> <span class="n">InternalDebugger</span>
466+
467+
<span class="k">if</span> <span class="n">debugger</span><span class="o">.</span><span class="n">instanced</span> <span class="ow">and</span> <span class="n">debugger</span><span class="o">.</span><span class="n">kill_on_exit</span><span class="p">:</span>
468+
<span class="k">try</span><span class="p">:</span>
469+
<span class="n">debugger</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
470+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
471+
<span class="n">liblog</span><span class="o">.</span><span class="n">debugger</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error while interrupting debuggee: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
472+
473+
<span class="k">try</span><span class="p">:</span>
474+
<span class="n">debugger</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
475+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
476+
<span class="n">liblog</span><span class="o">.</span><span class="n">debugger</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error while terminating the debugger: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
477+
478+
479+
<span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">_cleanup_internal_debugger</span><span class="p">)</span>
451480
</pre></div>
452481

453482
</article>

dev/_modules/libdebug/libdebug.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ <h1>Source code for libdebug.libdebug</h1><div class="highlight"><pre>
446446
<span class="n">continue_to_binary_entrypoint</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
447447
<span class="n">auto_interrupt_on_command</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
448448
<span class="n">fast_memory</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
449+
<span class="n">kill_on_exit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
449450
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Debugger</span><span class="p">:</span>
450451
<span class="w"> </span><span class="sd">&quot;&quot;&quot;This function is used to create a new `Debugger` object. It returns a `Debugger` object.</span>
451452

@@ -457,6 +458,7 @@ <h1>Source code for libdebug.libdebug</h1><div class="highlight"><pre>
457458
<span class="sd"> continue_to_binary_entrypoint (bool, optional): Whether to automatically continue to the binary entrypoint. Defaults to True.</span>
458459
<span class="sd"> auto_interrupt_on_command (bool, optional): Whether to automatically interrupt the process when a command is issued. Defaults to False.</span>
459460
<span class="sd"> fast_memory (bool, optional): Whether to use a faster memory reading method. Defaults to False.</span>
461+
<span class="sd"> kill_on_exit (bool, optional): Whether to kill the debugged process when the debugger exits. Defaults to True.</span>
460462

461463
<span class="sd"> Returns:</span>
462464
<span class="sd"> Debugger: The `Debugger` object.</span>
@@ -472,6 +474,7 @@ <h1>Source code for libdebug.libdebug</h1><div class="highlight"><pre>
472474
<span class="n">internal_debugger</span><span class="o">.</span><span class="n">auto_interrupt_on_command</span> <span class="o">=</span> <span class="n">auto_interrupt_on_command</span>
473475
<span class="n">internal_debugger</span><span class="o">.</span><span class="n">escape_antidebug</span> <span class="o">=</span> <span class="n">escape_antidebug</span>
474476
<span class="n">internal_debugger</span><span class="o">.</span><span class="n">fast_memory</span> <span class="o">=</span> <span class="n">fast_memory</span>
477+
<span class="n">internal_debugger</span><span class="o">.</span><span class="n">kill_on_exit</span> <span class="o">=</span> <span class="n">kill_on_exit</span>
475478

476479
<span class="n">debugger</span> <span class="o">=</span> <span class="n">Debugger</span><span class="p">()</span>
477480
<span class="n">debugger</span><span class="o">.</span><span class="n">post_init_</span><span class="p">(</span><span class="n">internal_debugger</span><span class="p">)</span>

dev/_sources/basic_features.rst.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ After creating the debugger object, you can start the execution of the program u
3636
3737
The `run()` command returns a `PipeManager` object, which you can use to interact with the program's standard input, output, and error. To read more about the PipeManager interface, please refer to the PipeManager documentation :class:`libdebug.utils.pipe_manager.PipeManager`. Please note that breakpoints are not kept between different runs of the program. If you want to set a breakpoint again, you should do so after the program has restarted.
3838

39+
Any process will be automatically killed when the debugging script exits. If you want to prevent this behavior, you can set the `kill_on_exit` parameter to False when creating the debugger object, or set the companion attribute `kill_on_exit` to False at runtime.
40+
3941
The command queue
4042
-----------------
4143
Control flow commands, register access and memory access are all done through the command queue. This is a FIFO queue of commands that are executed in order.
@@ -275,6 +277,9 @@ An alternative to running the program from the beginning and to resume libdebug
275277
276278
d.attach(pid)
277279
280+
Do note that libdebug automatically kills any running process when the debugging script exits, even if the debugger has detached from it.
281+
If you want to prevent this behavior, you can set the `kill_on_exit` parameter to False when creating the debugger object, or set the companion attribute `kill_on_exit` to False at runtime.
282+
278283
Graceful Termination
279284
====================
280285

0 commit comments

Comments
 (0)