Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information

project = "pypcode"
project_copyright = f"{datetime.datetime.now().year}, The angr Project contributors"
project_copyright = f"{datetime.datetime.now(tz=datetime.UTC).year}, The angr Project contributors"
author = "The angr Project"

# -- General configuration ---------------------------------------------------
Expand Down
35 changes: 17 additions & 18 deletions pypcode/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,28 @@
"""

from __future__ import annotations

import os.path
import xml.etree.ElementTree as ET
from collections.abc import Generator, Mapping, Sequence
from enum import IntEnum
from typing import cast
from collections.abc import Generator, Sequence, Mapping

from .__version__ import __version__

from .pypcode_native import __version__ as __pypcode_native_version__ # pylint:disable=no-name-in-module

assert __version__ == __pypcode_native_version__

from .printing import (
OpFormat,
OpFormatBinary,
OpFormatFunc,
OpFormatSpecial,
OpFormatUnary,
PcodePrettyPrinter,
)
from .pypcode_native import ( # pylint:disable=no-name-in-module
TRANSLATE_FLAGS_BB_TERMINATING,
Address,
AddrSpace,
BadDataError,
Expand All @@ -25,25 +34,15 @@
LowlevelError,
OpCode,
PcodeOp,
TRANSLATE_FLAGS_BB_TERMINATING,
Translation,
UnimplError,
Varnode,
)
from .pypcode_native import Context as _Context # pylint:disable=no-name-in-module

from .printing import (
OpFormat,
OpFormatBinary,
OpFormatFunc,
OpFormatSpecial,
OpFormatUnary,
PcodePrettyPrinter,
)

__all__ = [
"Address",
"AddrSpace",
"Address",
"Arch",
"ArchLanguage",
"BadDataError",
Expand Down Expand Up @@ -85,10 +84,10 @@ class ArchLanguage:
"""

__slots__ = (
"_cspecs",
"_pspec",
"archdir",
"ldef",
"_pspec",
"_cspecs",
)

archdir: str
Expand Down Expand Up @@ -167,11 +166,11 @@ class Arch:
"""

__slots__ = (
"archpath",
"archname",
"ldefpath",
"ldef",
"archpath",
"languages",
"ldef",
"ldefpath",
)

archpath: str
Expand Down
8 changes: 4 additions & 4 deletions pypcode/__main__.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def main():
langs = {lang.id: lang for arch in Arch.enumerate() for lang in arch.languages}
if ("-l" in sys.argv) or ("--list" in sys.argv):
for langid in sorted(langs):
print("%-35s - %s" % (langid, langs[langid].description))
print(f"{langid:<35} - {langs[langid].description}")
return

args = ap.parse_args()
Expand All @@ -65,8 +65,8 @@ def main():
if len(suggestions):
print("\nSuggestions:")
for langid in sorted(suggestions):
print(" %-35s - %s" % (langid, langs[langid].description))
print("")
print(f" {langid:<35} - {langs[langid].description}")
print()
print("Try `--list` for full list of architectures.")
sys.exit(1)

Expand Down Expand Up @@ -94,7 +94,7 @@ def main():
print(ctx.disassemble(disas_slice, disas_addr))
else:
print(f" {i - last_imark_idx - 1:3d}: {op}")
print("")
print()
except (BadDataError, UnimplError) as e:
print(f"An error occurred during translation: {e}")
sys.exit(1)
Expand Down
6 changes: 4 additions & 2 deletions pypcode/printing.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from typing import ClassVar

from .pypcode_native import ( # pylint:disable=no-name-in-module
Disassembly,
Instruction,
Expand All @@ -18,7 +20,7 @@ class OpFormat:
@staticmethod
def fmt_vn(vn: Varnode) -> str:
if vn.space.name == "const":
return "%#x" % vn.offset
return f"{vn.offset:#x}"
elif vn.space.name == "register":
name = vn.getRegisterName()
if name:
Expand Down Expand Up @@ -127,7 +129,7 @@ class PcodePrettyPrinter:

DEFAULT_OP_FORMAT = OpFormat()

OP_FORMATS = {
OP_FORMATS: ClassVar[dict[OpCode, OpFormat]] = {
OpCode.BOOL_AND: OpFormatBinary("&&"),
OpCode.BOOL_NEGATE: OpFormatUnary("!"),
OpCode.BOOL_OR: OpFormatBinary("||"),
Expand Down
3 changes: 2 additions & 1 deletion pypcode/pypcode_native.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from typing import Any, Callable, ClassVar
from collections.abc import Callable
from typing import Any, ClassVar

TRANSLATE_FLAGS_BB_TERMINATING: int
__version__: str
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ target-version = ['py312']

[tool.ruff]
line-length = 120
extend-exclude = ["pypcode/processors"]

[tool.ruff.lint]
extend-ignore = [
"E402", # Bottom imports
]
Expand Down
5 changes: 2 additions & 3 deletions scripts/benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@
import random
import sys
import time
from dataclasses import dataclass

from typing import cast, Any
from collections.abc import Callable, Iterable
from dataclasses import dataclass
from typing import Any, cast

logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
Expand Down
2 changes: 1 addition & 1 deletion setup.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/usr/bin/env python3
import json
import os
from pathlib import Path
import platform
import shutil
import struct
import subprocess
import sys
from pathlib import Path

from setuptools import setup
from setuptools.command.build_ext import build_ext
Expand Down
8 changes: 4 additions & 4 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/usr/bin/env python3
# pylint:disable=no-self-use

import unittest
import base64
import tempfile
import sys
import os
import io
import os
import sys
import tempfile
import unittest
from unittest import mock

from pypcode.__main__ import main
Expand Down
4 changes: 2 additions & 2 deletions tests/test_pypcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

import gc
import logging
from unittest import main, TestCase
from unittest.mock import create_autospec
from typing import cast
from unittest import TestCase, main
from unittest.mock import create_autospec

from pypcode import (
AddrSpace,
Expand Down
Loading