在哪里可以找到用于在OS X上学习汇编器的工具?

时间:2020-03-06 14:45:48  来源:igfitidea点击:

我想学习汇编程序。但是,使用OS X进行汇编的资源很少。

那里有人在Mac上进行汇编编程吗?你在哪里学的?

而且,有什么我不应该进行组装的理由吗?我是否会冒着无法修复的风险(显着)崩溃计算机?

解决方案

没有理由不应该这样做。在汇编语言中,我们无能为力,而在C等高级语言中则无能为力。

就工具而言,我们可能需要安装MacPorts并获取GNU汇编器。这可能是最简单的方法,也可能不是最简单的方法,但是它是免费的,我们可能会在网上找到在GNU汇编器中编写Unix程序的教程文档。

XCode(即GCC)对编写汇编器有很大的支持。学习是一件有趣的事情(尽管我们不太可能需要它),最糟糕的事情是使正在编写的程序崩溃,就像在C中一样。应该找到很多起点。不必担心某些对象似乎是特定于Linux的,它们通常在XCode中也能正常工作。

(编辑)...假设我们当然拥有Intel Mac;如果不是,则将" x86"替换为" ppc"。

如果我们使用的是PowerPC Mac,请查看gcc内联汇编程序。否则,请检查nasm。我无法对PPC ASM进行任何体面的引用(它们之间相距甚远),但是我建议我们学习以下内容以学习x86 asm:

  • Eldad Eilam的《倒车》一书
  • 用gcc -S编译简单的C源代码并读取生成的程序集
  • 使用沙堆
  • 在irc.freenode.net上加入#openrce并使用OpenRCE

另外,如果我们不是处于内核模式,那么就没有机会搞砸任何东西,即使我们处于内核模式,也很难真正销毁任何东西。

编辑:另外,从XCode获取gcc等,而不是Macports或者诸如此类。如果不是这样,我们将陷入一个格式错误的Mach-O文件的世界。当我们刚开始进行asm黑客攻击时,诊断文件格式问题并不好玩。

Nasm / yasm是我们最好的选择; gcc内联语法非常残缺,有时使用起来会很痛苦,而且在某些方面它是无法做到的。 Nasm的宏语法也非常有用,这是像汇编语言那样没有内置模板功能的天赐之物。

汇编语言由硬件平台而不是操作系统决定。鉴于OS X在Intel平台上运行并且是64位的,我们应该在x64(也称为AMD64)汇编程序上查找信息。查看Wikipedia文章(http://en.wikipedia.org/wiki/X86-64),以获得许多有关x64文档的链接。

另外,OS X工具文档可能包含许多有关x64汇编器的信息。特别是Netwide汇编程序(NASM http://developer.apple.com/documentation/DeveloperTools/nasm/nasmdoc0.html)可能包含有关如何使用汇编程序构建OS X应用程序的文档。

这里

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

我最初在Apple II上学习汇编程序:内置于ROM中的6502机器语言监视器,Sweet16小型汇编程序等。后来,我使用Intel 80186汇编器加快了C代码的速度,并为大学的Intel 80186汇编器上了一天的课程付费。后来,我不得不为Mac维护一些680x0的程序集。那是很久以前的事。

我认为没有任何理由不进行组装。学习很棒。尽你所能。放入足够低级的调试器,然后查看反汇编的代码。

我的建议是:

Don't be scared.

要开始学习汇编,我们可能想从简单的C程序开始,并要求GCC使用-S选项为其生成汇编代码:

gcc -S hello.c -o hello.asm

然后,我们将能够了解如何调用函数,传递参数等。

要在具有操作系统的系统上编写汇编语言,需要了解三件事(与"裸机"汇编是相对应的):

  • 指令集的工作方式-如果我们拥有Intel Mac,则为Intel X86加载大量资源,但对于PPC仍是合理的设置,例如Mac OS X Internals。
  • 如何汇编链接程序-如果已安装开发人员工具,则具有GCC和关联的工具
  • 如何与OS通讯-在这里,Mac程序集的文档资料比Windows或者Linux少得多。可能是我们必须编写等效的C程序并使用'gcc -S'来查看合适的调用/堆栈恢复约定。这取决于我们要执行的操作,但是最少需要OS系统调用来进行IO和内存分配。

一个很好的起点就在这里。

如果安装了Developer Tools,则只需打开Terminal并键入as(Binutils的GNU汇编器部分)。

对于PPC,请尝试Lightsoft