Подтвердить что ты не робот

Где я могу найти инструменты для обучения ассемблеру на OS X?

Я хотел бы изучить ассемблер. Однако ресурсов для сборки ассемблера с OS X очень мало.

Есть ли там кто-нибудь, кто запрограммирован в сборке на Mac? Где вы учились?

И, есть ли какая-то причина, по которой я не собираюсь делать сборку? Могу ли я рискнуть (значительно) сбой моего компьютера непоправимо?

4b9b3361

Ответ 1

Если вы используете PowerPC Mac, загляните в сборщик gcc inline. В противном случае загляните в nasm. Я не могу дать никаких достойных ссылок на PPC ASM (их немного и далеко), но я предлагаю следующее: x86 asm:

  • Книга Реверс Eldad Eilam
  • Скомпилируйте простой источник C с помощью gcc -S и прочитайте созданную сборку
  • Используйте Sandpile
  • Присоединяйтесь к #openrce на irc.freenode.net и используйте OpenRCE

Кроме того, если вы не находитесь в режиме ядра, тогда нет никаких шансов на что-нибудь на самом деле, и даже если вы находитесь в режиме ядра, вам действительно трудно что-то уничтожить.

Edit: Кроме того, получите gcc и т.д. из XCode, а не Macports или somesuch. Если вы этого не сделаете, вы попадете в мир некорректных файлов Mach-O. Не весело диагностировать проблемы с форматом файлов, когда вы только начинаете взлом asm.

Ответ 2

Язык ассемблера определяется аппаратной платформой, а не операционной системой. Учитывая, что OS X работает на платформе Intel и является 64-разрядной, вы должны искать информацию на ассемблере x64 (также называемом AMD64). Проверьте статью Википедии (http://en.wikipedia.org/wiki/X86-64) для большого количества ссылок на документацию о x64.

Кроме того, документация по инструментам OS X может содержать много информации об ассемблере x64. В частности, Ассемблер Netwide (NASM - http://developer.apple.com/documentation/DeveloperTools/nasm/nasmdoc0.html) может иметь документацию о том, как создавать приложения OS X с помощью ассемблера.

Ответ 3

Чтобы начать сборку, вы можете начать с простых программ на C и попросить GCC генерировать для нее код ассемблера с помощью опции -S:

gcc -S hello.c -o hello.asm

Затем вы сможете понять, как вызывать функции, передавать аргументы и т.д.

Ответ 4

Nasm/yasm - ваш лучший выбор; Синтаксис gcc inline довольно искалечен и может быть очень болезненным для использования в разы, плюс есть буквально некоторые вещи, которые он не может сделать. Масштаб синтаксиса Nasm также намного полезнее, находка на языке, подобном сборке, которая не имеет встроенных функций шаблонов.

Ответ 5

XCode (то есть GCC) имеет большую поддержку для написания ассемблера. Это забавная вещь, чтобы учиться (хотя вам это вряд ли понадобится), и самое худшее, что вы можете сделать, это крах программы, которую вы пишете, так же, как и в C. Просто Google для "gcc inline asm x86 tutorial", и вы должен найти множество отправных точек. Не беспокойтесь, что некоторые из них, похоже, будут специфичными для Linux, они, как правило, будут работать также и в XCode.

(править)... если у вас есть Intel Mac, конечно; если нет, то замените "x86" на "ppc".

Ответ 6

здесь

Я запрограммировал сборку на Mac. Это был ассемблер Motorola 680x0, использующий MPW. Я несколько раз коснулся ассемблера PowerPC в CodeWarrior и ProjectBuilder. Теперь ProjectBuilder называется XCode, и есть Intel. Ассемблер является одним из многих инструментов в XCode.

Я изначально узнал ассемблер на Apple II: монитор машинного языка 6502, встроенный в ROM, мини-ассемблер Sweet16 и другие. Позже я использовал ассемблер Intel 80186 для ускорения медленных бит кода C, а также заплатил за один день курс на ассемблере Intel 80186 в университете. Позже мне пришлось поддерживать сборку 680x0 для Mac. Это было давно.

Я не думаю, что есть какая-то причина не делать сборку. Обучение велик. Узнайте все, что вы можете. Перейдите в низкоуровневый отладчик и посмотрите на дизассемблированный код.

Мой совет:

Не бойтесь.

Ответ 7

Нет причин, по которым вы не должны; вы ничего не можете сделать на ассемблере, который вы не можете сделать на языке более высокого уровня, таком как C.

Что касается инструментов, вы можете установить MacPorts и получить сборщик GNU. Это может быть или не быть самым простым способом, но это бесплатно, и вы, вероятно, можете найти учебную документацию для написания программ Unix в ассемблере GNU где-то в сети.

Ответ 8

Есть две три вещи, которые вам нужно знать для написания языка ассемблера в системе с операционной системой (в отличие от сборки "голый металл", которая представляет собой собственный мир):

  • Как работает набор инструкций - множество ресурсов для Intel X86, если у вас есть Intel Mac, все еще разумный набор для PPC, например Mac OS X Internals.

  • Как собрать ссылки на свои программы - если у вас установлены инструменты разработчика, у вас есть GCC и связанные с ним инструменты.

  • Как разговаривать с ОС - здесь сборка Mac намного хуже документирована, чем Windows или Linux. Возможно, вам нужно написать эквивалентные программы на C и использовать "gcc -S", чтобы узнать, какие соглашения о вызове/стеке являются подходящими. Это зависит от того, что вы хотите сделать, но на минимальном уровне вам нужны системные вызовы ОС для ввода-вывода и выделения памяти.

Хорошей отправной точкой является здесь.

Ответ 9

Если у вас установлены инструменты разработчика, вы можете просто открыть терминал и набрать как (GNU Assembler - часть Binutils).

Ответ 10

Для PPC попробуйте Lightsoft