gdare2 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gdare2-0.1.0/.github/workflows/ci.yml +82 -0
- gdare2-0.1.0/.github/workflows/publish.yml +130 -0
- gdare2-0.1.0/.gitignore +19 -0
- gdare2-0.1.0/CHANGELOG.md +102 -0
- gdare2-0.1.0/LICENSE +21 -0
- gdare2-0.1.0/PKG-INFO +547 -0
- gdare2-0.1.0/README.md +516 -0
- gdare2-0.1.0/RELEASING.md +222 -0
- gdare2-0.1.0/assets/badges/license.svg +23 -0
- gdare2-0.1.0/assets/badges/pypi.svg +23 -0
- gdare2-0.1.0/assets/badges/python.svg +23 -0
- gdare2-0.1.0/pyproject.toml +84 -0
- gdare2-0.1.0/src/gdare2/__init__.py +4 -0
- gdare2-0.1.0/src/gdare2/__main__.py +3 -0
- gdare2-0.1.0/src/gdare2/arch_matrix.py +33 -0
- gdare2-0.1.0/src/gdare2/argv.py +417 -0
- gdare2-0.1.0/src/gdare2/assembler.py +157 -0
- gdare2-0.1.0/src/gdare2/cli.py +344 -0
- gdare2-0.1.0/src/gdare2/client.py +112 -0
- gdare2-0.1.0/src/gdare2/cmd/__init__.py +142 -0
- gdare2-0.1.0/src/gdare2/cmd/analysis.py +367 -0
- gdare2-0.1.0/src/gdare2/cmd/assemble.py +140 -0
- gdare2-0.1.0/src/gdare2/cmd/comments.py +147 -0
- gdare2-0.1.0/src/gdare2/cmd/eval.py +401 -0
- gdare2-0.1.0/src/gdare2/cmd/extras.py +576 -0
- gdare2-0.1.0/src/gdare2/cmd/flags.py +460 -0
- gdare2-0.1.0/src/gdare2/cmd/info.py +481 -0
- gdare2-0.1.0/src/gdare2/cmd/meta.py +228 -0
- gdare2-0.1.0/src/gdare2/cmd/metadata.py +195 -0
- gdare2-0.1.0/src/gdare2/cmd/misc.py +54 -0
- gdare2-0.1.0/src/gdare2/cmd/print.py +915 -0
- gdare2-0.1.0/src/gdare2/cmd/search.py +481 -0
- gdare2-0.1.0/src/gdare2/cmd/seek.py +269 -0
- gdare2-0.1.0/src/gdare2/cmd/types.py +355 -0
- gdare2-0.1.0/src/gdare2/cmd/write.py +288 -0
- gdare2-0.1.0/src/gdare2/cmd/xrefs.py +323 -0
- gdare2-0.1.0/src/gdare2/completion.py +86 -0
- gdare2-0.1.0/src/gdare2/config.py +197 -0
- gdare2-0.1.0/src/gdare2/errors.py +103 -0
- gdare2-0.1.0/src/gdare2/escape.py +31 -0
- gdare2-0.1.0/src/gdare2/expr.py +262 -0
- gdare2-0.1.0/src/gdare2/filter.py +243 -0
- gdare2-0.1.0/src/gdare2/flags.py +96 -0
- gdare2-0.1.0/src/gdare2/fmt/__init__.py +1 -0
- gdare2-0.1.0/src/gdare2/fmt/codegen.py +143 -0
- gdare2-0.1.0/src/gdare2/fmt/disasm.py +113 -0
- gdare2-0.1.0/src/gdare2/fmt/graph.py +93 -0
- gdare2-0.1.0/src/gdare2/fmt/listing.py +11 -0
- gdare2-0.1.0/src/gdare2/fmt/memory.py +75 -0
- gdare2-0.1.0/src/gdare2/fmt/strings.py +93 -0
- gdare2-0.1.0/src/gdare2/formats/__init__.py +5 -0
- gdare2-0.1.0/src/gdare2/formats/elf.py +888 -0
- gdare2-0.1.0/src/gdare2/formats/magic.py +43 -0
- gdare2-0.1.0/src/gdare2/jsonutil.py +22 -0
- gdare2-0.1.0/src/gdare2/launcher.py +215 -0
- gdare2-0.1.0/src/gdare2/parity.py +172 -0
- gdare2-0.1.0/src/gdare2/parser.py +225 -0
- gdare2-0.1.0/src/gdare2/pf.py +486 -0
- gdare2-0.1.0/src/gdare2/pipe.py +59 -0
- gdare2-0.1.0/src/gdare2/protocol.py +75 -0
- gdare2-0.1.0/src/gdare2/r2pipe_server.py +177 -0
- gdare2-0.1.0/src/gdare2/rc.py +74 -0
- gdare2-0.1.0/src/gdare2/registry.py +217 -0
- gdare2-0.1.0/src/gdare2/session.py +1087 -0
- gdare2-0.1.0/src/gdare2d/__init__.py +3 -0
- gdare2-0.1.0/src/gdare2d/__main__.py +245 -0
- gdare2-0.1.0/src/gdare2d/context.py +29 -0
- gdare2-0.1.0/src/gdare2d/dispatch.py +122 -0
- gdare2-0.1.0/src/gdare2d/executor.py +68 -0
- gdare2-0.1.0/src/gdare2d/import_plan.py +218 -0
- gdare2-0.1.0/src/gdare2d/ops/__init__.py +1 -0
- gdare2-0.1.0/src/gdare2d/ops/_helpers.py +88 -0
- gdare2-0.1.0/src/gdare2d/ops/analysis.py +299 -0
- gdare2-0.1.0/src/gdare2d/ops/assemble.py +70 -0
- gdare2-0.1.0/src/gdare2d/ops/batch.py +220 -0
- gdare2-0.1.0/src/gdare2d/ops/comments.py +151 -0
- gdare2-0.1.0/src/gdare2d/ops/decompile.py +84 -0
- gdare2-0.1.0/src/gdare2d/ops/disasm.py +221 -0
- gdare2-0.1.0/src/gdare2d/ops/escape.py +26 -0
- gdare2-0.1.0/src/gdare2d/ops/graph.py +163 -0
- gdare2-0.1.0/src/gdare2d/ops/info.py +315 -0
- gdare2-0.1.0/src/gdare2d/ops/memory.py +56 -0
- gdare2-0.1.0/src/gdare2d/ops/names.py +125 -0
- gdare2-0.1.0/src/gdare2d/ops/search.py +324 -0
- gdare2-0.1.0/src/gdare2d/ops/session.py +74 -0
- gdare2-0.1.0/src/gdare2d/ops/types.py +482 -0
- gdare2-0.1.0/src/gdare2d/ops/write.py +246 -0
- gdare2-0.1.0/src/gdare2d/ops/xrefs.py +61 -0
- gdare2-0.1.0/src/gdare2d/runtime.py +551 -0
- gdare2-0.1.0/src/gdare2d/server.py +146 -0
- gdare2-0.1.0/tests/arch_matrix/test_arch_matrix.py +50 -0
- gdare2-0.1.0/tests/golden/ls.json +1414 -0
- gdare2-0.1.0/tests/golden/upnpd.json +2799 -0
- gdare2-0.1.0/tests/integration/test_real_ghidra.py +941 -0
- gdare2-0.1.0/tests/parity/conftest.py +60 -0
- gdare2-0.1.0/tests/parity/test_parity.py +181 -0
- gdare2-0.1.0/tests/test_argv.py +104 -0
- gdare2-0.1.0/tests/test_assembler.py +160 -0
- gdare2-0.1.0/tests/test_batch.py +75 -0
- gdare2-0.1.0/tests/test_cli.py +78 -0
- gdare2-0.1.0/tests/test_client.py +25 -0
- gdare2-0.1.0/tests/test_codegen.py +191 -0
- gdare2-0.1.0/tests/test_command_coverage.py +423 -0
- gdare2-0.1.0/tests/test_completion.py +35 -0
- gdare2-0.1.0/tests/test_config.py +79 -0
- gdare2-0.1.0/tests/test_daemon_info.py +27 -0
- gdare2-0.1.0/tests/test_errors.py +79 -0
- gdare2-0.1.0/tests/test_eval_cmds.py +109 -0
- gdare2-0.1.0/tests/test_expr.py +51 -0
- gdare2-0.1.0/tests/test_extras.py +287 -0
- gdare2-0.1.0/tests/test_filter.py +105 -0
- gdare2-0.1.0/tests/test_flags_spaces.py +273 -0
- gdare2-0.1.0/tests/test_fmt.py +174 -0
- gdare2-0.1.0/tests/test_formats_elf.py +286 -0
- gdare2-0.1.0/tests/test_graph_out.py +138 -0
- gdare2-0.1.0/tests/test_import_plan.py +65 -0
- gdare2-0.1.0/tests/test_info_formats.py +113 -0
- gdare2-0.1.0/tests/test_instance_id.py +59 -0
- gdare2-0.1.0/tests/test_language.py +152 -0
- gdare2-0.1.0/tests/test_launcher.py +119 -0
- gdare2-0.1.0/tests/test_packaging.py +74 -0
- gdare2-0.1.0/tests/test_parity_utils.py +95 -0
- gdare2-0.1.0/tests/test_parser.py +77 -0
- gdare2-0.1.0/tests/test_pf.py +224 -0
- gdare2-0.1.0/tests/test_protocol.py +21 -0
- gdare2-0.1.0/tests/test_r2pipe_server.py +92 -0
- gdare2-0.1.0/tests/test_rc.py +127 -0
- gdare2-0.1.0/tests/test_registry.py +34 -0
- gdare2-0.1.0/tests/test_runtime_sessions.py +107 -0
- gdare2-0.1.0/tests/test_search_gaps.py +150 -0
- gdare2-0.1.0/tests/test_seek_gaps.py +80 -0
- gdare2-0.1.0/tests/test_session.py +1399 -0
- gdare2-0.1.0/tests/test_xrefs_gaps.py +243 -0
- gdare2-0.1.0/tools/arch_matrix.py +151 -0
- gdare2-0.1.0/tools/capture_r2_golden.py +199 -0
- gdare2-0.1.0/tools/perf_probe.py +136 -0
- gdare2-0.1.0/tools/spike_pyghidra.py +120 -0
- gdare2-0.1.0/tools/update_badges.py +119 -0
- gdare2-0.1.0/uv.lock +790 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: ci-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
name: Test Python ${{ matrix.python-version }}
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
fail-fast: false
|
|
22
|
+
matrix:
|
|
23
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v7
|
|
26
|
+
with:
|
|
27
|
+
persist-credentials: false
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v7
|
|
30
|
+
with:
|
|
31
|
+
python-version: ${{ matrix.python-version }}
|
|
32
|
+
- name: Set up uv
|
|
33
|
+
uses: astral-sh/setup-uv@v10.3.3
|
|
34
|
+
with:
|
|
35
|
+
enable-cache: true
|
|
36
|
+
cache-dependency-glob: uv.lock
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --group dev
|
|
39
|
+
- name: Run tests
|
|
40
|
+
run: uv run pytest
|
|
41
|
+
|
|
42
|
+
lint:
|
|
43
|
+
name: Lint
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v7
|
|
47
|
+
with:
|
|
48
|
+
persist-credentials: false
|
|
49
|
+
- name: Set up Python
|
|
50
|
+
uses: actions/setup-python@v7
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.13"
|
|
53
|
+
- name: Set up uv
|
|
54
|
+
uses: astral-sh/setup-uv@v10.3.3
|
|
55
|
+
with:
|
|
56
|
+
enable-cache: true
|
|
57
|
+
cache-dependency-glob: uv.lock
|
|
58
|
+
- name: Install dependencies
|
|
59
|
+
run: uv sync --group dev
|
|
60
|
+
- name: Check style
|
|
61
|
+
run: uv run ruff check .
|
|
62
|
+
|
|
63
|
+
build:
|
|
64
|
+
name: Build distributions
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v7
|
|
68
|
+
with:
|
|
69
|
+
persist-credentials: false
|
|
70
|
+
- name: Set up Python
|
|
71
|
+
uses: actions/setup-python@v7
|
|
72
|
+
with:
|
|
73
|
+
python-version: "3.13"
|
|
74
|
+
- name: Set up uv
|
|
75
|
+
uses: astral-sh/setup-uv@v10.3.3
|
|
76
|
+
with:
|
|
77
|
+
enable-cache: true
|
|
78
|
+
cache-dependency-glob: uv.lock
|
|
79
|
+
- name: Build sdist and wheel
|
|
80
|
+
run: uv build
|
|
81
|
+
- name: Validate package metadata
|
|
82
|
+
run: uv run --with twine twine check dist/*
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
target:
|
|
9
|
+
description: Index to publish to
|
|
10
|
+
required: true
|
|
11
|
+
default: testpypi
|
|
12
|
+
type: choice
|
|
13
|
+
options:
|
|
14
|
+
- testpypi
|
|
15
|
+
- pypi
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
test:
|
|
22
|
+
name: Test before release
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v7
|
|
26
|
+
with:
|
|
27
|
+
persist-credentials: false
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v7
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.13"
|
|
32
|
+
- name: Set up uv
|
|
33
|
+
uses: astral-sh/setup-uv@v10.3.3
|
|
34
|
+
with:
|
|
35
|
+
enable-cache: true
|
|
36
|
+
cache-dependency-glob: uv.lock
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --group dev
|
|
39
|
+
- name: Run tests
|
|
40
|
+
run: uv run pytest
|
|
41
|
+
- name: Check style
|
|
42
|
+
run: uv run ruff check .
|
|
43
|
+
|
|
44
|
+
build:
|
|
45
|
+
name: Build distributions
|
|
46
|
+
needs: test
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v7
|
|
50
|
+
with:
|
|
51
|
+
persist-credentials: false
|
|
52
|
+
- name: Set up Python
|
|
53
|
+
uses: actions/setup-python@v7
|
|
54
|
+
with:
|
|
55
|
+
python-version: "3.13"
|
|
56
|
+
- name: Check that the tag matches the package version
|
|
57
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
58
|
+
run: |
|
|
59
|
+
python - <<'PY'
|
|
60
|
+
import os
|
|
61
|
+
import pathlib
|
|
62
|
+
import re
|
|
63
|
+
import sys
|
|
64
|
+
|
|
65
|
+
tag = os.environ["GITHUB_REF_NAME"].removeprefix("v")
|
|
66
|
+
text = pathlib.Path("src/gdare2/__init__.py").read_text(encoding="utf-8")
|
|
67
|
+
match = re.search(r'^__version__ = "([^"]+)"', text, re.MULTILINE)
|
|
68
|
+
version = match.group(1) if match else "<missing>"
|
|
69
|
+
if tag != version:
|
|
70
|
+
sys.exit(f"tag {tag!r} does not match package version {version!r}")
|
|
71
|
+
PY
|
|
72
|
+
- name: Install build frontend and validator
|
|
73
|
+
run: python -m pip install --upgrade build twine
|
|
74
|
+
- name: Build sdist and wheel
|
|
75
|
+
run: python -m build
|
|
76
|
+
- name: Validate package metadata
|
|
77
|
+
run: python -m twine check dist/*
|
|
78
|
+
- name: Store distribution packages
|
|
79
|
+
uses: actions/upload-artifact@v7
|
|
80
|
+
with:
|
|
81
|
+
name: python-package-distributions
|
|
82
|
+
path: dist/
|
|
83
|
+
if-no-files-found: error
|
|
84
|
+
|
|
85
|
+
publish-to-testpypi:
|
|
86
|
+
name: Publish to TestPyPI
|
|
87
|
+
if: >-
|
|
88
|
+
github.event_name == 'workflow_dispatch' &&
|
|
89
|
+
inputs.target == 'testpypi'
|
|
90
|
+
needs: build
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
environment:
|
|
93
|
+
name: testpypi
|
|
94
|
+
url: https://test.pypi.org/p/gdare2
|
|
95
|
+
permissions:
|
|
96
|
+
contents: read
|
|
97
|
+
id-token: write
|
|
98
|
+
steps:
|
|
99
|
+
- name: Download all the dists
|
|
100
|
+
uses: actions/download-artifact@v8
|
|
101
|
+
with:
|
|
102
|
+
name: python-package-distributions
|
|
103
|
+
path: dist/
|
|
104
|
+
- name: Publish to TestPyPI
|
|
105
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
106
|
+
with:
|
|
107
|
+
repository-url: https://test.pypi.org/legacy/
|
|
108
|
+
skip-existing: true
|
|
109
|
+
|
|
110
|
+
publish-to-pypi:
|
|
111
|
+
name: Publish to PyPI
|
|
112
|
+
if: >-
|
|
113
|
+
github.event_name == 'release' ||
|
|
114
|
+
(github.event_name == 'workflow_dispatch' && inputs.target == 'pypi')
|
|
115
|
+
needs: build
|
|
116
|
+
runs-on: ubuntu-latest
|
|
117
|
+
environment:
|
|
118
|
+
name: pypi
|
|
119
|
+
url: https://pypi.org/p/gdare2
|
|
120
|
+
permissions:
|
|
121
|
+
contents: read
|
|
122
|
+
id-token: write
|
|
123
|
+
steps:
|
|
124
|
+
- name: Download all the dists
|
|
125
|
+
uses: actions/download-artifact@v8
|
|
126
|
+
with:
|
|
127
|
+
name: python-package-distributions
|
|
128
|
+
path: dist/
|
|
129
|
+
- name: Publish to PyPI
|
|
130
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
gdare2-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*.egg-info/
|
|
4
|
+
.pytest_cache/
|
|
5
|
+
.ruff_cache/
|
|
6
|
+
.venv/
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
.coverage
|
|
10
|
+
htmlcov/
|
|
11
|
+
site/
|
|
12
|
+
.pypirc
|
|
13
|
+
*.whl
|
|
14
|
+
*.tar.gz
|
|
15
|
+
*.log
|
|
16
|
+
*.gpr
|
|
17
|
+
*.rep/
|
|
18
|
+
# Local-only design and development notes; never commit or publish.
|
|
19
|
+
docs/
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to gdare2 are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/) and the project uses
|
|
5
|
+
[Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [0.1.0] - 2026-11-14
|
|
8
|
+
|
|
9
|
+
First public release.
|
|
10
|
+
|
|
11
|
+
v2 compatibility batches A–C (G1–G18) and the first batch-D item (G19).
|
|
12
|
+
|
|
13
|
+
v3 batch A: command-language layer (`?` expression family, `@` temporary
|
|
14
|
+
modifiers, macros, `.cmd`/`.!cmd` interpretation, repeat-prefix output
|
|
15
|
+
accumulation) and the parity environment repair (radare2 6.2.6 + rebuilt
|
|
16
|
+
goldens).
|
|
17
|
+
|
|
18
|
+
v3 batch B: output/input format families (`pc` code-generation family,
|
|
19
|
+
compare variants `c2/c4/c8/cJ/cv`, yank variants `yj/y*/yp/yq/ys/yw/yz`,
|
|
20
|
+
flag subcommands `fc/fm/fo/fd`, `fs` flag spaces, seek gaps `sa/sC/sd`).
|
|
21
|
+
|
|
22
|
+
v3 batch C: search and graph completion (`/b` backward hex search, `agC`
|
|
23
|
+
call graph with DOT rendering, `axg` reference graph, explicit
|
|
24
|
+
not-supported decisions for the remaining `/` and `ax` variants).
|
|
25
|
+
|
|
26
|
+
v3 batch D: configuration and ecosystem (new keys `asm.offset`,
|
|
27
|
+
`scr.utf8`, `bin.demangle`, `cfg.sandbox`, `search.maxhits`; explicit
|
|
28
|
+
errors for unsupported r2 keys like `asm.emu`/`anal.*`; `--pipe-listen`
|
|
29
|
+
r2pipe-compatible TCP command channel; CLI option audit).
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- Expanded radare2 command compatibility: `p6`/`p=`/`pj`/`pr`/`ph`/`pwd`,
|
|
34
|
+
`pdq`/`pdC`/`pdJ`/`pd,`, `s:`/`s=`, `fn`/`fN`/`fx`, `e*`/`e-`/`e!`/`env`/
|
|
35
|
+
`es`/`et`/`ev`, `bj`/`bf`/`bm`, `iD`/`iC`/`iV`/`iv`/`iT`/`iee`/`ies`,
|
|
36
|
+
`Ch`/`Cs`/`Cm`/`Cf`/`Ct`/`CL`, and `tn`/`to`/`tk`/`tl`/`tx`.
|
|
37
|
+
- Search variants `/i`, `/d`, `/z`, `/m`, `/c` and `/R`; `/m` and `/c` share a
|
|
38
|
+
deterministic built-in magic/crypto signature scanner.
|
|
39
|
+
- Write commands `wt`/`wv`/`wr`/`ws`/`ww`, including width and float variants
|
|
40
|
+
for `wv`.
|
|
41
|
+
- Project snapshots now preserve hidden ranges, string/magic metadata, type
|
|
42
|
+
comments, source lines, type links, no-return marks and notes; `Pc` emits
|
|
43
|
+
replay commands for all of them.
|
|
44
|
+
- PyPI-ready packaging: PEP 639 license metadata, a required
|
|
45
|
+
`pyghidra>=3.2.0` runtime dependency, a `dev` dependency group, self-hosted
|
|
46
|
+
README badges, packaging regression tests, and TestPyPI/PyPI Trusted
|
|
47
|
+
Publishing workflows.
|
|
48
|
+
- `pip install gdare2` is now the documented installation path.
|
|
49
|
+
- `--assembler=ghidra|rasm2|auto` now configures `asm.assembler`; explicit
|
|
50
|
+
values override rc files, and `-e asm.assembler=...` wins on the same
|
|
51
|
+
command line.
|
|
52
|
+
- `pdi` emits r2-style `address flag:` lines for client-side flags without
|
|
53
|
+
duplicating the current instruction symbol.
|
|
54
|
+
- `iSS` reads ELF program headers from the input file; `ih`/`iH`/`il`/`ir`
|
|
55
|
+
expose the ELF header, `DT_NEEDED` libraries and relocations.
|
|
56
|
+
- Replayable command variants: `f*`, `C*`/`CC*`/`C*.`, `CCu base64:`,
|
|
57
|
+
`t*`, `s*`, `b*`, `iS*` and `ax*`/`axlj`/`axlq`/`axlc`.
|
|
58
|
+
- `pf`/`pfj`/`pfs`/`pf.<name>` formatting with scalars, arrays, offset
|
|
59
|
+
controls, unions and named formats.
|
|
60
|
+
- `~` filter v2: multi-column/negative/range selectors, column sorting and
|
|
61
|
+
`~{}` JSON pretty-printing.
|
|
62
|
+
- `p` family read commands: `pdb`, `pC`, `pA`, `pxd`/`pxu`/`pxj`, the `ps`
|
|
63
|
+
variants, `p8` projections and `pvu`/`pvd`/`pvp`.
|
|
64
|
+
- Tab completion for flags/functions and `$` variables; rc hierarchy with
|
|
65
|
+
`rc.d/*`, project ancestor files and `GDARE2_RCFILE`.
|
|
66
|
+
- Backtick command substitution and `px` layout aligned with r2
|
|
67
|
+
(`hex.pairs`/`hex.offset`/`hex.ascii`).
|
|
68
|
+
- GitHub Actions CI, configuration/format test suites and a PyPI publish
|
|
69
|
+
workflow.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- The README is now English-only. The `docs/` tree is maintained locally and
|
|
74
|
+
excluded from Git and release artifacts.
|
|
75
|
+
- `pd`/`pdi` render instruction bytes as contiguous hexpairs (r2 shape);
|
|
76
|
+
instructions longer than eight bytes are elided with `..`.
|
|
77
|
+
- `@@f`/`@@F` skip external, thunk and non-executable function entries.
|
|
78
|
+
- `pd -j` JSON and `-j` command resolution follow the r2 line-oriented
|
|
79
|
+
filter model.
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- First-import analysis no longer cuts off at 180 seconds. The daemon-side
|
|
84
|
+
cap defaulted to a hard 180 s, which truncated slow-arch imports (measured:
|
|
85
|
+
i386 684 s, mipsel 665 s, big-endian MIPS 483 s) and silently cached a
|
|
86
|
+
broken one-function database that later runs reused. The default is now
|
|
87
|
+
unlimited; a cap can be set explicitly with the new client option
|
|
88
|
+
`--analysis-timeout <sec>` (0 disables it).
|
|
89
|
+
- Entry-point detection prefers an executable `_start` and ignores
|
|
90
|
+
non-executable DWARF symbols named `entry` (seen in the Tenda `httpd`
|
|
91
|
+
firmware sample).
|
|
92
|
+
- `tp`/`tpv` no longer crash on built-in integer types; `tc <name>` only emits
|
|
93
|
+
the requested declaration.
|
|
94
|
+
- JSON output participates in `~`/`|` line by line.
|
|
95
|
+
- `~` filters keep backslash escapes such as `~\.text`.
|
|
96
|
+
- Pagination via `--list-offset`/`e list.offset`, with explicit metadata.
|
|
97
|
+
|
|
98
|
+
## [0.1.0] - 2026-11-07
|
|
99
|
+
|
|
100
|
+
Initial import: two-process daemon/client architecture, read-only core,
|
|
101
|
+
analysis, disassembly, decompilation, types, writes, search, flags, scripts,
|
|
102
|
+
parity golden files and the 22-configuration architecture matrix.
|
gdare2-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 fire3
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|