����������� ����������

����� �� ��������� ����������� ���������� ��� ���� �� ����������� ���������� � ���������� ����������� ������ ����� �������� � ���������. ��� ������� ��������� ����� ������� �������� ������ �������� ����������� ������� ��� � ����������, ��� � � ���������� �������� ������������. � ���� �������� ����������� ����������� ���������� ����������. �� � ��� ������������� ���������� ��������� �� ��� ��� ������.
������������� ����������� ��������� �/��� DLL (� ������ ������ ������� ����� ���� �� �������������) ������������ �� ��� ���� ����� ������ � ������ ��������: ����������� ������ ����� ������������� �������� ������ � ����� ���������, ������� ��� �����. ��� �������� ��� ���������� ������������ � ������ �����������. �������� ����� � ���, ��� ��� ��������� ���������� �� ����� �����������, ������������ ���������� �������� ������ � �� ���� � ������ (��. ����� 3). ���� � ������ ��������� ���������� ����� ��������� �� ������ ������, ��� ��� �� ����� ����������� (���. 5.14)! ���� ����������� ���������� ����� ����� ������������� ������ �� ������ ����������, �������� ������ ������������ � � ������������ ������� ����������� ��� � �������.

���. 5.14. ������������� ������ ����������� DLL

� ������ �������� ��������� Unix, �������������� ���������� ����������� ������ ������� a.out, ����������� ���������� ����� ������������ � ������� ���������� �������, ����������� �� ������������� ������. ������ ���������� ���� ��������� �� ���� �����. ��������� ����� ��������� ������ ��� ����������� ���� ����� � �������������� �������. ��� ���� ������ �����������, ������� ����������� ��������� ���� ����� ���� (�������� ���� �� ������� ��, ������� ������� � �������� ��).
����� ���������� ������� ���� �������� ����������� � OS/2 2.x � Win32 (��� ��� ����������� �������� ��������� ������ � ������ �������� �������������). ���� ������� � ���, ����� �������� ������� ������� ��� �������� DLL � ���������� ��� ������� � �������� ������������ ���� ���������. ����� �������, ��� DLL, ����������� � �������, ����� ���� (���. 5.15).
��������� ����������� ������ ������� (���, �������, � �����������) �������� ������������� ������������� ��������� ������������: ��� c����-������ ������� ����� ����������� �������� ������� ����� ��������� ����������� ��������� ����� ������ �� �����. � �� �������, ����� ��� ����������� ���������������, ��� ��� �� �������� ��������� ����������, �� ������, ����� ������ ����������� ���������� ����� � 4 ����� � ������� � ����� ������� ����������� ������ ��� �� ��������, ��� ������������� ����� ����� ���������.

���. 5.15. �������� DLL � OS/2 � Win32

����� ���������, �� ����� ��������� ���������� ������� � ���, ��� ��� ����������� �� ��������� ���� ����������� ������������ ������������ ��� ������, �� ����������� DLL � ��������, ��� ������ ������ ����������� ���������� ����� �. ������� ���� �� ��������� ��������� �� ���� ����������� ��������� ���������� (bug-fbr-bug) ������������� ������, ���� ������ ��������, ��� ������ �� ������ ����� ���������� �������� ����� ��������������. ������ ������� �������������, ������ �� ������� ������������ ���������� ��� ������������, �������� ���� ������� ������������� � ���������������������.
�������� ����� ����������� ������� ���������� ����������� ������� ��������� Unix, ������������ ����������� ������ ������� ELF. �������, ��� ���������� ����� ������� ��������, �� �����, �� ����, ���������� ���������� � ������� ��� ������������ ����������-����������� ��� (��. ����. ����������-����������� ���).

