feat: pattern scanning, pointer chains, thread enumeration, partial name match and logger - #24
Merged
Merged
Conversation
…ame match and logger - Pattern scanning (AOB) with IDA-style "?" wildcards and bytes-regex support, via `process.search_by_pattern(...)` on all three backends. - `resolve_pointer_chain(base, offsets, *, ptr_size=8)` for multi-level pointer walks — the operation Cheat-Engine tables describe. - `get_threads()` / `main_thread` thread enumeration on Windows (Toolhelp32), Linux (`/proc/<pid>/task/`) and macOS (`task_threads`), with a shared `ThreadInfo` dataclass. - `exact_match=False` flag on `OpenProcess` / process-name lookup for substring matching (e.g. "chrome" -> "chrome.exe" / "Google Chrome"). - Module-level "PyMemoryEditor" logger with NullHandler (silent by default); scanning helpers and macOS write-via-protect now emit at DEBUG/WARNING. - 43 new tests covering the five features. - README sections highlighting pattern scan and pointer chains.
…e in the Qt app - ScannerPanel gains an "AOB Pattern (IDA)" value type that routes through search_by_pattern; scan-type/length controls and "Next Scan" are hidden in pattern mode since they don't apply. - New Threads dialog (Tools → Threads, Ctrl+T): sortable TID/state/priority table with optional auto-refresh, backed by get_threads(). - New Resolve Pointer Chain dialog (Tools, toolbar, Ctrl+Shift+P): Cheat- Engine-style chain of "[+ hex ]" offset slots with a "+" to add hops and "×" to remove them; a "Base is a pointer" toggle switches between dereferencing (CE tables) and direct address + struct offsets; resolved addresses can be promoted into the cheat table. - New Log Console dialog (Tools, Ctrl+L): live view of the "PyMemoryEditor" logger via a thread-safe handler. App modules now log captured errors (hex viewer / cheat write / scan worker / pointer chain) through child loggers so they surface in the console.
- Lead the pattern-scan section with a regex (email-harvesting) example, then the AOB/code example; retitle it "grep for process memory". - Retitle the pointer-chain section to "resolve addresses that change every run" and describe multi-level pointers without framing them as a Cheat-Engine concept. - Add section icons (🔍 search, 🗺️ memory regions) and a one-line primer on what memory regions are. - Fix the nav-bar anchors to match the new section titles.
Add pattern scan, pointer-chain resolution, the threads viewer and the log console to the bundled-app feature list so it reflects this PR.
Group the related app features into fewer, shorter bullets so the "out of the box" column balances the install column beside it.
- Add a hero screenshot and a concrete use-case teaser near the top. - Walk through the scan -> refine -> write loop in Quick Start so the reader understands where addresses come from. - Document get_threads()/main_thread in the Usage Guide. - Add a Troubleshooting section covering the first errors a user hits (PermissionError per OS, ProcessNotFoundError, empty Windows scans), and show how to enable the "PyMemoryEditor" logger. - Make the nav bar list top-level sections only.
Add scripts/generate_app_screenshot.py for regenerating the app screenshot, refresh the screenshot, and exclude scripts/ from the source distribution.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
process.search_by_pattern(...)on all three backends.resolve_pointer_chain(base, offsets, *, ptr_size=8)for multi-level pointer walks — the operation Cheat-Engine tables describe.get_threads()/main_threadthread enumeration on Windows (Toolhelp32), Linux (/proc/<pid>/task/) and macOS (task_threads), with a sharedThreadInfodataclass.exact_match=Falseflag onOpenProcess/ process-name lookup for substring matching (e.g. "chrome" -> "chrome.exe" / "Google Chrome").Why is this PR necessary, what does it do?
Checklist (complete all items):
References:
No references to be shared.
Notes:
No notes to be shared.