Keystone - Perl extension for keystone-engine
use Keystone ':all'; $ks = Keystone->new(KS_ARCH_X86, KS_MODE_64) || die "Can't init Keystone\n"; @opcodes = $ks->asm("pop rax; inc rbx; ret"); foreach(@opcodes) { printf "0x%.2x ", $_; } print "\n";
This module is a Perl wrapper for the keystone-engine library.
Keystone is a lightweight multi-platform, multi-architecture assembler framework.
Further information are available at http://www.keystone-engine.org
$ks = Keystone->new(KS_ARCH_X86, KS_MODE_32);
Create a new keystone object. Take two arguments, the arch (KS_ARCH_*) and the mode (KS_MODE_*). See ks_open() in keystone-engine documentation
@opcodes = $ks->asm("pop rax; ret");
Assemble code, and return a list of opcodes.
See ks_asm() in keystone-engine documentation.
printf "%s\n", $ks->strerror();
Get the last error string
See ks_strerror() in keystone-engine documentation.
printf "%d\n", $ks->errno();
Get the last error code (KS_ERR_* constants)
See ks_errno() in keystone-engine documentation.
($maj, $min) = Keystone::version();
Get the major and the minor version of the Keystone engine. See ks_version() in keystone-engine documentation
printf "%d\n", Keystone::arch_supported(KS_ARCH_X86);
Return 1 if the KS_ARCH_* is supported, 0 overwise. See ks_arch_supported() in keystone-engine documentation
#!/usr/bin/perl use ExtUtils::testlib; use Keystone ':all'; use strict; use warnings; my @asm = ("push ebp", "mov rdx, rdi", "int 0x80", "inc rdx", "mov eax, 0x12345678", "mov bx, 5"); # Open a Keystone object my $ks = Keystone->new(KS_ARCH_X86, KS_MODE_64) || die "[-] Can't open Keystone\n"; for my $ins(@asm) { # Assemble... my @opcodes = $ks->asm($ins); if(!scalar(@opcodes)) { printf "Assembly failed (\"$ins\") : %s\n", $ks->strerror(); } else { # Print opcodes printf "%-20s %s\n", join(' ', map {sprintf "%.2x", $_} @opcodes), $ins; } }
http://keystone-engine.org/
https://github.com/t00sh/perl-keystone
Tosh, <tosh@t0x0sh.org>
Copyright (C) 2016 by Tosh
This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
To install Keystone, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Keystone
CPAN shell
perl -MCPAN -e shell install Keystone
For more information on module installation, please visit the detailed CPAN module installation guide.