����������� ���������� ������� ELF
����������� ������ ������� ELF ������ ���� �����: ����������� � ��������� ���������������, �� ������������ ����������� ��������, � ������������ � ���������� ������ �� ����������� ������� � ������������� �������. � �����������, � ������������ ������ �������� �����������. ��� �������� ������ �������� ������� �������� � ����, ��� ���������� ��������� ��������� ����������� ������ � �������� ������������. ����������� ������ �� ��������� �� � ����� �������������� ��������� � ����� ������ ���������� ����� ����� �����.
��� ������������� �� ������������ ������ ������� ��������� ��� ���������� �������������, ��� �������� ������ ������� ���������� (run-time linker), no ��������� ld.so.1. �� ����������� � ��������� �������� � ������������ ��������� ����������� �������� � ���������� �� � ����� ��������� ������ � ����� ������.
��� ��������� ����������� ������ ����� ������������ � �������� ������������ ������������ ��������. ������������ �� �� �� �����-���� ������������� �����, � ��� ���������, � ����� ���� ������������: �������� ������� ����� ��������� �� ������� ��������. �� ������������� ����, ��� ������ ��������� ����� ��������� ��� ���������������� �������� ����� � ��� �� ���������.
�������� [HOWTO Library] ��� �������� ����������, ��� � ����������� �������� ����� ������������ ������ ���, ��������������� � ������ -? ���. �������� [docs.sun.com 816-0559-10] ����� �����������:
"���� ����������� ������ �������� �� ����, ������� �� �������� ����������-�����������, ��������� ������� ������ ����� ��������� ������� ���������� ����������� �� ����� ����������. ���� �������� ������ � �������� �� ����������, ����������� ���������� ����� ��������� ������� ����� ����� � ���������� �������� ������������������".
��� ��� ���������� � ����. 3.5, ������������ � ����������� �������� ��� �� �������� ������� ����������-�����������: �� �������� ������������ � ���� ������������� �������� ������, �����, ��� ���������� ���������������� ��������� � ������ �� ��������� ������ �������. �� ��� ��� ������ ��������� � �������� ������. ������������ ��������������� � ���� ������ ������� � ��� �������, GOT (Global Offset Table, ���������� ������� ��������) � PL � (Procedure Linkage Table, ������� ������������ ����������) (���. 5.16). ������ ����������� ������ ����� ���� ����������� �������. ����������� ������������ ��� ���������� ������ ���� ������, ���� �� �������� � ����������� ������� ������������ ����� ����� ������� (��. ������� 3.7 � 5.1)

���. 5.16. Global Offset Table (���������� ������� ��������) � Procedure Linkage Table (������� ������������ ����������)

������ 5.1. �������� ������ �������, ��������������� ��� ������������� � ����������� �������

� text
�align 2,0x90
�globl _strerror
_strerror:
pushl %ebp ; ����������� ������ �������
movl %esp,%ebp
pushl %ebx
call L4
popl %ebx ; �������� �������� ������ � ������� ���
acldl $_GLOBAL_OFFSET_TABLE_+ [ . -L4 ] , %ebx

������� ���� ������������ � ����������� ��� ����� ����� ����������, ������������� ������ (�������, ��� �������, ��� �� ��� ������������ � ����������� ������� � �� �������� ������������ �������).
��������, ������� ������ � ������� GOT � PLT ��������� � ������ ������ ������ �, ���� ��� ����������, �������� ������ � ��� ������������ �����������. �� ���� ���������� ������� ������, ������������� ��������� �|� ������� �������� �� �������, ������������ � ������ �������� (�������� ����� ������ � �������� �������� ������ ������������� � ����-����� ���������������� ������ � ��. ����. ������ � ������ ��������).
������� ������ ������������ �������, ����� �������, ������������� ���� ��� � OS/2 � Win32 ���������� ��������� ��������� ������ DLL: ������ ������, ������������ ������, ����� ���� ����� ����� ��������. ������� ����������� �������� ������ ����������� ���������� ELF �� ����� � et%; ��� ����������, ��� ���������� ����� ������� ����������� ������� ����������� ������, �� � ��� ���������� ����� ���������� ���������������� ������ � ��� ���� ����� �� ����������� ����������� �� ���� � �� �� ������ ������ ���������, ������� � ��� ���������� ������� ���������.
�� ���������, ������������� ������������ ���������� �������������� ������: ���� ������� ������ �� ��������� ����������� �� �������� ���������� ����������������� ����, �� ������ � PLT ���������� ��������� �� ����������� ��������� ��������� ������. ������ �������, ��� ��������� �� ����� ������ ��� ������� ���������� ����������, ����� �� ��������� �������� ������� �� ����� ����, � ����������� �� ������ � PLT (���. 5.17). � ������, ����� ����������� �������� �� �������� ������� ����� �������, ��� ��� ����� � ������ ��� ������������� ����������� ���������, ��� ���� ������������ ������� � ������������������.



���. 5.17. �������� ������ ������� ����������

������ 5.2. ��������� PLT ��� ���������� SPARC (���������� �� [docs.sun.com 816-0559-10])

