����������� ����������
����� �� ��������� ����������� ���������� ��� ���� �� ����������� ����������
� ���������� ����������� ������ ����� �������� � ���������. ��� �������
��������� ����� ������� �������� ������ �������� ����������� ������� ���
� ����������, ��� � � ���������� �������� ������������. � ���� ��������
����������� ����������� ���������� ����������. �� � ��� �������������
���������� ��������� �� ��� ��� ������.
������������� ����������� ��������� �/��� 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, ���� ��������� ������������� �����.
|