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