Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2013, 19:35   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Assembler в linux

Добрый вечер. Уже давно собираюсь, но все никак не соберусь начать изучение assembler под линукс(иными словами вернуться в этот раздел снова). Писал Hello World'ы но до полного углубления дело не доходило. Сейчас взялся и сразу на начальном этапе запутался. Дело вот в чем. Читая в некоторых статьях узнаешь, что программирование под ОС с Linux используются прерывания как в MS-DOS. В других говорится о невозможности такого программирования, ибо ядро грузится в защищенном режиме и прерывания не поддерживает. А ведь Hello World то работает. Отсюда вопрос: какая нынче мода в assembler'е под Linux? Как лучше взаимодействовать с ОС? Одинаковы ли прерывания с MS-DOS? Насколько сейчас актуальна книга Зубкова относительно Linux'а?
Заранее спасибо.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 30.06.2013, 19:49   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

В линуксе ДРУГИЕ прерывания плюс работа с библиотеками.
До кучи в нем нет тасма или масма, которые описываются во всех древних книгах по асму, а зачастую еще и страшный AT&T синтаксис. Ну и совсем до кучи, очень мало документации по програмированию на асм под линь.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 30.06.2013 в 19:52.
Goodwin98 вне форума Ответить с цитированием
Старый 30.06.2013, 19:51   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
прерывания не поддерживает
прерывания это механизм процессора.
это самый простой способ уведомить ядро о чем то.

в лине нет прерываний биоса, думаю имелось в виду это.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.06.2013, 20:00   #4
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
До кучи в нем нет тасма или масма
Есть nasm и fasm, а скомпилировать и отлинковать - это не проблема.
Цитата:
в лине нет прерываний биоса, думаю имелось в виду это.
Вполне возможно.
Цитата:
В линуксе ДРУГИЕ прерывания
Это плохо, надежда была, что они с DOS одинаковы. Я их никак не могу найти их именно для Linux.
Цитата:
плюс работа с библиотеками.
Работа с библиотеками это как работа с WinApi под форточками?

http://hackermaycry.ru/?p=12
Цитата:
И для полного смеха и показания как все это просто, небольшой список системмных вызов, номера которых всегда заносятся в eax:
┌────────────────────────────────── ─────────────────────────────────── ────┐
│ 08h Creat - Создать Файл │
│ Вход: ebx - ASCII имя файла. │
│ ecx - атрибуты файла (полномочия/права) │
├────────────────────────────────── ─────────────────────────────────── ────┤
│ 0bh ExecVe - Исполнить │
│ Вход: ebx - файл который будет запущен │
│ ecx - параметры(ключи) запускаемой программы. │
│ edx - 0 │
├────────────────────────────────── ─────────────────────────────────── ────┤
│ 26h Rename - Переименовать │
│ Вход: ebx - имя файла который переименовывать │
│ ecx - имя файла в который переименовывать │
├────────────────────────────────── ─────────────────────────────────── ────┤
│ 27h MkDir - Создать директорию │
│ Вход: ebx - имя директории │
│ ecx - атрибуты директории (полномочия/права) │
├────────────────────────────────── ─────────────────────────────────── ────┤
│ 28h RmDir - Стереть директорию │
│ Вход: ebx - имя стeраемой директории
Описывать их все нет смысла, т.к. все следует из названий функций в unist.h
unist.h нет, вместо него unistd.h В котором описаны константы.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 01.07.2013, 18:51   #5
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Благодаря статье на хабре я нашел то, что искал. Номера системных вызовов можно найти в /usr/include/asm*/unistd.h. У меня в 64 разрядной системе имеется еще два файла unistd_32.h и unistd_64.h Самое интересное, что номера системных вызовов отличаются. Не могу понять почему,но это факт, о котором говорится по ссылке в четвертом пункте.
Возникла еще одна не очень страшная, но загвоздка. Не получается отлинковать файл 32 бита в 64 битной архитектуре. Дело происходит так
Код:
$ nasm -f elf HelloNasm.asm
$ ld HelloNasm.o
ld: i386 architecture of input file `HelloNasm.o' is incompatible with i386:x86-64 output
Даже если насильно указать
Код:
BITS 32
, ничего не выходит. Почему?
P.S. Мне кажется, что я чего-то не понимаю из сообщения ld, вот только что именно...

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 01.07.2013, 19:25   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в ld архитектуру то укажите.
помоему это target
посмотрите через ld --help

по умолчанию ld пытается слинковать в файл вашей разрядности.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.07.2013, 11:27   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
Usage: ld [options] file...
Options:
-a KEYWORD Shared library control for HP/UX compatibility
-A ARCH, --architecture ARCH
Set architecture
-b TARGET, --format TARGET Specify target for following input files
.........
ld: supported targets: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-i386 plugin srec symbolsrec verilog tekhex binary ihex
ld: supported emulations: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om elf_k1om i386pep i386pe
ld: emulation specific options:
...........
Target - это -b. Указываем elf32-i386, получаем
Цитата:
ld -b elf32-i386 asm.o
ошибка та же. Для верности выбрал архитектуру
Цитата:
ld -b elf32-i386 -A i386 asm.o
Опять ничего не поменялось. Если убрать target и оставить архитектуру - тоже самое. Уже вроде все есть, а ld как попугай: одно и то же. Не могу понять, что он от меня хочет? Я бы и на x64 прожил, но это уже спортивный интерес. А как тогда ведет себя g++? Он без моего вмешательства все под x64 точит?

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 03.07.2013, 19:53   #8
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Код:
ld -m
и указываем эмулятор. Значения можно найти в ld --help

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Небезынтересная задача (C++/Assembler, linux) Archet Общие вопросы C/C++ 0 26.03.2012 22:21
нужна программа на Assembler под Linux на компиляторе gdb... КатеринаКрамер Помощь студентам 2 30.12.2011 22:55
На компе Win 7 + Linux. Как переустановить Linux? ssdm Windows 1 14.10.2011 17:54
Реализация функции strncpy на C и Assembler под Linux nomad-shtainer Помощь студентам 0 26.12.2009 20:03
Linux на VMware....... WinXP <-> Linux DMUTPUU Операционные системы общие вопросы 1 24.09.2008 12:03