NAME Keystone - Perl extension for keystone-engine SYNOPSIS 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"; DESCRIPTION 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 METHODS new(arch, mode) $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 asm(code, address) @opcodes = $ks->asm("pop rax; ret"); Assemble code, and return a list of opcodes. See ks_asm() in keystone-engine documentation. strerror() printf "%s\n", $ks->strerror(); Get the last error string See ks_strerror() in keystone-engine documentation. errno() printf "%d\n", $ks->errno(); Get the last error code (KS_ERR_* constants) See ks_errno() in keystone-engine documentation. FUNCTIONS version() ($maj, $min) = Keystone::version(); Get the major and the minor version of the Keystone engine. See ks_version() in keystone-engine documentation arch_supported(arch) 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 EXAMPLES #!/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; } } SEE ALSO http://keystone-engine.org/ https://github.com/t00sh/perl-keystone AUTHOR Tosh, COPYRIGHT AND LICENSE 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.