Взаимодействие с GLIBC
GLIBC - стандартная библиотека Си от GNU. Если вы программируете на ассемблере под Linux, то использование функций из этой библиотеки - хороший способ сократить размер программы и затраченные усилия. Безусловно, использование их замедляет программу, но это всего лишь значит, что их не стоит использовать в критических участках - циклах. Если же вы используете GLIBC скажем для форматированного вывода на консоль, то вряд ли вы заметите какое-нибудь замедление.
Более того - использование GLIBC в большинстве случаев сделает вашу программу легко портируемой на многие другие UNIX-платформы.
В качестве примера рассмотрим программу, которая импортирует функцию puts (вывод на консоль null-terminated строки)
;Точка входа "_start" на самом деле находится ;в подключаемом *.o файле стандартной библиотеки Си ;Она передает управление на функцию "main", ;которая должна находиться в нашей программе global main ;Внешние функции extern exit extern puts ;Сегмент кода: section .text ;Функция main: main: ;Параметры передаются в стеке: push dword msg call puts ;По конвенции Си вызывающая процедура должна ;очищать стек от параметров самостоятельно: sub esp, 4 ;Завершение программы с кодом выхода 0: push dword 0 call exit ret ;Сегмент данных section .data msg: db "An example of interfacing with GLIBC.",0x0D,0
Компиляция:
nasm -felf inglibc.asm
Компоновка: Для вызова компоновщика с нужными параметрами мы не будем заморачиваться с командой ld, а воспользуемся GCC, который сам определит, что нужно нашему объектному файлу:
gcc inglibc.o -o inglibc
Оставить комментарий
Комментарии
[Ссылка]
О нас
http://www.incatalog.kz