|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Взаимодействие с Linux02.11.2016, 22:22. Показов 2996. Ответов 5
Метки нет (Все метки)
Модератор, закрепи тему, пожалуйста.
![]() Сделал перевод малюсенькой статьи. А то раздел, по программированию на Ассемблере под Linux, как-то обделили. X86 Assembly/Взаимодействие с Linux. Автор перевода: XiloManX. Дата перевода: 02.11.2016 Перевод статьи из электронной книги "x86 Assembly": https://en.wikibooks.org/wiki/... with_Linux От автора перевода: Это, мой первый технический перевод. Поэтому, заранее прошу прощение, за возможные грамматические ошибки и возможную неточность перевода. Системные вызовы. Системные вызовы являются интерфейсом между пользовательскими программами и ядром Linux. Они используются, чтобы позволить ядру выполнять различные системные задачи, такие как: доступ к файлам, управление процессами и создание сетей. В языке программирования С, вы, как правило, вызываете функцию-обертку, которая выполняет все необходимые действия, или даже используете функции высокого уровня из стандартной библиотеки ввода-вывода. В Linux, есть несколько способов сделать системный вызов. Данная страница, будет сосредоточена на создании системных вызовов, путем вызова программного прерывания, с помощью: int $0x80 или syscall. Это простой и интуитивно понятный способ, для того, чтобы делать системные вызовы только в ассемблерных программах. Создание системного вызова. Для того, чтобы сделать системный вызов с использованием прерывания, вы должны передать всю необходимую информацию ядру, копируя её в регистры общего назначения. Каждый системный вызов имеет фиксированный номер (примечание: между собой $0x80 и syscall отличаются номерами!). Вы указываете системный вызов, путем записи номера в регистр eax/rax. Чтобы выполнить свою задачу, большинство системных вызовов принимают параметры. Перед выполнением вызова, эти параметры, передаются путем записи их в соответствующие регистры. Каждый индекс параметра имеет специальный регистр. Для того, чтобы увидеть различия, между int $0x80 и syscall, см. таблицы в подразделах. Параметры передаются в порядке, в котором они определены в описании функции, соответствующей обертке функции C. В каждой документации по Linux API, для справки, вы можете найти функции системных вызовов и их описание (например: чтобы увидеть описание системного вызова open, напечатайте в терминале man 2 open). После того, как все настроено правильно, вы вызываете прерывание используя int $0x80 или syscall, и ядро выполняет задачу. Возвращаемое значение системного вызова, об удаче или ошибке, записывается в регистр eax/rax. Для выполнения действий, ядро Linux использует свой собственный стек, и никаким образом не затрагивает стек пользователя. int $0x80 На обоих системах Linux, x86 и x86_64, вы можете сделать системный вызов, вызвав прерывание 0x80 с помощью команды int $0x80. Параметры передаются путем установки регистров общего назначения следующим образом:
Номера системных вызовов описаны в исходном файле Linux: arch/x86/include/asm/unistd_32.h. Во время системного вызова, все регистры сохраняются. syscall Для того, чтобы сделать системный вызов, в архитектуру x86_64 введена специальная инструкция. Она быстрее и не имеет доступа к таблице дескрипторов прерываний.
Номера системных вызовов описаны в исходном файле Linux: arch/x86/include/asm/unistd_64.h. Во время системного вызова, все регистры сохраняются, за исключением rcx и r11. Примеры. Для того, чтобы подвести итог и уяснить информацию, давайте посмотрим на очень простой пример: программа привет мир. Она будет писать текст "Hello World" на стандартный вывод, используя системный вызов write, а выход из программы, с помощью системного вызова _exit. Описание системных вызовов:
Как определено в: arch/x86/include/asm/unistd_32.h, номера системных вызовов для write и _exit, будут такими:
Номера системных вызовов определённы в файле - arch/x86/include/asm/unistd_64.h , следующим образом:
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 02.11.2016, 22:22 | |
|
Ответы с готовыми решениями:
5
Обеспечить взаимодействие между машинами Windows и Linux Linux и Windows на одном диске - странное взаимодействие двух систем |
|
|
||
| 03.11.2016, 20:56 | ||
|
А в общем смысле статья довольно бесполезна, т.к. подразумевает ну очень узкий круг читателей. Большинство начинающих эту статью не поймут, потому что в ней много букв, но ни одного внятного пояснения, а что дальше с этими буквами делать. Т.е. после прочтения статьи надо ковыряться в гугле, чтобы понять, что делать с полученными знаниями. А продвинутые в общем-то и так это знают
0
|
||
|
Заблокирован
|
|
| 03.11.2016, 21:01 | |
|
Хоть бы про gas что-нибудь написали. А то какие-то сорцы непонятные, что с ними делать - тоже не понятно
0
|
|
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
||||||||
| 04.11.2016, 02:48 [ТС] | ||||||||
|
0
|
||||||||
| 04.11.2016, 15:04 | |
|
0
|
|
| 04.11.2016, 15:16 [ТС] | |
|
0
|
|
| 04.11.2016, 15:16 | |
|
Помогаю со студенческими работами здесь
6
[Mono] Подскажите ide c# под linux чтобы компилировался файл для linux Ошибка Kernel driver not installed (rc=-1908) linux в VirtualBox (Linux Mint) Разметка в Linux жесткого диска для дуалбут MS-DOS и Linux
Linux mint + win 8 + uefi + hibernate - пропал загрузчик linux Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|