From f9e29e3fa244ff002914f59d705f108dee88ddce Mon Sep 17 00:00:00 2001 From: DocBot Date: Mon, 25 Aug 2025 12:59:38 +0000 Subject: [PATCH] Deployed e76db3f to dev with MkDocs 1.6.1 and mike 2.1.3 --- dev/feed_json_updated.json | 2 +- dev/feed_rss_created.xml | 2 +- dev/feed_rss_updated.xml | 2 +- dev/objects.inv | Bin 40624 -> 40660 bytes .../pwndbg/aglib/disasm/arch/index.html | 6 +- .../pwndbg/aglib/disasm/x86/index.html | 8 +- .../gdblib/ptmalloc2_tracking/index.html | 54 +- dev/reference/pwndbg/lib/elftypes/index.html | 2 +- dev/search/search_index.json | 2 +- dev/sitemap.xml | 976 +++++++++--------- dev/sitemap.xml.gz | Bin 3013 -> 3013 bytes 11 files changed, 547 insertions(+), 507 deletions(-) diff --git a/dev/feed_json_updated.json b/dev/feed_json_updated.json index d8ade8dfd..e72ab22b0 100644 --- a/dev/feed_json_updated.json +++ b/dev/feed_json_updated.json @@ -1 +1 @@ -{"version": "https://jsonfeed.org/version/1", "title": "pwndbg Blog", "home_page_url": "https://pwndbg.re/pwndbg/latest/", "feed_url": "https://pwndbg.re/pwndbg/latest/feed_json_updated.json", "description": "pwndbg (/pa\u028an\u02c8di\u02ccb\u028c\u0261/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.", "icon": "https://pwndbg.re/pwndbg/assets/favicon.ico", "authors": [], "language": "en", "items": [{"id": "https://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/", "url": "https://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/", "title": "Pwndbg coding sprints report", "content_html": "Report of the two coding sprints with Pwndbg\n", "image": null, "date_modified": "2025-08-24T18:36:27+00:00", "authors": [{"name": "Disconnect3d"}], "tags": []}]} \ No newline at end of file +{"version": "https://jsonfeed.org/version/1", "title": "pwndbg Blog", "home_page_url": "https://pwndbg.re/pwndbg/latest/", "feed_url": "https://pwndbg.re/pwndbg/latest/feed_json_updated.json", "description": "pwndbg (/pa\u028an\u02c8di\u02ccb\u028c\u0261/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.", "icon": "https://pwndbg.re/pwndbg/assets/favicon.ico", "authors": [], "language": "en", "items": [{"id": "https://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/", "url": "https://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/", "title": "Pwndbg coding sprints report", "content_html": "Report of the two coding sprints with Pwndbg\n", "image": null, "date_modified": "2025-08-25T12:56:04+00:00", "authors": [{"name": "Disconnect3d"}], "tags": []}]} \ No newline at end of file diff --git a/dev/feed_rss_created.xml b/dev/feed_rss_created.xml index 0ae9824d3..1fcf44a71 100644 --- a/dev/feed_rss_created.xml +++ b/dev/feed_rss_created.xml @@ -1 +1 @@ - pwndbg Blogpwndbg (/paʊnˈdiˌbʌɡ/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.https://pwndbg.re/pwndbg/latest/https://github.com/pwndbg/pwndbg/en Sun, 24 Aug 2025 18:38:38 -0000 Sun, 24 Aug 2025 18:38:38 -0000 1440 MkDocs RSS plugin - v1.17.1 https://pwndbg.re/pwndbg/assets/favicon.ico pwndbg Bloghttps://pwndbg.re/pwndbg/latest/ Pwndbg coding sprints report Disconnect3d Report of the two coding sprints with Pwndbghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ Sun, 21 Aug 2022 00:00:00 +0000pwndbg Bloghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ \ No newline at end of file + pwndbg Blogpwndbg (/paʊnˈdiˌbʌɡ/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.https://pwndbg.re/pwndbg/latest/https://github.com/pwndbg/pwndbg/en Mon, 25 Aug 2025 12:58:16 -0000 Mon, 25 Aug 2025 12:58:16 -0000 1440 MkDocs RSS plugin - v1.17.1 https://pwndbg.re/pwndbg/assets/favicon.ico pwndbg Bloghttps://pwndbg.re/pwndbg/latest/ Pwndbg coding sprints report Disconnect3d Report of the two coding sprints with Pwndbghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ Sun, 21 Aug 2022 00:00:00 +0000pwndbg Bloghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ \ No newline at end of file diff --git a/dev/feed_rss_updated.xml b/dev/feed_rss_updated.xml index c5e2f434b..450bd658f 100644 --- a/dev/feed_rss_updated.xml +++ b/dev/feed_rss_updated.xml @@ -1 +1 @@ - pwndbg Blogpwndbg (/paʊnˈdiˌbʌɡ/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.https://pwndbg.re/pwndbg/latest/https://github.com/pwndbg/pwndbg/en Sun, 24 Aug 2025 18:38:38 -0000 Sun, 24 Aug 2025 18:38:38 -0000 1440 MkDocs RSS plugin - v1.17.1 https://pwndbg.re/pwndbg/assets/favicon.ico pwndbg Bloghttps://pwndbg.re/pwndbg/latest/ Pwndbg coding sprints report Disconnect3d Report of the two coding sprints with Pwndbghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ Sun, 24 Aug 2025 18:36:27 +0000pwndbg Bloghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ \ No newline at end of file + pwndbg Blogpwndbg (/paʊnˈdiˌbʌɡ/) is a GDB plug-in that makes debugging with GDB suck less, with a focus on features needed by low-level software developers, hardware hackers, reverse-engineers and exploit developers.https://pwndbg.re/pwndbg/latest/https://github.com/pwndbg/pwndbg/en Mon, 25 Aug 2025 12:58:16 -0000 Mon, 25 Aug 2025 12:58:16 -0000 1440 MkDocs RSS plugin - v1.17.1 https://pwndbg.re/pwndbg/assets/favicon.ico pwndbg Bloghttps://pwndbg.re/pwndbg/latest/ Pwndbg coding sprints report Disconnect3d Report of the two coding sprints with Pwndbghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ Mon, 25 Aug 2025 12:56:04 +0000pwndbg Bloghttps://pwndbg.re/pwndbg/latest/blog/2022/08/21/pwndbg-coding-sprints-report/ \ No newline at end of file diff --git a/dev/objects.inv b/dev/objects.inv index c8d36cde9b45eceb5706fdbf540127454220c3a9..3463015f645303eae73392921325a88215215715 100644 GIT binary patch delta 12928 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 delta 12841 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

DEBUG_ENHANCEMENT module-attribute ¤

DEBUG_ENHANCEMENT = False
-

groups module-attribute ¤

groups = {v: _bfor (k, v) in items() if startswith('CS_GRP_')}
-

ops module-attribute ¤

ops = {v: _yfor (k, v) in items() if startswith('CS_OP_')}
-

access module-attribute ¤

access = {v: _vfor (k, v) in items() if startswith('CS_AC_')}
+

groups module-attribute ¤

groups = {v: _Lfor (k, v) in items() if startswith('CS_GRP_')}
+

ops module-attribute ¤

ops = {v: _Qfor (k, v) in items() if startswith('CS_OP_')}
+

access module-attribute ¤

access = {v: _2for (k, v) in items() if startswith('CS_AC_')}
 

DO_NOT_EMULATE module-attribute ¤

DO_NOT_EMULATE = {CS_GRP_INT, CS_GRP_INVALID, CS_GRP_IRET}
 

DisassemblyAssistant ¤

DisassemblyAssistant(architecture: X86_MATH_INSTRUCTIONS

groups module-attribute ¤

groups = {v: _mfor (k, v) in items() if startswith('X86_GRP_')}
-

ops module-attribute ¤

ops = {v: _Xfor (k, v) in items() if startswith('X86_OP_')}
-

regs module-attribute ¤

regs = {v: _Cfor (k, v) in items() if startswith('X86_REG_')}
-

access module-attribute ¤

access = {v: _tfor (k, v) in items() if startswith('CS_AC_')}
+   (pwndbg.aglib.disasm.x86.X86_MATH_INSTRUCTIONS)" href=#pwndbg.aglib.disasm.x86.X86_MATH_INSTRUCTIONS>X86_MATH_INSTRUCTIONS

groups module-attribute ¤

groups = {v: _ofor (k, v) in items() if startswith('X86_GRP_')}
+

ops module-attribute ¤

ops = {v: _Cfor (k, v) in items() if startswith('X86_OP_')}
+

regs module-attribute ¤

regs = {v: _Xfor (k, v) in items() if startswith('X86_REG_')}
+

access module-attribute ¤

access = {v: _wfor (k, v) in items() if startswith('CS_AC_')}
 

X86_MATH_INSTRUCTIONS module-attribute ¤

X86_MATH_INSTRUCTIONS = {
     X86_INS_ADD: "+",
     X86_INS_SUB: "-",
diff --git a/dev/reference/pwndbg/gdblib/ptmalloc2_tracking/index.html b/dev/reference/pwndbg/gdblib/ptmalloc2_tracking/index.html
index 126c00399..4fd15a034 100644
--- a/dev/reference/pwndbg/gdblib/ptmalloc2_tracking/index.html
+++ b/dev/reference/pwndbg/gdblib/ptmalloc2_tracking/index.html
@@ -1,4 +1,4 @@
- pwndbg.gdblib.ptmalloc2_tracking - Documentation      

ptmalloc2_tracking ¤

Heap Tracking

This module implements runtime tracking of the heap, allowing pwndbg to detect heap related misbehavior coming from an inferior in real time, which lets us catch UAF bugs, double frees (and more), and report them to the user.

Approach¤

The approach used starting with using breakpoints to hook into the following libc symbols: malloc, free, calloc, and realloc. Each hook has a reference to a shared instance of the Tracker class, which is responsible for handling the tracking of the chunks of memory from the heap.

The tracker keeps two sorted maps of chunks, for freed and in use chunks, keyed by their base address. Newly allocated chunks are added to the map of in use chunks right before an allocating call returns, and newly freed chunks are moved from the map of in use chunks to the map of free ones right before a freeing call returns. The tracker is also responsible for installing watchpoints for free chunks when they're added to the free chunk map and deleting them when their corresponding chunks are removed from the map.

Additionally, because going through the data structures inside of libc to determine whether a chunk is free or not is, more often than not, a fairly slow operation, this module will only do so when it determines its view of the chunks has diverged from the one in libc in a way that would affect behavior. When such a diffence is detected, this module will rebuild the chunk maps in the range it determines to have been affected.

Currently, the way it does this is by deleting and querying from libc the new status of all chunks that overlap the region of a new allocation when it detects that allocation overlaps chunks it previously considered free.

This approach lets us avoid a lot of the following linked lists that comes with trying to answer the allocation status of a chunk, by keeping at hand as much known-good information as possible about them. Keep in mind that, although it is much faster than going to libc every time we need to know the allocation status of a chunk, this approach does have drawbacks when it comes to memory usage.

Compatibility¤

Currently module assumes the inferior is using GLibc.

There are points along the code in this module where the assumptions it makes are explicitly documented and checked to be valid for the current inferior, so that it may be immediately clear to the user that something has gone wrong if they happen to not be valid. However, be aware that there may be assumptions that were not made explicit.

Classes:

Functions:

Attributes:

ptr instance-attribute ¤

ptr = ptr
+

ptr_str instance-attribute ¤

ptr_str = colorize_ptr(ptr)
 

tracker instance-attribute ¤

tracker = tracker
 

stop ¤

stop()
 

out_of_scope ¤

out_of_scope() -> None
diff --git a/dev/reference/pwndbg/lib/elftypes/index.html b/dev/reference/pwndbg/lib/elftypes/index.html
index 3e56c2b4b..cf4d5b979 100644
--- a/dev/reference/pwndbg/lib/elftypes/index.html
+++ b/dev/reference/pwndbg/lib/elftypes/index.html
@@ -135,7 +135,7 @@
     47: "AT_L3_CACHEGEOMETRY",
     51: "AT_MINSIGSTKSZ",
 }
-

AT_CONSTANT_NAMES module-attribute ¤

AT_CONSTANT_NAMES = {v: _gfor (k, v) in items()}
+

AT_CONSTANT_NAMES module-attribute ¤

AT_CONSTANT_NAMES = {v: _5for (k, v) in items()}
 

constants ¤

Attributes: