Начнем по возрастающей... http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-lettersize.pdf (GAS) Обязательно к прочтению я считаю. http://webster.cs.ucr.edu/AoA/Linux/aoapdf.tar.gz (x86) http://membres.lycos.fr/placr/a2i.html Конвертер AT&T в GAS(Полезная вещь) http://www.janw.dommel.be/eng.html (норм хелп)
Можно пару примеров написания и использования динамических (shared) библиотек на ассемблере? В документации NASM есть немного об этом, но нормально тема не освещена (ИМХО). Буду очень благодарен!
drunken_tux FASM: http://board.flatassembler.net/topic.php?t=5345 Полностью согласен. В документации насма тема освещена отвратительно, но это частично связано с тем, что SO не сильно дружественный для ассемблера формат.
Спасибо, разобрался довольно быстро. Как я понял, нужно писать обычный базонезависимый код. Плохо, что в никсах нет ничего похожего на dll, чтобы можно было писать как обычно, не задумываясь над стартовым адресом. Сразу видна ориениация на C программистов. А базонезависимый код я и вручную загрузить сумею, зачем мне механизмы системы?
Ребят, подскажите пожалуйста про ввод и вывод данных. Про read() и write() это понятно, но есть ли что-нить типа "cout <<" и "cin >>" (из iostream) или printf(); и skanf();. Заранее спасибо.
VEhES printf, scanf, cin, cout -- средства ввода-вывода языков С/С++ и никакого отношения к UNIX не имеют. Они есть в стандартной библиотеке С/С++.
iostream и потоки ввода-вывода в С/С++ являются частью стандарта, а значит есть всюду, где есть компилятор языка. Если пишешь на С, то можешь пользоваться и printf и scanf. Если на С++, значит, есть iostream со всеми его методами.
я наверно не так выразился... я имею в виду ввод/вывод в ассемблере в линуксе. Вводить и выводить информацию в выполняющийся процесс я могу только с помощью системных вызовов или для этого есть еще какой-нить механизм?
Есть механизмы, которые предоставляют библиотеки. Например, библиотека С предоставляет те же printf/scanf. iostream тоже доступен, но сложнее. Чую, надо описать более подробно. Скомпилированные ф-ии хранятся в библиотеках, из которых потом вызываются. Поэтому запросто можно вызвать ф-ию printf, например, из ассемблерного кода. Однако, придется расплатиться тем, что необходимо провести инициализацию библиотеки поддержки С у себя в программе. На самой программе это никак не отразится, разве что придется объявить и экспортировать функцию main, которую библиотека вызовет сама, когда будет готова к использованию.
то что справедливо для FreeBSD, версии с которой начался МакОС, то справедливо и для МакОС, но сейчас в ней столько нагородили, что я не уверен... не работал с ней и как уже сказали постом выше есть nasm и еще есть fasm, gas и as. fasm удобней (хотя кому как) - gas и as универсальней... + мое мнение, если ты не системщик, не пишешь узкоспециализированные проги, критичные ко времени выполнения или размеру(обработка графики, криптография, де/архивация), тебе не нужен базонезависимый код и не хочешь поиметь много гемороя при переносе кода на другую систему/платформу, то для юзермодного приложения ассемблер мало чем поможет... это справедливо практически для всех Unix-like систем.