Как установить nasm на Ubuntu?
пакет-то в репозитории universe имеется. видимо, бардак у вас в /etc/apt/sources.list . либо уже неподдерживаемая версия дистрибутива.
7 сен 2020 в 21:34
8 сен 2020 в 10:56
Да, с репами лажа, потому что repology.org/project/nasm/versions всё ок.
9 сен 2020 в 9:57
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- ubuntu
- nasm
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Расширенный ассемблер: NASM
Расширенный ассемблер NASM √ это 80×86 ассемблер, разработанный исходя из принципов переносимости и модульности. Он поддерживает широкий диапазон форматов объектных файлов, включая форматы Linux a.out и ELF , NetBSD/FreeBSD, COFF , Microsoft 16-bit OBJ и Win32 . Он способен также создавать простые бинарные файлы. Синтакс NASM максимально упрощен для понимания и похож на синакс Intel, но слегка посложнее. Он поддерживает инструкции Pentium, P6 и MMX, а также имеет макро-расширения.
1.1.1 Зачем еще один ассемблер?
- a86 хороший ассемблер, но не бесплатный, и если вы не заплатите, то 32-битный код писать не сможете только DOS.
- gas свободно доступен и портирован под DOS и Unix, но разработан для обратной совместимости с gcc . Поэтому проверка ошибок минимальна, к тому-же, с точки зрения любого, кто попробовал что-либо написать в нем синтаксис ужасен. Плюс ко всему вы не можете в нем написать 16-разрядный код (по крайней мере, правильно).
- as86 только под Linux и (по крайней мере моя версия) кажется не имеет практически никакой документации.
- MASM очень хорош, очень дорог и работает только под DOS.
- TASM лучше, но все еще борется с MASM за совместимость, что означает миллионы директив и куча волокиты. Его синтаксис по существу MASM-овский, но с противоречиями и причудами (в некоторой степени удаляемыми посредством режима Ideal ). Он также дорогой и тоже только ДОС.
Таким образом, представляем на ваше рассмотрение NASM. В сегодняшнем виде он все еще находится в стадии прототипа мы не обещаем, что он будет превосходить по быстродействию любой из упомянутых выше ассемблеров. Но пожалуйста, пожалуйста шлите нам замечания о замеченных ошибках, исправления, полезную информацию, да все, что угодно, что вы можете передать нам (и спасибо огромное многим людям, кто уже сделал это!), и мы будем улучшать его (в смысле, NASM) снова и снова.
1.1.2 Условия лицензирования
Чтобы ознакомиться с условиями лицензирования, при которых вы можете пользоваться NASM, пожалуйста, прочитайте файл Licence, являющийся неотъемлимой частью любого дистрибутивного архива NASM.
1.2 Контакты
Текущая версия NASM (0.98) поддерживается H. Peter Anvin, hpa@zytor.com. Если вы захотите сообщить об обнаруженных ошибках, прочитайте сначала параграф 10.2.
Связаться с авторами можно по следующим адресам: jules@earthcorp.com и anakin@pobox.com.
Если вы не имеете доступ к Usenet или предпочитаете получать информацию о выпусках новых версий по электронной почте, вы можете подписаться на лист рассылки nasm-announce , послав email по адресу majordomo@linux.kernel.org, содержащий строку subscribe nasm-announce .
Если вы хотите также получать информацию о выходе бета-релизов NASM, пошлите по тому-же адресу (см.выше) письмо, содержащее строку nasm-beta .
1.3 Инсталляция
1.3.1 Инсталляция NASM под MS-DOS или Windows
При получении DOS-архива NASM, nasmXXX.zip (где XXX означает номер версии NASM, содержащегося в архиве), распакуйте его в отдельный каталог (например, c:\nasm ).
Архив содержит четыре исполняемых файла: NASM-исполняемые файлы nasm.exe и nasmw.exe , и NDISASM-исполняемые файлы ndisasm.exe и ndisasmw.exe . Файлы, имеющие в окончании имени w , работают под Win9x/ME/NT, а те, которые без w работают под DOS-ом.
Для запуска NASM требуются только эти файлы, так что скопируйте их в каталог, указанный в вашей переменной PATH , либо отредактируйте autoexec.bat для добавления пути к каталогу с исполнимыми файлами NASM в переменную PATH . (если вы устанавливаете только версию под Win32, можете смело переименовать nasmw.exe в nasm.exe .)
И это все. NASM установлен! Для запуска NASM не обязательно иметь отдельный каталог (если, конечно вы не добавили его к переменной PATH ), поэтому можете удалить его (каталог), если у вас мало места на диске.
Если вы загрузили DOS-архив с исходниками nasmXXXs.zip , он будет также содержать полный исходный текст NASM и набор Make-файлов, которые вы можете (будем надеяться) использовать для перестроения вашей копии NASM «с нуля». В файле Readme перечислены все Make-файлы и указано, с какими компиляторами они работают.
Обратите внимание, что исходники insnsa.c, insnsd.c, insnsi.h и insnsn.c автоматически генерируются из главной таблицы инструкций insns.dat Perl-скриптом; файл macros.c генерируется из standard.mac другим Perl-скриптом. Хотя дистрибутив NASM 0.98 и включает эти автогенерируемые файлы, вам может потребоваться перестроить их (и следовательно, вам будет необходим интерпретатор Perl), если вы захотите изменить insns.dat, standard.mac или документацию. Возможно в будущем в исходниках не будет этих файлов вовсе. Версии Perl для ряда платформ, включая DOS и Windows, доступны на www.cpan.org.
1.3.2 Инсталляция NASM под Unix
При получении Unix-архива исходников NASM, nasm-X.XX.tar.gz (где X.XX означает номер версии NASM в архиве) распакуйте его в каталог типа /usr/local/src . Архив при распаковке создаст собственный подкаталог nasm-X.XX .
NASM автоконфигурируемый пакет: как только вы распакуете его, перейдите к каталогу, куда он был распакован и введитеe ./configure . Данный шелл-скрипт найдет самый подходящий компилятор C для сборки NASM и, соответственно, настройки Make-файлов.
Как только NASM сконфигурируется, вы можете ввести make для сборки бинарных файлов nasm и ndisasm , а затем ввести make install для установки их в /usr/local/bin и установки man-страниц nasm.1 и ndisasm.1 в /usr/local/man/man1 . В качестве альтернативы вы можете указать опции типа —prefix к команде configure скрипта (подробности см. в файле INSTALL ) или установить программы самостоятельно.
NASM также имеет набор утилит для обработки заказного формата объектных файлов RDOFF , находящихся в подкаталоге rdoff архива NASM. Вы можете собрать их при помощи make rdf и установить при помощи make rdf_install , если конечно они вам нужны.
Если NASM будет не в состоянии автоматически выбрать конфигурацию, вы все-же сможете скомпилировать его при помощи make-файла Makefile.unx . Cкопируйте или переименуйте этот файл в Makefile и попробуйте ввести make . Имеется также файл Makefile.unx в подкаталоге rdoff .
Как инсталлировать nasm?

