我想学习汇编程序。但是,使用OS X进行汇编程序的资源非常少。
有没有人在Mac上进行程序集编程?你在哪里学习的?
而且,我有什么理由不做集会吗?我是否冒着(显着)使我的计算机无法挽回的风险?
答案 0 :(得分:13)
如果您使用的是PowerPC Mac,请查看gcc内联汇编程序。否则,请查看nasm。我不能给PPC ASM提供任何体面的参考(他们很少和很远),但我建议以下事项来学习x86 asm:
另外,如果你没有处于内核模式,那么就没有机会搞砸任何东西,真的,即使你处于内核模式,也很难真正破坏任何东西。
编辑:此外,从XCode获取gcc等,而不是Macports或其他。如果你不这样做,你就会陷入畸形的Mach-O文件世界。当你刚刚开始攻击时,诊断文件格式问题并不好玩。
答案 1 :(得分: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应用程序的文档。
答案 2 :(得分:5)
要开始学习汇编,您可能希望从简单的C程序开始,并要求GCC使用-S选项为其生成汇编代码:
gcc -S hello.c -o hello.asm
然后,您将能够理解如何调用函数,传递参数等。
答案 3 :(得分:3)
Nasm / yasm是你最好的选择; gcc内联语法非常严重,有时候使用起来非常痛苦,而且还有一些无法做的事情。 Nasm的宏语法也非常有用,它是像汇编这样没有内置模板功能的语言中的天赐之物。
答案 4 :(得分:1)
XCode(即GCC)对编写汇编程序有很大的支持。这是一个有趣的事情(虽然你不太可能需要它),你可以做的最糟糕的事情就是崩溃你正在编写的程序,就像在C中一样。只是谷歌的'gcc inline asm x86教程'和你应该找到很多起点。不要担心某些内容似乎是特定于Linux的,它们通常在XCode中也能正常工作。
(编辑)...假设您当然拥有Intel Mac;如果没有,则将'x86'替换为'ppc'。
答案 5 :(得分:1)
我在Mac上编写了程序集。它是使用MPW的摩托罗拉680x0汇编程序。我在CodeWarrior和ProjectBuilder中曾多次触及PowerPC汇编程序。现在ProjectBuilder被称为XCode,而且还有Intel。汇编程序是XCode中的众多工具之一。
我最初学习了Apple II上的汇编程序:内置ROM的6502机器语言监视器,Sweet16迷你汇编器等。后来,我使用英特尔80186汇编程序来加速C代码的慢速运算,并为一所大学的英特尔80186汇编程序的一天课程付费。后来,我不得不为Mac维护一些680x0的程序集。那是很久以前的事了。
我认为没有任何理由不进行组装。学习很棒。尽你所能。进入足够低级别的调试器并查看反汇编代码。
我的建议是:
不要害怕。
答案 6 :(得分:0)
没有理由不这样做;你无法用汇编语言做任何事情,你不能用更高级别的语言来做,比如C。
就工具而言,您可能希望安装MacPorts并获取GNU汇编程序。这可能是也可能不是最简单的方法,但它是免费的,您可以在网上某处找到用于在GNU汇编程序中编写Unix程序的教程文档。
答案 7 :(得分:0)
在具有操作系统的系统上编写汇编语言需要知道两件事(而不是'裸机'汇编,这是一个独立的世界):
指令集的工作原理 - 如果您使用的是英特尔Mac,则为英特尔X86加载资源,对于PPC而言仍然是合理的设置,例如Mac OS X Internals。
如何汇编程序链接 - 如果您安装了Developer工具,则可以使用GCC和相关工具
如何与操作系统对话 - 这里的Mac程序集 lot 比Windows或Linux记录更少。您可能需要编写等效的C程序并使用'gcc -S'来查看哪些调用/堆栈恢复约定是合适的。这取决于你想要做什么,但在最低限度你需要OS系统调用IO和内存分配。
一个很好的起点是here。
答案 8 :(得分:0)
如果您安装了开发者工具,则只需打开终端并输入为( GNU Assembler - Binutils )的一部分。
答案 9 :(得分:0)
对于PPC尝试Lightsoft