Автор: lonesome TSH/Digital Daemons
Дата: .02.2003
Раздел: Низкоуровневое программирование в Linux
Разделяемые объекты (shared objects) в Linux являются аналогами .DLL в Windows. Находятся они обычно в /usr/lib и имеют расширение .so. Что они из себя представляют? Это исполняемые файлы формата ELF, которые экспортируют некоторые функции.
В качестве примера создадим библиотеку chomp.so, которая будет экспортировать функцию chomp (отрезание последнего символа строки, если это символ новой строки '\n')
;Экспортирование функцию chomp: global chomp ;Объявление функции chomp: chomp: ;В качестве параметра функция берет строку ;(точнее указатель на нее) ;Первые четыре байта - адрес возврата, ;значит нам нужны вторые четыре байта mov eax, [esp+4] ;Теперь в EAX адрес строки xor ecx, ecx ;Цикл - поиск нулевого символа (конца строки): .loop mov dl, [eax+ecx] ;Символ - в DL inc ecx ;Увеличим счетчик цикла cmp dl, 0 ;Если не 0 jne .loop ;То вернуться в начало цикла ;Уменьшение ECX на 2: dec ecx dec ecx ;Последний символ строки поместим в DL: mov dl, [eax+ecx] ;Если это не символ новой строки: cmp dl, 0x0A ;То выйти jne .quit ;иначе отрезать его ;(поместить на его место символ конца строки) mov [eax+ecx], byte 0 .quit: ;Завершение функции ret
Компиляция:
nasm -felf chomp.asm -o chomp.o
Компоновка:
ld chomp.o -shared -o chomp.so