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, 代码生成, 底层开发, 开发工具, 日志审计, 汇编, 渗透测试工具