Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kubkon/zig-dis-x86_64
x86_64 disassembler library written in Zig
https://github.com/kubkon/zig-dis-x86_64
Last synced: 4 months ago
JSON representation
x86_64 disassembler library written in Zig
- Host: GitHub
- URL: https://github.com/kubkon/zig-dis-x86_64
- Owner: kubkon
- License: mit
- Created: 2022-05-30T08:19:24.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-08T04:42:19.000Z (5 months ago)
- Last Synced: 2024-10-15T02:43:26.218Z (4 months ago)
- Language: Zig
- Size: 302 KB
- Stars: 35
- Watchers: 6
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-zig - zig-dis-x86_64🗒️x86_64 disassembler library written in Zig
README
# zig-dis-x86_64
x86_64 disassembler library written in Zig## What is it?
You can use this library to disassemble and encode x86_64 machine code.
## Why is it?
I needed a simple disassembler for linker optimisations in `zig ld` for x86_64.
## Basic usage
Disassembling input byte buffer:
```zig
const std = @import("std");
const Disassembler = @import("dis_x86_64").Disassembler;var disassembler = Disassembler.init(&.{
0x40, 0xb7, 0x10, // mov dil, 0x10
0x48, 0x8b, 0xd8, // mov rbx, rax
});var text = std.ArrayList(u8).init(gpa);
defer text.deinit();while (try disassembler.next()) |inst| {
try text.writer().print("{}\n", .{inst});
}try std.testing.expectEqualStrings(
\\mov dil, 0x10
\\mov rbx, rax
, text.items);
```Encoding instructions back to machine code:
```zig
const std = @import("std");
const Instruction = @import("dis_x86_64").Instruction;
const RegisterOrMemory = @import("dis_x86_64").RegisterOrMemory;var code = std.ArrayList(u8).init(gpa);
defer code.deinit();const inst = Instruction{
.tag = .mov,
.enc = .mi,
.data = Instruction.Data.mi(RegisterOrMemory.reg(.rbx), 0x4),
};
try inst.encode(code.writer());try std.testing.expectEqualSlices(u8, "\x48\xc7\xc3\x04\x00\x00\x00", code.items);
```