6个版本
使用旧的Rust 2015
1.0.0 |
|
---|---|
0.3.1 | 2018年2月14日 |
0.2.0 | 2018年2月5日 |
0.1.2 | 2018年1月29日 |
#1420 在 开发工具
在 machina 中使用
10KB
172 行
sam
这是什么?
我目前正在做许多汇编相关的项目。其中大部分是用Rust编写的。由于内联汇编很丑(至少在我看来),我主要与可写内存页一起工作。这意味着我必须通过工具(例如sam-web)将我的指令汇编到适当的架构。这项工作真的很无聊且重复,而且如果只有操作码在你面前,这也使得跟踪汇编中的错误变得困难。
因此,我决定创建一个宏,该宏利用kstool将包含你的汇编的字符串转换为编译时生成的操作码。一旦我为Keystone创建了所需的绑定,也将会提供一个完整的本地解决方案。
TLDR 这是一个宏,它将汇编字符串转换为编译时的Vec<u8>
。
设置
如果您是Windows用户,可以跳过这部分,因为所有操作都通过PowerShell完成。
如果您在Mac OS X上,请确保已安装Homebrew!
如果您在Linux上,您必须以root用户身份运行cargo build
(sudo
)。为此,您需要使用此命令
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);
}