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

StackOverflow https://stackoverflow.com/questions/137523

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

gcc -S hello.c -o hello.asm

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

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

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

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

здесь

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

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

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

Мой совет таков:

Не бойся.

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

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

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

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

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

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

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

Если у вас есть Средства разработки установленный, вы можете просто открыть Терминал и введите как (Ассемблер GNU - часть Бинарные файлы).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top