6个版本

使用旧的Rust 2015

1.0.0 2018年1月19日
0.3.1 2018年2月14日
0.2.0 2018年2月5日
0.1.2 2018年1月29日

#1420开发工具


machina 中使用

MIT 协议

10KB
172

sam

Foo Build Status

这是什么?

我目前正在做许多汇编相关的项目。其中大部分是用Rust编写的。由于内联汇编很丑(至少在我看来),我主要与可写内存页一起工作。这意味着我必须通过工具(例如sam-web)将我的指令汇编到适当的架构。这项工作真的很无聊且重复,而且如果只有操作码在你面前,这也使得跟踪汇编中的错误变得困难。
因此,我决定创建一个宏,该宏利用kstool将包含你的汇编的字符串转换为编译时生成的操作码。一旦我为Keystone创建了所需的绑定,也将会提供一个完整的本地解决方案。

TLDR 这是一个宏,它将汇编字符串转换为编译时的Vec<u8>

设置

如果您是Windows用户,可以跳过这部分,因为所有操作都通过PowerShell完成。
如果您在Mac OS X上,请确保已安装Homebrew!
如果您在Linux上,您必须以root用户身份运行cargo buildsudo)。为此,您需要使用此命令

sudo env "PATH=$PATH" cargo build

在Linux和Mac OS X上,脚本将安装以下依赖项

  • CMake
  • Git

请注意,您只需要在首次运行时执行这些步骤。在成功安装依赖项后,脚本将克隆Keystone、构建并安装它。在Windows上,脚本将只下载预构建的二进制文件。

根据您的操作系统,您可能还需要将/usr/local/lib添加到/etc/ld.so.conf中,并运行sudo ldconfig

您也可以手动完成所有这些操作,只需确保 kstool 在您的 PATH 中即可!

模式

支持的模式如下(所有使用 Intel 语法)

x64
x86

示例

#[macro_use]
extern crate sam;

fn main() {
  let asm: Vec<u8> = sam!(x64 => "mov rax, 0x1337");
  println!("{:?}", asm);
}

无运行时依赖