在MacOSX上是否可以仅使用GNU汇编程序生成普通二进制文件?

在MacOSX上是否可以仅使用GNU汇编程序生成普通二进制文件?,macos,assembly,abi,Macos,Assembly,Abi,我为x86编写了一些汇编代码,并希望通过使用Mac的默认汇编程序(“as”)将其汇编成纯二进制文件(而不是Mach-O)。经过几次摸索和尝试,我失败了 虽然我知道如何使用NASM(使用选项:-f binary),但我不想这样做。因为我的代码是用AT&T语法编写的。使用objcopy(它是binutils asas)并将--输出目标设置为二进制 as --64 test.s -o test.o objcopy -O binary test.o test.bin 和拆卸输出: objdump -D

我为x86编写了一些汇编代码,并希望通过使用Mac的默认汇编程序(“as”)将其汇编成纯二进制文件(而不是Mach-O)。经过几次摸索和尝试,我失败了

虽然我知道如何使用NASM(使用选项:-f binary),但我不想这样做。因为我的代码是用AT&T语法编写的。

使用
objcopy
(它是binutils as
as
)并将
--输出目标设置为
二进制

as --64 test.s -o test.o
objcopy -O binary test.o test.bin
和拆卸输出:

objdump -D -m i386:x86-64:intel -b binary test.bin

(替换
--32
并删除
x86-64:
用于32位版本)

我认为这对Mac来说并不容易,因为Xcode开发工具中包含的binutils使用修改后的
作为
使用,甚至没有打包的
objdump
。嗯,看起来你是对的,抱歉。也许能帮你,直到我想出更好的办法。谢谢。这是一个很棒的工具,但根据手册,它似乎不支持Mach-O和平面二进制格式之间的转换。还是我遗漏了什么?事实上,在做了一点研究之后,我发现使用Mac有限的工具并没有明显的方法可以做到这一点,有朝一日我将通过构建GNU工具链的交叉编译环境来尝试您的第一种方法。目前,NASM看起来是我最快的解决方法。您还需要在
as
objcopy
之间使用
ld
。(参见示例。)如果没有它,二进制文件将丢失重新定位。对于碰巧不生成任何重新定位的非常小、简单的程序集,不管怎样,事情都可能会正常进行。的可能重复