hex-patch

Crates.iohex-patch
lib.rshex-patch
version
sourcesrc
created_at2024-07-04 01:36:03.873261
updated_at2024-12-10 17:58:20.242049
descriptionHexPatch is a binary patcher and editor with terminal user interface (TUI), it's capable of disassembling instructions and assembling patches. It supports a variety of architectures and file formats. Also, it can edit remote files via SSH.
homepagehttps://etto48.github.io/HexPatch/
repositoryhttps://github.com/Etto48/HexPatch
max_upload_size
id1291188
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Ettore Ricci (Etto48)

documentation

README

Logo HexPatch

Crate Badge CI Badge Deps.rs Badge License Badge

HexPatch is a binary patcher and editor with terminal user interface (TUI), it's capable of disassembling instructions and assembling patches. It supports a variety of architectures and file formats. Also, it can edit remote files via SSH.

Installation

Using cargo

If you already have the requirements installed, you only need to run the following command:

cargo install hex-patch

Requirements

Using your package manager

NetBSD

On NetBSD, a package is available from the official repositories. To install it, simply run:

pkgin install hexpatch
Build from source on NetBSD

If you prefer to build from source:

cd /usr/pkgsrc/devel/hexpatch
make install

Arch Linux

On Arch Linux, a package is available from the official repositories:

pacman -S hexpatch

Building from source with cargo

Clone the repository

git clone https://github.com/Etto48/HexPatch.git
cd HexPatch

Build and install

cargo install --path .

SSH connection

In order to connect via SSH, you can use the following command:

hex-patch --ssh <user>@<host>[:<port>] [--password <password>] [additional arguments]

If you don't specify a password, the client must be set up with keypair authentication and you must have a key in your ~/.ssh directory.

Keys are searched in the following order:

  • id_rsa
  • id_ed25519
  • id_ecdsa
  • id_dsa

The first key found will be used.

Supported file formats and architectures

The following file formats are supported by default:

  • Coff
  • CoffBig
  • Elf32
  • Elf64
  • MachO32
  • MachO64
  • Pe32
  • Pe64
  • Xcoff32
  • Xcoff64

Other file formats can be added with plugins.

The following architectures are supported:

  • Aarch64
  • Aarch64_Ilp32
  • Arm
  • I386
  • X86_64
  • X86_64_X32
  • Mips
  • Mips64
  • PowerPc
  • PowerPc64
  • Riscv32
  • Riscv64
  • S390x
  • Sparc64

Settings

Read the settings documentation for more information.

Plugins

HexPatch supports plugins written in Lua. Plugins must be placed in the plugins directory in hex-patch's configuration directory. A different plugins directory can be specified with the --plugins flag.

You can find more information about the Plugin Lua API here.

Features

  • Help menu Help menu

  • Log Log

  • Text view Text view

  • Jump to address Jump to address Jump to a virtual address with v0x or to a file offset with 0x. You can also jump to symbols and sections.

  • Open file Open file

  • Run command Run command

  • Find text Find text

  • Find symbol Find symbol

  • Insert Text Insert text

  • Patch Patch

Known issues

  • Some key combinations may not work as expected, notably SHIFT + ENTER on VSCode terminal. Please refer to this issue for more information. Unfortunately, this behavior is out of my control.
  • If you try to write an invalid relative jump instruction with more than one register (e.g. jmp [rip+rax]) in X86 architectures the program will crash. This problem depends on the keystone-engine crate, and it's out of my control.

Special thanks

Thanks to Lorenzo Colombini for the instruction highlighting.

Commit count: 521

cargo fmt