������ ��� (�����������) ������ PLT �� �������� ���������:
.PLT0:
un imp
unimp
unimp .PLTl:
unimp
unimp
unimp
������� ������ PLT �� �������� ���������:
.PLT101:
sethi (.-.PLT0),%gl
ba,a .PLTO
��� .PLT102:
sethi (.-.PLT0),%gl
ba,a .PLTO
nop
...
����������� ������ PLT ����� �������� ���������:
.PLT0:
save %sp,-64,�osp
call runtime-linker
���
.PLT1:
.word identification
unimp
unimp
...
������� ������ PLT ����� ���������:
PLT101:
sethi (.-.PLT0),%g1
sethi %hi(name1),%g1
jmpl %g1+%lo(namel),%g0
PLT102:
sethi (.-.PLT0),%g1
sethi %hi (name2),%g1
jmpl %g1+%lo(name2),%g0

����� �������, ������ ���������������� ������, ����������� � Unix, ����� ����������� �������� ������������ � ����������� ���������� (���. 5.18). ��������� ������� ������ � ������ ����� ����� ���������, � ��� ��������� ���������� ������� �� ���� �� ����������. ��� ����������� ����� �������� ����������, ��� ��, ��� ����������� � Windows, ��, ��� �� ������ � ����. ������������ ���������� ����� �������� � �������������� ���������� ���� ������� ���������� ����������.

���. 5.18. ����������� ���������� ELF

����������� ������� ELF ���������������� �� ����� �����. ����������� ������ ����� ��������� �� ���� ��� �� �������� ����� (��������, libc.so.1), ��� � � ��������� ���� (/usr/lib/libc.so.1). ��� ������ ����� �� �������� ����� �������� ������ ���� ��� � ���������, ��������� � ���������� ����� LD LIBRARY_PATH, � ������ RPATH ��������� ������ �, �������, � ��������� �� ���������, ������������� � ���������������� ����� /var/ld/ld.config (������ � ����� �������, [docs.sun.com 816-0559-10]). ��� ������������ ���� ��������� ����� �������������� ���������������� � �������������� ��������� ����������.
$ISALIST� ������ ������ ������ ������� �� �����������, �������������� ��������� ������ ������, �������� �86 � 8086, SPARC 32 � SPARC 64.
$ORIGIN � �������, �� �������� �������� ������. ������� ��� �������� ����������, ������� ����� ����������� ����������� �������.
SOSNAME, $OSREL � �������� � ������ ������������ �������.
$PLATFORM� ��� ����������. ������� ��� ����������, ������� �������� � �������� �������� ������ ����� ��� ���������� �����������, ������� ��������� ����� ����������, ��� ������� �������� � ������������ �����.
�������, ��� ������� �������� ����� ����������������, ��� ��� ���� �������������� ������� ������������ ������� � ���������� ����������� ���������. �������, ��������� �������� ������ Idd ��������� �������� ����� ������� ������ � RPATH � ��� ����������� ������, � ��������� ������� ���� �������� ���� �� ������, ������� ����� �� ������� � ��������. ��������� �����, ��������� ���������� ��� ��, ���������� �� ������� ELF, ����� ������� ������ ������������ ��������� ����� ���������� ��������������, ��� ��������� ���������� ��� Windows.
�� ������������ ����������, ��� ���������� ����������� �������� � ����� ������ (� ����� �������� ��� 1). � ������������ � ������������ ����� Sun ����� ������ ��������, ������ ����� ��������� ���������� �������� �� ������������� � ��������� �������, ���������� �� ��������� � �. �. �� ����� ��������� ����������� [docs.sun.com 816-0559-10] ��������� ������ ����� ������ � ��� ���������� ������� ��� ����������: ���� ����� ����������� ������ ����� ������������� �� ����� � �������� �����-�� ������ ����������.
����������� ������, �. �. ��������� "bug-for-bug compatibility", ���������� ��� ��������� ������ ������ ����� Sun �� �������. ��������, � Linux ������� �������� ����������� ���������� ������� �����, � ������ � ����� �������� ������ � ������� (major) ������ ���������� �� ��������, �������������� ��������������� ����������� Sun, � ������� (minor) � ����� ����������� ��������� ������ � ������ ������ ���������.
��������� ����� ����������, � ������� ������������ ����� ���� ����������� ��������� ������ ������ � ���� �� ������, � ���������������� ��������� ����� ��������� ������ �� �� ������, � ������� ��������������� � �� ������������� � ������� �������������. ������������� ����� ��������� ������� ������ ��� ����������, �� ������� ��������� ���������� ������, ���� ������� ������ � ���� ������� ��� ������ Idd, ���� ��������� ������������� �����.