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

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

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

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


person stalepretzel    schedule 26.09.2008    source источник


Ответы (10)


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

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

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

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

person Serafina Brocious    schedule 26.09.2008

Язык ассемблера определяется аппаратной платформой, а не операционной системой. Учитывая, что 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 с помощью ассемблера.

person Franci Penov    schedule 26.09.2008
comment
Изучение ASM для x86-64 перед изучением ASM для x86 во многом похоже на написание эпического стихотворения, прежде чем вы выучите свое первое слово. В нем так много вещей, которые могут сбить с толку новых людей. Определенно не рекомендуется. - person Serafina Brocious; 26.09.2008
comment
Написание 64-битного приложения OSX требует усилий; по умолчанию они 32-битные. - person ; 26.09.2008
comment
Конечно, я не Mac-разработчик. Однако OSX является 64-разрядной версией и apple.com/macosx/technology/64bit.html утверждает, что Xcode 3.0 поддерживает создание 64-битных приложений, так что разве это не вопрос выбора разработчика? И, конечно, зная, что вы делаете, но это в равной степени применимо и для создания 32-битных приложений. - person Franci Penov; 28.09.2008
comment
Есть некоторые проблемы с использованием NASM, даже с документами Apple, даже в 32-битном режиме. Параметр -f macho для NASM и -arch i386 для gcc (для связывания) позволили устранить некоторые ошибки. Для связывания peter.michaux.ca/articles/assembly-hello -world-for-os-x кажется многообещающим. - person Flash Sheridan; 15.07.2011

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

gcc -S hello.c -o hello.asm

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

person Martin Cote    schedule 26.09.2008

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

person Dark Shikari    schedule 26.09.2008

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

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

person Community    schedule 26.09.2008

здесь

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

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

Не думаю, что есть причина не заниматься сборкой. Учеба - это здорово. Узнай все, что можешь. Зайдите в отладчик достаточно низкого уровня и посмотрите дизассемблированный код.

Мой совет:

Не бойся.

person Mark Stock    schedule 26.09.2008

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

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

person Greg Hewgill    schedule 26.09.2008

Для написания ассемблера в системе с операционной системой вам необходимо знать две три вещи (в отличие от сборки «голого металла», которая представляет собой отдельный мир):

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

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

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

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

person domgblackwell    schedule 27.09.2008

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

person Community    schedule 13.11.2008

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

person Community    schedule 16.11.2008
comment
Сайт больше не предоставляет программное обеспечение PPC. - person Seki; 31.08.2012