在OS X上学习汇编语言的工具在哪里可以找到?

22

我想学习汇编语言。然而,在OS X上学习汇编的资源非常稀少。

有没有在Mac上使用汇编语言编程的人?你是在哪里学习的?

此外,是否有任何理由不应该使用汇编语言?我会(显著地)冒着永久崩溃计算机的风险吗?

10个回答

13
如果你正在使用PowerPC Mac,可以尝试gcc inline assembler。否则,可以尝试nasm。我无法提供太多关于PPC ASM的参考资料(很少),但是我建议你学习x86汇编的以下几个方面:
- 书籍:Reversing by Eldad Eilam - 使用gcc -S编译简单的C源文件,并读取生成的汇编代码 - 使用Sandpile - 加入#openrce的irc.freenode.net,并使用OpenRCE 另外,如果你不在内核模式下运行,则没有机会搞砸任何东西,即使你在内核模式下运行,真正销毁任何东西也很难。
另外,如果你不从XCode中获取gcc等工具,而是通过Macports或其他方式获取,那么你将会遇到一系列格式错误的Mach-O文件,这并不好解决,特别是当你刚开始进行汇编开发时。

5
汇编语言是由硬件平台决定的,而不是操作系统。鉴于OS X在Intel平台上运行且为64位,您应该寻找有关x64(也称为AMD64)汇编的信息。查看维基百科文章(http://en.wikipedia.org/wiki/X86-64),其中包含大量有关x64文档的链接。
此外,OS X工具文档可能包含有关x64汇编的大量信息。特别是,Netwide Assembler(NASM - http://developer.apple.com/documentation/DeveloperTools/nasm/nasmdoc0.html)可能具有有关如何使用汇编器构建OS X应用程序的文档。

在学习x86汇编之前学习x86-64汇编就像是在学会第一个单词之前写史诗一样,其中有很多东西会让新手困惑。绝对不建议这么做。 - Serafina Brocious
编写64位OSX应用程序需要付出努力;它们默认为32位。 - Mike F
虽然我不是Mac开发人员,但OSX是64位的,http://www.apple.com/macosx/technology/64bit.html声称Xcode 3.0支持构建64位应用程序,所以这不仅仅是开发者的选择吗?当然,这同样适用于构建32位应用程序。 - Franci Penov
即使使用苹果文档或以32位模式运行,使用NASM仍存在一些问题。 对于NASM来说,使用“-f macho”选项,对于gcc(用于链接),使用“-arch i386”选项可以消除一些错误。在链接方面,http://peter.michaux.ca/articles/assembly-hello-world-for-os-x 看起来很有希望。 - Flash Sheridan

5

要开始学习汇编语言,您可以从简单的C程序入手,并使用-S选项要求GCC生成汇编代码:

gcc -S hello.c -o hello.asm

你将能够理解如何调用函数、传递参数等。

3
Nasm/yasm是您最好的选择;gcc内联语法相当受限制,有时使用起来非常痛苦,而且确实有一些事情它无法做到。Nasm的宏语法也更加有用,在汇编语言中没有内置模板功能的情况下,这是一个救星。

1

XCode(即GCC)对编写汇编语言提供了很好的支持。学习它是一件有趣的事情(尽管你不太可能经常需要它),最糟糕的情况就是像在C语言中一样崩溃你正在编写的程序。只需搜索“gcc inline asm x86 tutorial”,你就可以找到很多入门点。不用担心有些教程似乎是针对Linux特定的,它们通常在XCode中同样适用。

(编辑)……当然,前提是你有一台英特尔Mac;如果没有,请将“x86”替换为“ppc”。


1

这里

我曾在Mac上编写汇编程序。使用的是Motorola 680x0汇编语言和MPW。我也接触过PowerPC汇编语言,用过CodeWarrior和ProjectBuilder。现在ProjectBuilder被称为XCode,还有Intel。汇编器是XCode中众多工具之一。

我最初学习汇编语言是在Apple II上:6502机器语言监视器内置ROM、Sweet16迷你汇编器等等。后来,我使用Intel 80186汇编语言加速C代码的运行速度,公司还为我安排了一天的Intel 80186汇编语言课程。后来,我还得维护Mac上的一些680x0汇编代码。那是很久以前的事情了。

我认为没有理由不去学习汇编语言。学习是好的。尽可能多地学习。进入足够低的级别调试器,查看反汇编代码。

我的建议是:

不要害怕。


0

你没有理由不这样做;在汇编语言中,你无法做到的事情在高级语言如C中都可以实现。

至于工具,你可能想安装MacPorts并获取GNU汇编器。这可能是最简单的方法,而且它是免费的,你可能可以在网络上找到有关在GNU汇编器中编写Unix程序的教程文档。


0

在使用操作系统的系统上编写汇编语言(与“裸机”汇编不同)需要了解两三件事:

  1. 指令集如何工作 - 如果您有Intel Mac,则有大量针对Intel X86的资源,例如Mac OS X Internals

  2. 如何汇编链接您的程序 - 如果您安装了开发人员工具,则拥有GCC和相关工具

  3. 如何与操作系统通信 - 这是Mac汇编文档比Windows或Linux少得多的地方。您可能需要编写等效的C程序并使用“gcc -S”来查看适当的调用/堆栈恢复约定。这取决于您想要做什么,但至少需要IO和内存分配的OS系统调用。

一个很好的起点是这里


0
如果您已安装了开发人员工具,您可以直接打开终端并键入asGNU汇编器 - 部分的Binutils)。

0

For PPC try Lightsoft


该网站不再提供PPC软件。 - Seki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接