minio/asm2plan9s
GitHub: minio/asm2plan9s
一个将 YASM/GAS 生成的汇编机器码自动转换为 Go Plan 9 汇编 BYTE/LONG 序列的命令行工具,解决 Go 汇编语法与主流汇编器不兼容的问题。
Stars: 183 | Forks: 40
# asm2plan9s
用于生成由 YASM/GAS(针对 Intel)或 GAS(针对 ARM)生成的 Go 汇编 BYTE 序列的工具。
## 安装说明
请确保您的平台上已安装 YASM 或 GAS。请注意,如果两者均已安装,YASM 的优先级高于 GAS。
##### GAS (Intel/AMD64 或 ARM):
通常 `as` 或 `gas`(GNU 汇编器)已经作为 binutils 的一部分安装好了,但如果需要,您可以参照以下方式操作:
```
sudo apt-get install build-essential
```
##### YASM (Intel/AMD64):
```
$ yasm --version
yasm 1.2.0
Compiled on Sep 30 2013.
Copyright (c) 2001-2011 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
```
### asm2plan9s
`go get -u github.com/minio/asm2plan9s`
### AVX512 支持
请注意,目前仅 GAS 支持 AVX512。
## 示例
```
$ more example.s
// VPADDQ XMM0,XMM1,XMM8
$ asm2plan9s example.s
$ echo example.s
LONG $0xd471c1c4; BYTE $0xc0 // VPADDQ XMM0,XMM1,XMM8
```
需要汇编的指令必须以 `//` 开头,并且其前面必须是一个空格或制表符。
前导字符将被正确的序列覆盖(无论其原内容为何),因此在修改指令后,重新运行 `asm2plan9s` 即可更新生成的 BYTE 序列。
## 指令的起始位置
`//` 注释的起始位置需要位于(假想的)序列之后,序列与注释间可以是一个空格,或者是空格加反斜杠再加空格(请参阅下文对 defines 的支持)。
首次输入指令时,您也可以输入例如 `LONG $0x00000000; BYTE $0x00 // VZEROUPPER` 来触发汇编器。
## 支持 defines
如果您使用 #define 定义“宏”,并使用反斜杠作为续行符,此格式将被保留。
例如:
```
\ // VPADDQ XMM0,XMM1,XMM8
```
将被汇编为
```
LONG $0xd471c1c4; BYTE $0xc0 \ // VPADDQ XMM0,XMM1,XMM8
```
## asmfmt
asm2plan9s 可以与 [asmfmt](https://github.com/klauspost/asmfmt) 很好地配合使用,以便对汇编代码进行格式化(类似于 `go fmt` 的风格)。
## 详细示例
有关更详细的示例,请参阅(针对 Intel 的)[compressAvx_amd64.s](https://github.com/minio/blake2b-simd/blob/master/compressAvx_amd64.s) 或(针对 ARM 的)[highwayhash_arm64.s](https://github.com/minio/highwayhash/blob/master/highwayhash_arm64.s)。
## 许可证
基于 Apache License v2.0 发布。您可以在 LICENSE 文件中找到完整文本。
## 贡献
欢迎贡献,请提交 PR 以进行任何改进。
标签:EVTX分析, Go, Plan 9, Ruby工具, SOC Prime, 代码生成, 底层开发, 开发工具, 日志审计, 汇编, 渗透测试工具