Не, мне лично ассемблер был нужен. Я на нём TSR (Terminate and stay Resident) писал под DOS. Тот-же вирус, по сути, но правильный. И нужен он был мне неспроста.
cadaber ★★
( 27.09.18 02:46:32 MSK )
Последнее исправление: cadaber 27.09.18 02:54:14 MSK (всего исправлений: 1)
Ответ на: комментарий от cadaber 27.09.18 02:46:32 MSK
Для общего развития Ассемблер уже нынче изучать не стоит?
anonymous
( 27.09.18 04:55:49 MSK )
Ответ на: комментарий от anonymous 27.09.18 04:55:49 MSK

Как сказать. Я, было время, учил и Си++, и Делфи, и Пёрл. Вот только где они сейчас? Правильно, в глубокой жопе. Заняться питоном — в принципе реально, но ходят упорные слухи, что и он уже в жопе. Итого?
Ну, когда вечером делать нечего — бывает, подрочу, а бывает — загружу Lasarus, то-бишь IDE для Free Pascal. Тоже неплохо.
cadaber ★★
( 27.09.18 05:13:52 MSK )
Последнее исправление: cadaber 27.09.18 05:17:58 MSK (всего исправлений: 1)
Как установить nasm в ubuntu
NASM является кроссплатформенным ассемблером, который доступен в том числе и на ОС на базе Linux. этой статье мы рассмотрим начало работы с ассемблером NASM на Linux. В качестве целевой ОС будем использовать Ubuntu.
Установка
Перед началом работы на необходимо установить требуемый инструментарий. Для этого сначала обновим репозиторий пакетов с помощью команды:
sudo apt update
Затем собственно установим пакет nasm с помощью команды:
sudo apt -y install nasm
После установки пакета мы можем проверить установленную версию NASM с помощью команды nasm -v :
root@Eugene:~# nasm -v NASM version 2.15.05 root@Eugene:~#
Стоит отметить, что таким образом не всегда доступна самая последняя версия ассемблера. Например, на момент написания статьи последней является 2.16.01. И в этом случае мы можем при необходимости мы можем загрузить самую последнюю версию с официального сайта со страницы https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/linux/
Начало работы с NASM
Определим в файловой системе каталог для файлов с исходным кодом и создадим в нем следующий файл hello.asm :
global _start ; делаем метку метку _start видимой извне section .text ; объявление секции кода _start: ; объявление метки _start - точки входа в программу mov rax, 60 ; 60 - номер системного вызова exit mov rdi, 22 ; произвольный код возврата - 22 syscall ; выполняем системный вызов exit
Рассмотрим поэтапно данный код. Вначале идет директива global :
global _start
Данная директива делает видимой извне определенную метку программы. В данном случае метку _start , которая является точкой входа в программу. Благодаря этому компоновщик при компоновке программы в исполняемый файл сможет увидеть данную метку.
Затем идет секция кода программы, которая и определяет выполняемые программой действия. Для определения секции применяется директива section , после которой указывается имя секции. Причем секция кода программы должна называться .text .
section .text
Далее собственно идет код программы. И он начинается с определения метки _start , на которую собственно и проецируется программа. Сама по себе метка представляет произвольное название, после которого идет двоеточие. После двоеточия могут идти инструкции программы или определения данных.
Метка _start выступает в качестве точки входа в программу. Название подобной метки произвольное, но обычно это или _start или main
Наша программа не производит какой-то феноменальной работы. Все что она делает — это завершается. Да, чтобы программе завершиться, ей надо произвести некоторую работу. А именно нам надо сказать операционной системе, чтобы она завершила программу. Для взаимодействия с операционной системе предназначены системные вызовы. Каждый системный вызов имеет определенный номер и может принимать некоторые данные — параметры. Так, чтобы указать операционной системе, что мы хотим завершить программу, нам надо выполнить системный вызов с номером 60 (который еще называется «exit»). Номер системного вызова передается в регистр rax:
mov rax, 60
То есть в данном случае мы выполняем инструкцию mov , которая помещает в первый операнд — регистр rax значение из второго операнда — число 60.
Системный вызов exit может принимать один параметр — статусный код возврата — некоторое число, которое указывает на статус выполнения программы (успешно завершилась программа или нет и если нет, то почему). В реальности это может быть произвольное число. Первый параметр системных вызовов всегда помещается в регистр rdi. Поэтому следующая инструкция mov помещает в регистр rdi число 22 (число выбрано произвольным образом):
mov rdi, 22
И в конце для выполнения системного вызова выполняется инструкция syscall
syscall
Кроме директив и инструкций, которые определяют действия программы, также следует отметить комментарии. Комментарии начинаются с точки с запятой ; . Комментарии не учитываются при компиляции, никак не влияют на объект или работоспособность программы и нужны лишь в качестве текстового описания отдельных строк или блоков программы.
global _start ; делаем метку метку _start видимой извне - это текст комментария
Компиляция
Наша программа готова. Теперь скомпилируем ее. Для компиляции перейдем в терминале к месту расположения файла и выполним следующую команду
nasm -f elf64 hello.asm -o hello.o
Здесь ассемблеру передается файл «hello.asm» и с помощью опции -f указывается формат файла, в который мы хотим скомпилировать код. Для 64-разрядных систем Linux формат файла — elf64 .
Опция -o hello.o указывает на имя скомпилированного файла. В результате выполнения этой команды будет создан объектный файл hello.o
Далее скомпонуем объектный файл в исполняемый файл. Для этого выполним команду
ld -o hello hello.o
Здесь программе компоновщика (линкера) ld передается набор опция -o , которая указывает, что надо скомпоновать объектный файл hello.o в исполняемый файл hello
. В результате будет создан исполныемый файл hello. Запустим его:
./hello
Консоль ничего не отобразит, поскольку все, что делает наша программа — это завершается. Однако в нашей программе также устанавливается статусный код возврата — число 22. Получим его, выполнив команду:
echo $?
Компиляция программы и ее запуск полностью:
root@Eugene:~/asm# nasm -f elf64 hello.asm -o hello.o root@Eugene:~/asm# ld -o hello hello.o root@Eugene:~/asm# ./hello root@Eugene:~/asm# echo $? 22 root@Eugene:~/asm#
Создание первой программы
Теперь создадим более осмысленную программу, которая будет выводить строку на консоль, и для этого изменим файл hello.asm следующим образом:
global _start ; делаем метку метку _start видимой извне section .data ; секция данных message: db "Hello METANIT.COM!",10 ; строка для вывода на консоль section .text ; объявление секции кода _start: ; объявление метки _start - точки входа в программу mov rax, 1 ; 1 - номер системного вызова функции write mov rdi, 1 ; 1 - дескриптор файла стандартного вызова stdout mov rsi, message ; адрес строки для вывод mov rdx, 19 ; количество байтов syscall ; выполняем системный вызов write mov rax, 60 ; 60 - номер системного вызова exit syscall ; выполняем системный вызов exit
После директивы global , которая делает видимой извне метку _start, идет секция данных — .data :
section .data ; секция данных message: db "Hello METANIT.COM!",10 ; строка для вывода на консоль
Секция данных также определяется с помощью директивы section . В секции .data определена метка message , на которую проецируется строка. После метки указывается тип данных. Строка в ассемблере — это просто набор байтов, поэтому имеет тип db . Затем в кавычках определяется собственно выводимая строка — «Hello METANIT.COM!»,10 . Обратите внимание на 10 после строки — это код символа перевода строки. То есть при выводе мы ожидаем, что будет происходить перевод на другую строку.
Для вывода этой строки на консоль нам надо выполнить системный вызов write, который имеет номер 1. Для этого в регистр rax помещаем номер системного вызова — номер 1:
mov rax, 1
Для вывода на консоль нам надо указать в регистре rdi дескриптор стандартного вывода — по умолчанию это число 1
mov rdi, 1
В регистр rsi надо загрузить адрес выводимой строки:
mov rsi, message
Кроме того, нам надо указать в регистре rdx сколько байтов строки мы хотим выводить. Каждый символ строки ASCII занимает 1 байт. В нашей строке 19 символов (учитывая символ с числовым кодом 10 в конце строки), поэтому в rdx помещаем число 19:
mov rdx, 19
Для выполнения системного вызова выполняем инструкцию syscall
Остальные инструкции программы — это выполнение системного вызова завершения программы, который был рассмотрен ранее.
Повторно скомпилируем программу и запустим ее на выполнение:
root@Eugene:~/asm# nasm -f elf64 hello.asm -o hello.o root@Eugene:~/asm# ld -o hello hello.o root@Eugene:~/asm# ./hello Hello METANIT.COM! root@Eugene:~/asm#