HotLog
    ��������� 2    ������ 60        �������  

������� �� � COFF ��������� ������

�����: ���� ������
��������: ������� ���������� ���������������� � Windows 95. ����� 8.
������������: 05.04.2001
����������: 15.09.2005
������ ������: 1.1

������ ������������ ����� ������������ ������� � ������������ ������� �������� ���������� � ������������ ������� ������������� � ������ ���������. ���� �������� ���� ������� ������� ������������ ����� � �� �������� ����� �� ������� ����� �������� ����������������, ��� �� �����, �� ����� ����� ���������� ������ ������ ���������� �� ������������ �������. ������������ ����������, ��������� ���������� � ���������� ������� � ��� ������ ��� ������� ������������� ������� ������������ �������, ������� ����� ������ �� ���� �������� ������� ����������� ������.

� ���� ����� �� �������� ������� � ����������� ����������� (�� � Portable Executable) ������ �����, ������� ����� Microsoft ����������� ��� ������������� �� ���� �� ������������ �������� Win32 (Windows NT, Windows 95, Win32s).

��������, �������� �������� ����, ��� � ����������� � ��-������� � ���� �����, ����� ��� ��������� �������� ����� ������� ����� ����� �� CD-ROM Microsoft Developer Network. ������� �������, �� ������� � ����� ������� ��-������, � ��� ��� ����, ��� ������ ����� Windows 95 ������������ �� �� �������� ��������� ������, ��� � � ������ ��-�������. ���, ��������, Windows 95 ���������� ��������� ��-����� � ������ � ���������� ��� ��� ������������� ������������ ������. ��� ���� ����� ������, ��� �������� ���� Windows 95, ���������� ����������� � ��-��������. ����������, ��� ��� ���������� ������.

������ ��������, �� ������� � ����� ������� ��-������, �������� ��, ��� �������� ��-������� ����� Microsoft, ��� � ��������� ������������ ���� �����, ������������, ��� ������������ ����� � ����� ����������� �������� �����. �� ����� �������������� ������� ������������ Microsoft ����������. ��� ��� ���� ������� � ���� ����� �������� "���������" ���� ������������ � ����������� �� � ���������� ��� ������� ������������ ���������. �� ���� ���� � ������ ��� ��������, ����������� ������� ��-������ ������ �� ���������� ������������ ������� � ��������.

��-������ ������ � ����� ������ � ��������� ������� �������� ���� �� ���� ������������ �������� Microsoft, ������� Cairo. ���� ���� �� �������������� � Windows 3.1, ��������� Visual C++, ��� ��� ����� �������� ������������ ��-������� (32-��������� ����������� ���������� DOS � Visual C++ ���������� ���� ������). � ���� �� ����������� �������� ����� �������, ��������� � ��������� ����������������� ������� ������ � Windows 95, ������������ ������ �� ��-������ ������ ����������.

��� ���������� ��-������� � �� ��������� ��������� ���������� ����� ����������������� ����� ��� ��� ����� ��������� ���������� ��������� �����. ������ ����� � ���� �������� ���������, ���������� � ��-������, � ������� �� � ���������, ������� ��������� ����������� ��� ���������������� � Win32. ��������, ��������� ��������� ���������� ��� ������� (�-�� __declspec (thread)) �������� ���� �� �������� �� ��� ���, ���� � �� ������, � ����� ��������� � ���������� ��� ����������� � ����������� �����. ��������, ��� ������ ������������ ����� ���� ������ � Win 16, � ������, ��� ������� ����������� � ��-������� � �� ������������� � 16-��������� �������� ��������.

������ � ������ ��������� ����������� ������ Microsoft ����� ����� ����� ������� ��������� ������� � ���������, ����������� �� ������������ ������������� � ������������, (����� �������� ������ LIB, �� ��������, ������������ ����� ������ ������ ��������� ������, ������������� � ������� �������; ����� � ���������� � �������� � ���� ����� �� ��������� �����, � ���� ����� � ���� ��� COFF-���������, ��� � LIB-�����.) ��� ����� ��������� � LIB-�������� ������� ����� ������ ����� ��������� � �������� ��. �� ���������� ������� �� ������������ �������������� ��������� ���������� �� ��������� � LIB-������ ����� Microsoft, � ���� � ������� ��������� ���� ����� ���������� ����� ������. ������� ����� �������� ����� ������� ��������� ������ � LIB-������.

������������, ��� Windows NT (������ �� ������������ ������ Win32) ������������ ������ �� VAX VMS � UNIX. ������ ������� ������������ NT ����� ����� �������� � Microsoft ��������������� � �������� ������ ��� ����� ���������. ������ �����������, ���, ����� �� �������� ��������� NT, ����� ��������� ���� ����� � ����, ��� ������������ ����� ���������� � ������������ ��������. ����������� ������ � ������ ���������� ������, ������� ��� �������� ��������� � � ������� ��� ��������, ���������� COFF (Common Object File Format � ����������� ������ ���������� �����).

������������ ���������� (�� ������������ ������) �������� COFF ����� ��������� � ���, ��� ��������� ���� � ������ ����� ������������ ������. COFF-������ ��� ��� �� ���� �������� ��������� ������, �� �������� � ����������, ����� ������������� ������������ ����� ������������ ������, ����� ��� Windows NT ��� Windows 95. ����������� ������ ������������������ ������ ��-������ (�� ���������: �� �������� Portable Executable � ����������� �����������). ���� ������ ���������� �����������, ��� ��� ��� ���������� Windows NT � ��������� �������� (Intel 386, MIPS, Alpha, Power PC � �.�.) ���������� ���� � ��� �� ����������� ������. �������, ������� ��������, ��������, ��������� � �������� ���������� ������ ����������. ������ ��������� �� Intel ����������� ��-����, ����������������� � MIPS. ��� �� ����� �����������, ��� ��� ����� ��������� ������������ ��������� ������������ ������� � ����������� �������� ��� ������� ������ ����������.

Microsoft ���������� ����������������� Windows NT, � ��� ������ �������������� ���, ��� Microsoft ���������� �� ����� ������������ 32-��������� ������� � �������� ��������. �������� ����������� ���������, ���������� ��� Windows �.�, ������������ ������ 32-��������� ������ ����� (LE-������) ������� �� ��������� NT �� ����. ������ �������� "���� �� ��������, �� ���� � ������", ����������� � Windows, Windows 95 ���������� ��� ��-, ��� � LE-������. ��� ��������� Microsoft ������ ������������ ������������ ��������� ��� Windows 3-�.

������ ����������� ������� ���������� ������� ������������ ������� ��� ���������� ����� ������������ ������� (����� �������� Windows NT), �� ������ ������ ������� ��������� ������� (.OBJ � LIB). �� ��������� 32-��������� ������ 1.0 Visual C++ ��� ����������� Microsoft ������������ ������������� Intel OMF (Object Module Format � ������ ���������� ������). ����������� Microsoft ��� ���������� Win32 ������� ��������� ����� � ������� COFF. ��������� ���������� Microsoft, �������� Borland, ���������� �� ������� COFF ��������� ������ � ���������� �������������� ������� OMF Intel. � ���������� ��������, ������������ ��������� � LIB-�����, ������������ �� ������������� � ����������� �������������, ����� ��������� ������������ � ������� �������� ��������� ������ �� ��������� ��� ��������� ������������ (���� ��� �� ������� ����� �� ��� ���).

�� ������������, ������� ����� ����������� �� ���� ��������� Microsoft ����������, ����� ������� � ����� ��������� �������� ���������� Microsoft ����������������� ����� �����������. ����� ������������� "�������������" � Microsoft ������ �� ������ ��������� ������, ������ ����� ����� ��������� �������������� ��� ���� 32-��������� �������� � ������� COFF OBJ � LIB. ������� ����, ����� �������, ��� ��������� � LIB-�������� ������� �������� ��� ����� �������� ������ Microsoft �� ������������ ���������� ��� ������ ����������� �������� ���� �����.

������ � ���������� ������������� �������� ��� ��������� ������ ������ COFF ��-������ ���������������� (� ����� �������� ������ ����� �����) � ����� ��������� WINNT.H. (� ���� ������������ ������� ����� �� WINNT.H ����� � ���� �����.) �������� ��������� WINNT.H ��������� ������, ������������� "Image Format". ��� ������ ���������� � ��������� ���������� �� ������ ������ ���������� �������� DOS MZ � NE ����� ��������� � ����� ����������, ��������� � ��. WINNT.H ���� ����������� �������� �������� ������, ������������ ��-�������, ������ �������� ����� ���� ���������� ����� �� �������� �����������, ����������� ���������� �������� � ������. ����� ������������� ����� ��� ��-������� (����� Michael J. O'Leary) ����������� ������ ���������� � �������, ������������ ������, � ����� � ������� ��������� ���������� � ��������. ������������ � �������������� WINNT.H, ������� ����� ���������, ��������, ����� ���������:

pNTHeader->OptionaIHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;

��, ��������, �������� �� ������ �������� � ���, �� ���� ������� ��-�����, �� � ����� ����������� ��������� ��-������, ����� �� �������� �������, ��� ����������� �������������� ����� ���������. ���� �� ����������� �������� Microsoft ��� Win32, �� ��������� DUMPBIN �� Visual C++, � ����� Win32 SDK, ����� ��������� ��� ����, ����� "�������������" ����� �� � COFF OBJ/LIB � ����������� �� � ������������ ����. DUMPBIN ���� ����� ������������� �������� ��� ������������������ ����������� ������ ���������� �����. ��������� ��������, ��� ����� Microsoft, ������� ��������� ������������� ����������������� ���� ���������, � ������ ������ ������������ �������� ��� �������� ������������������ �������� � ��������� ������������ ���������� (DLL). ���� �� ����������� ����������������� ��� � ��������� ����� �� ���� �� �������, ����� ������������ �� Microsoft �������� ���� DUMPBIN? � ���� ������ ����� �������: "�����, ��� �� �������, � �� ���, ��� �� ������".

������������ Borland ����� ������������ TDUMP, ����� ������������� ��-�����, ������ TDUMP �� ������������ ��������� ����� ������� COFF. ����� ��� ������ ���������, ��� ��� ���������� Borland ������ �� ������� ��������� ����� ������� COFF. ������ ���� �����, � ���� ������� ��������� ��������� ��- � COFF-OBJ/LIB-������ (PEDUMP), �������, �� ��� ������, ������������ ����� ��������� �����, ��� DUMPBIN. �������� �� ��, ��� ��� ��������� �� ����� �����������������, �� ���� ��������� ��� ��������� ������������� ������������ DUMPBIN �, ����� ����, �������� ��������� ����� �����, �������� �� ��������� ��������. �������� ����� ��������� PEDUMP ��������� �� ����������� ������� � ��� ������ � �� ������� �� ����� ���������. ������ ����� � ������������ ������� ������ PEDUMP, ����� ����������������� ��������� �� ���� �� ���������.

��������� PEDUMP

��������� PEDUMP �������� ���������, ����������� �� ��������� ������ � ������������� ��� ������ ��-������ � ������ ������� COFF OBJ/LIB. ��� ���������� ����������� ��������� Win32, ����� �������� ��� ����������� ������ � ����������� ������������. PEDUMP ����� ��������� ���������: PEDUMP [�����] ��� �����. ��������� ����� ����� �������, �������� PEDUMP ��� ����������. PEDUMP ���������� ��������� �����:

/A  �������� ��� (�� ��������, �������������� ��� �����)
/�  �������� ����������������� ����� ������ ������ � ����� �����
/I  �������� ������ ������������ �� Import Address Table
/L  �������� ���������� � ���������� ����� (��� ��� ��-, ��� � ��� COFF-��������� ������)
/R  �������� �������� ������������ ���� (������ ��� ��-������)
/S  �������� ������� �������� (��� ��� ��-, ��� � ��� COFF OBJ-������)

�� ��������� �� ���� �� ������ �� �������������. � ���� ������ ������� ����� ����������� ���������� ����� �������� � �� ����� ������� ���������� ������ ���������� ������.

PEDUMP ������������ ����� � ����������� �������� ���� (��������, �� �����), ��� ��� ���� ����� ����� �������������� � �����-���� ���� � ������� ����� ">" (������), ���������� � ��������� ������.

�������� ����� ��� PEDUMP �������� ������ � ���. PEDUMP ���� ������� � ������� ����������� Microsoft Visual C++ 2.0, ���� � ����� ������������ ��� ��������� �� ���� �� ������������������, ��������� Borland C++ 4.x.

�������� �������� � �������� Win32 � ��

����� ��� ��� ������ ���������� ������� ��-�����, � ����� �� ����������� ��������� ����� �������� ����, ����������� ������� ����� ������. � �������� ����� ���������� � ���� ������������ ������� ������, ������������ ��� ��� ����� ��������, ������ � ������� ������������ ����� ��� DLL, ������� ���� ��������� � ������. ������ ������ ��������� � ������, ������� ���������� ��������������� ���������, ������ ����� �������� ��������������� ������, ������������ Windows ��� ����, ����� ����������, ��� ����������� � ������ ����� ��������� � ������. � Win 16 ��������������� ��������� ������ ��������� � ���� ������ ������ (�������, �� ������� ��������� HMODULE). � Win32 ��� ���������� ���������� � ��������� ��-����� (��������� IMAGE_NT_HEADERS), � ������� ������ � �������� ��������.

����� ������ �� ����, ��� ������� ����� � ��-������, ��� ��, ��� ����������� ���� �� ����� � ������, ���������� ����� ��������, ����� ������. �������� ����� �������� ��, ��� ��������� Windows ������ ������� �� ��������� ����� ����������� ������� ��� ������� ������. ������ ������, ��������� �������� ���������� ������������ � ������ ����� Win32, ����� ��������� ��������������� ����� ��-����� � �������� ������������ ���������. ����� ������� �������� �� �������������� ������� �������. � ��� ���� ������������ ������� ���������, ���������� �� �� ����� ������ � �������� ������������ ������������, �� ���������� ������ ��������� ����� ���, � ��� ������ ������� �� �������� ������������ ����� ����������� ����������. � ����� �� ������� �������, ��� ����������� ������������� � ����������� � �������� ������, �������� ���������� ��-����� � ������� ����� (�.�. ����������� � ���� DLL � �.�.).

��� �� ������ ����������� � DLL. ����� ���� ��� ��� ��� .DLL ������ ���������, Windows ���������� � ���� ��� ��, ��� � � ������� ������������� � ������ �������. ���������� ���� �������� � 16-��������� Windows. 16-��������� NE-��������� ����� ��������� ���� � ������ �������� � ������� ��������� ��������� ������ ��� ������������� ������ � ������. ����� ���������� ��������� ������� ��������� ��� ������, ��������� ������ �������� ����� ������� �� ����� ����, ����������, ��� �������� �������� ������ � ����������� �����, �������� ��� �����, ������� �������� ������ � ��������� ����� ���������� ������. ����� ����, ������ 16-��������� ������ ������ ���������� ��� ������������ � ������ ������ ���������, ���������� �� ����, �������� �� �������.

� Win32, ��������, ������, ������������ ��� ���������, ������, �������, ������� �����, ������� ������ � ������ ��������, ������������ ����� ���� �������� �������� ������ ��������� ������������. ���, ��� ���������� ����� � ���� ������, � ��� �����, � ������� ��������� ��������� � ������ ����������� ����. ����� ��� ����, ����� ����� ����� ������� ������, ���������� ��������� ����������, ������� �������� ��� ����� �����������.

������ ������ ��������, � ������� ���������� �����, �������� RVA (Relative Virtual Address � ������������� ����������� �����). ������ ���� � ��-������ �������� ������ � ������� �� RVA. RVA � ��� ������ �������� ������� �������� �� ��������� � ������, � �������� ���������� ����������� ����� � ������. �����, � �������, ��������� Windows ��������� ��-���� � ������, ������� � ������ 0�400000 � ����������� �������� ������������. ���� ����� ������� � ����������� ���������� � ������ 0�401464, �� RVA ������ ������� 0�1464:

(����������� ����� 0�401464) - (������� ����� 0�400000) = RVA 0�1464

����� ��������� RVA � ��������� ������, ������ ��������� RVA � �������� ������, ������� � �������� ��� �������� ������. ������ ������� ����� ������������ ��� ���� ������ �������, � ������� ������� �������. ������� ����� � ��� �����, � �������� ���������� ������������ � ������ ���-���� ��� DLL. ��� �������� Windows NT � Windows 95 ���������� ������� ����� ������ � �������� ����������� ������� ������ (HINSTANCE � instance handle). To, ��� � Win32 ������� ����� ���������� HINSTANCE, ����� ������� �������������, ��� ��� ������ ���������� ������� ���������� �� 16-��������� Windows. ������ ����� ���������� � Win16 �������� ���� ����������� ������� ������ (� ��������� � ��� ���������� ����������), ������� �������� ��� ����� ���������� �� ������; ������ � �������� ���������� �������.

� Win32 ��� ����� ��������� ��������� ����� ����������, ��� ��� � ��� ��� ������ ��������� ������������. ������ ������ HINSTANCE ��������, ����� �������� ��������������� Win32 �� ��������� � Win16. � ������ Win32 ����������� ��, ��� ����� ������� GetModuleHandle() ��� ����� DLL, ������� ������������ � ��������, � �������� ���������, ������� ����� ������������ ��� ������� � ����������� ������. ��� ������������ ������ � ������������ ��� ������������� � �������������� �������, ��� �����������, ��� ����������� ������ � ������ ������ � �.�.

��� ����� ��������, � ������� ������� ������������ ��� ����, ����� ����������� ��- � COFF OBJ-�����, �������� ������. ������ � ������ �� ��� COFF OBJ �������� ������������ �������� ��� �������� � 16-��������� NE-�����. ������ �������� ���� ��� ��������, ���� ������. ��������� ������ �������� ��� � ������, ��������������� ����������� � ������������ �����������, ����� ��� ������ ������ ������ ��������� �������������� � �������������� ���������� ��� ������������ � �������� ����������, ����������� ��� ������ ������������ �������. � ��������� ��������� ������� �� ����� Microsoft ������ ����� ���������� ���������. ������ ���� ��������� ������ ����� ��� ����� (��������, �������������� ���� �����) ��������, ��� � ����� �������������� ������� ������ ��� ����������� �� �������� ������������ ���� � ������. ������ ����������� ����� �������� � ���� �����, � ������� "����� ������������� ������"; ���� ��� �������� ���������� ������ �����, ��� ����� ������.

����� ��� ��� ����������� � ������ ��-�����, ������� ������� ���. 8.1, �������������� ����� ������ ��-�����. �������� �� ��, ��� � ���� ��������� ������ ������� ��������, ������� ��� ������ ����������� �� ��� ������.


���. 8.1. ����� ������ ��-�����

��������� ��-�����

������ �������, �� ������� �� ����������� � ����� ����������� �� ��-�������, ����� ��������� ��-�����. ��� � ������ ������ ����������� ������ ����� Microsoft, ��-���� ����� ����� �����, ������������� � ����� ��������� (�� ������� ����, ����� ���������) ����� �����; ��� ���� ����������, ��� ����� ��������� ��������� ����� �����. ��������� ��-����� �������� ����� ������ ����������, ��� ������������ � ������ �������� ���� �������� � ������, �������� �� ��, � ����� ������������ �������� �������������� ������������ ������ ����, � ����� ��������� ������ �����.

��� � � ������ ����������� �������� �� Microsoft, ��������� �� ��������� � ����� ������ �����. ������ ����� ��������� ����� ������ ������ ��������� ��-����� ������ ��� �������� DOS. ��� �������� ������������ ����� ����������� DOS-���������, ������� ������� ���-���� �����: "��� ��������� �� ����� ���� �������� ��� DOS". ��� ��� ��������������� ������, ����� ������������ ��������� ��������� Win32 � �����, ������� �� ������������ Win32, ������� ��� ���� ����������� ���� ��������� �� ������ (������ ���������������, �������). ����� ���� ��� ��������� Win32 ��������� � ������ ��-����, ������ ���� ����������� ����� ������������� ������� ����� �������� DOS. � ��� �� ��� �� �����. � ������ ����������� Win32 ���������� ������������ �������� �������������� DOS-���������, ����������� ������ ���! (� Win 16 �������� DOS �� ����������� � ������.)

��� � � ������ ����������� �������� Microsoft, ��������� ��������� ����� ����������, ����� ��� ��������� ��������, ������� �������� � ��������� DOS. ���� WINNT.H �������� ����������� ��������� ��� ��������� �������� DOS, ��� ������ ����� ������� ���������� ������ ��������� ��-�����. ���� e_lfanew ���������� � �������� ������������� �������� (���, ���� ������, RVA) ���������� ��������� ��-�����. ����� ���������� ��������� � ������ �� ��������� ��-�����, ���������� ������ ������� �������� � ���� � ������� ������� �����������:

//������������ ��� ������� ��������������� ����� � ����������...
pNTHeader = dosHeader + dosHeader->e_lranew;

��������� ������� ����������, ����� ��������� ���������� �� �������� ��������� ��-�����. �������� ��������� ��-����� ������������ ��������� ���� IMAGE_NT_HEADERS, ������������ � ����� WINNT.H. ��������� 1MAGE_NT_HEADERS � ������ � ��� ��, ��� Windows 95 ���������� � �������� ����� ���� ������ ������ � ������. ������ ����������� ���-���� ��� DLL ������������ � Windows 95 ���������� IMAGE_NT_HEADERS. ��� ��������� ������� �� �������� ����� � ���� �����������, ��� �������� ����:

DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;

���� Signature (��������� � �������), �������������� ��� ASCII ���, � ��� ��\0\0 (��� ������� ����� ����� ��). ���� ���� e_lfanew � ��������� DOS ������� ������ ����������� �� ����������� NE � ���� �����, ������, �� ��������� � ������ Win 16 NE. ����������, ���� ������� ����������� LE � ���� Signature, �� ��� ���� VxD (VirtualDeviceDriver� ������� ������������ ����������). ����������� LX ��������� �� ���� ������ ��������� Windows 95 � OS/2.

�� ������� ������ � ���������� ��, � ��������� ��-����� ������� ��������� ���� IMAGE_FILE_HEADER. ���� ���� ��������� �������� ������ ����� ����� ���������� � �����. ��������� �� ���������� �� ��������� � ��������� COFF-������������. ��� ��������� �������� ������ ��������� ��-�����, ����� ����, ���������� � ����� ������ ��������� COFF-������, ����������� ������������� Microsoft Win32. ����� ���������� ���� IMAGE_FILE_HEADER.

WORD    Machine

��� ����������� ���������, ��� �������� ������������ ����. ���������� ��������� �������������� �����������:

Intel I386  0�14�
Intel I860  0xl4D
MIPSR3000   0�162
MIPS R4000  0�166
DEC Alpha AXP   0�184
PowerPC         0x1F0 (little endian)
Motorola 68000  0�268
PA RISC         0�290 (Precision Architecture)

WORD NumberOfSections

���������� ������ � ���- ��� OBJ-�����.

DWORD TimeDateStamp

�����, ����� ���� ��� ������ ������������� (��� ������������, ���� ��� OBJ-����). � ���� ���� ������� ���������� ������, �������� � 16:00 31 ������� 1969 ����.

DWORD PointerToSymbolTable

�������� �������� COFF-������� ��������. ��� ���� ������������ ������ � OBJ- � ��-������ � ����������� COFF-���������. ��-����� ������������ ������������� ���������� �������, ��� ��� ��������� ������ ��������� �� ����� IMAGE_DIRECTORY_ENTRY_DEBUG � �������� ������ (����� ��������� �������).

DWORD NumberOfSymbols

���������� �������� � COFF-������� ��������. ��. ���������� ����.

WORD SheOfOptionalHeader

������ ��������������� ���������, ������� ����� ��������� �� ���� ����������. � ����������� ������ � ��� ������ ��������� IMAGE_OPTIONAL_HEADER, ������� ������� �� ���� ����������. � ��������� ������, �� ����������� Microsoft, ��� ���� ������ �������� ����. ������ ��� ��������� ���������� ������ KERNEL32.LIB ����� ���������� ��������� ���� � ��������� ��������� � ���� ����, ��� ��� ���������� � ������������ Microsoft � ��������� ������������.

WORD Characteristics

�����, ���������� ���������� � �����. ����� ����������� ��������� ������ ���� (������ ���� ���������� � WINNT.H).

0�0001  ���� �� �������� �����������.
0�0002  ���� ������������ ����������� ����������� (�.�. ��� �� OBJ- ��� LIB-����).
0�2000  ���� �������� ����������� ������������ ���������� (DLL), � �� ����������.

������� ����������� ��������� ��-����� �������� ��������� ���� IMAGE_OPTIONAL_HEADER. ��� ��-������ ��� ����� �������� ������������. ������ COFF ��������� �������������� ���������� ��� ����������� ��������� �������������� ����������, ������ ������������ IMAGE_FILE_HEADER. � ����� � IMAGE_OPTIONAL_HEADER ������������ ��-������� ��������� ��, ��� ��� ��������� ������ ����������� � ����� ���������� � IMAGE_FILE_HEADER.

��� ������������ �� �������� ����������� ������ ���� ����� � IMAGE_OPTIONAL_HEADER, �������� ������� ������ �������� ���� ImageBase � Subsystem. �� ������� �������� ����� ����� ����������� ��� ���������� ��������� �������� �����.

WORD Magic

�����-���������, ������������ ��������� ������������� �����. ���������� ��������� ��������:

0�0107   ����������� ��� 
0�010�   ���������� ����������� ����������� (�������� ��� ������� ����� ������)

BYTE MajorLinker Version; BYTE MinorLinker Version

������ ������������, ������� ������ ������ ����. ����� ������ ���� ������������ � ���������� ����, � �� � �����������������. �������� ������ ������������ 2.23.

DWORD SizeOfCode

��������� ������ ����������� ������, ����������� � ������� �������. ������ ����������� ������ ����� ������ ���� ����������� ������, ��� ��� ��� ���� ������ ������������� ������� ������ .text.

DWORD sizeOfInitializedData

��������������, ��� ��� ����� ������ ���� ������, ��������� �� ������������������ ������ (�� ������� �������� ������������ ����.) ������ �� ������, ����� ��� ��������� � �������� ������ ������������������ ������ � �����.

DWORD SizeOfUninltializedData

������ ������, ��� ������� ��������� �������� ����� � ����������� �������� ������������, �� ������� �� �������� �������� ����� � �������� �����. � ������ ������ ��������� ��� ������ �� ������� ����� �����-���� ������������ �������� � ������ �������� �������������������� ������ (Uninitialized Data). �������������������� ������ ������ ��������� � ������ ��� ��������� .bss.

DWORD AddressOfEntryPoint

�����, � �������� ����������� �������� ����������. ��� RVA, ������� ����� ����� � ������ .text. ��� ���� ��������� ��� ��� ���-�����, ��� � ��� DLL.

DWORD BaseOfCode

RVA, � �������� ���������� ����������� ������ �����. ����������� ������ ���� ������ ���� � ������ ����� �������� ������ � ����� ��������� ��-�����. ���� RVA ������ ����� 0�1000 ��� ���-������, ��������� �������������� Microsoft. ��� TLINK32 (Borland) �������� ����� ���� ����� 0�10000, ��� ��� �� ��������� ���� ����������� ����������� ������� �� ������� � 64 ����� � ������� �� 4 ����� � ������ ������������ Microsoft.

DWORD BaseOfData

RVA, � �������� ���������� ������ ������ �����. ������ ������ ������ ���� ���������� � ������, ����� ��������� ��-����� � ����������� ������.

DWORD ImageBase

����� ����������� ������� ����������� ����, �� ������������, ��� ���� ����� ��������� � ������������ ����� � ������. ��� ������ ���� ����� � �������� � ���� ����. ������ ������ �������� ��������� ������������ �������� �����������. ���� ��������� ������������� ��������� ���� � ������ �� ����� ������, �� ��������� ����� �������� �� ��������� �� � ����� ���������. � �������� �� ���� ������� ��������� ��� ���������� ����������� ������������ ����. � ����������� ������ NT 3.1 ����� ����������� �� ��������� ����� 0�10000. � ������ DLL ���� ����� �� ��������� ����� 0�400000. � Windows 95 ����� 0�10000 ������ ������������ ��� �������� 32-��������� ������ ���, ��� ��� �� ����� � �������� �������� ������� ��������� ������������, ������ ��� ���� ���������. ������� ��� Windows NT 3.5 Microsoft �������� ��� ����������� ������ Win32 ������� ����� �� ���������, ������ ��� ������ 0�400000. ����� ������ ���������, ������� ���� ������������ � �������������, ��� ������� ����� ����� 0�10000, ����������� Windows 95 ������, ������ ��� ��������� ������ ��������� ������� ��������. � ����� ������� �������� ������� �����.

DWORD SectionAlignment

����� ����������� � ������ ������ ������ ����� ����������� ���������� � ������������ ������, �������� ������ ��������. � ������ �������� ������� ����������� �������� ����� ���� 0�1000 ������������ ������������� Microsoft �� ���������. TLINK � Borland C++ ���������� �� ��������� 0�10000 (64 �����).

DWORD FileAlignment

� ������ ��-����� �������� ������, ������� ������ � ������ ������ ������, ����� ����������� ���������� � ������, �������� ������ ��������. ��������, ��������������� �� ���������, ����� 0�200 ���� �, ��������, ������� ��� ��� ����, ����� ������ ������ ������ ��������� � ������� ��������� ������� (0�200 ���� � ��� ��� ��� ������ ��������� �������). ��� ���� ������������ ������� ������������ ��������/������� � NE-������. � ������� �� NE-������, ��-����� �� ������� �� ����� ������, ��� ��� ������, �������� ��� ������������ ������ �����, ������ ����� �������������.

WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion

����� ������ ������ ������������ �������, ������� ����� ������������ ������ ����������� ����. ���������� ����� ���� �� ������ ����, ��� ��� ���� ���������� (��������� ����), ������, ����� ����� �� ��������������. � ������� ����� ������ Win32 � ���� ���� ���������� ��������, ��������������� ������ 1.0 .

WORD MajorImageVersion; WORD MinorImageVersion

������������ ������������� ����. ��� ���� ��������� ����� ��������� ������ ���-������ � DLL. ��� ���� ��������������� � ������� ����� ������������ /VERSION, ��������:

LINK/VERSION:2.0 myobj.obj

WORD MajorSubsystem Version; WORD MinorSubsystem Version

��� ���� �������� ����� ������ ������ ����������, ����������� ��������� ������ ����������� ����. �������� �������� � ���� ���� 4.0 (���������� Windows 4.0, ��� ����������� Windows 95).

DWORD Reserved

��� ����, ��-��������, ������ ����� ����.

DWORD SizeOfImage

������������ ����� ������ ���� ������ �����������, ����������� ��� ��������� ����������. ��� �������� ����� ������� ������� ������, ������� � �������� ������ ����������� � ���������� ������� ����� ��������� ������. ����� ����� ������ �������� �� ��������� ������� ������� ������.

DWORD SizeOfHeaders

������ ��������� ��-����� � ������� ������ (�������). �������� ������ ��� ������ ���������� ����� ����� ���� ������������ ������ ���������.

DWORD Checksum

���������������� �������� ����������� ����� �������� ����������� ���������� ����� (CRC-��������) ��� ������� �����. ��� � ��� ������ ����������� �������� Microsoft, ��� ���� ������ ������������ � ��������������� � ����. ������ ��� ���� DLL ���������, DLL, ����������� �� ����� �������� ��, � ��������� DLL ��� �����������, ����� ������ ����� ���������� ��������. �������� ��� ����������� ����� ����� ����� � IMAGEHLP.DLL. ��������� IMAGEHLP.DLL ������������ � WIN32 SDK.

WORD Subsystem

��� ����������, ������� ������ ����������� ���� ���������� ��� ������ ����������������� ����������. WINNT.H ���������� ��������� ��������:

NATIVE == 1 ���������� �� ��������� (��������, ��� �������� ����������) 
WINDOWS_GUI = 2 ����������� � ���������� Windows GUI 
WINDOWS_CUI = 3 ����������� � ���������� Windows character (������������ ����������) 
OS2_CUI = 5 ����������� � ���������� OS/2 (������ ���������� OS/2 1.x) 
POSIX_CUI = 7   ����������� � ���������� Posix

WORD DllCharacteristics (��������� ��� �������� �� ������������ � NT 3.5)

����� ������, ������������, ��� ����� ��������������� ����� ���������� ������� ������������� DLL (��������, DllMain()). ��� ��������, ��-��������, ������ ������ ��������������� � ����, ������ ������������ ������� �������� ������� ������������� DLL ��� ���� ������� �������. ���������� ��������� ��������:

1 � �����, ����� DLL ������� ��������� � �������� ������������ ��������
2 � �����, ����� ������� ����������� ������ 
4 � �����, ����� ������� �������� ������ 
8 � ����� ��� ������ �� DLL

DWORD SizeOfStackReserve

����� ����������� ������, ������������� ��� ��������� ���� �������. ������ �� ��� ��� ������ ���������� (��. ��������� ����). �� ��������� ��� ���� ��������������� � 0�100000 (1 �����). ���� ������������ ��������� 0 � �������� ������� ����� � CreateThread(), ������������ ������� ����� ����� ���� ���� �� �������.

DWORD SizeQfStackCommit

���������� ������, ���������� ���������� ��� �������� ���� �������. ��� ���� �� ��������� ����� 0�1000 ���� (1 ��������) ��� ������������� Microsoft, ����� ��� TLINK32 ������ ��� ������ 0�2000 (2 ��������).

DWORD SizeOfHeapReserve

����� ����������� ������, ������������� ��� ����������� ���� ���������. ���� ���������� ���� ����� ��������, ������ GetProcessHeapO. ������ �� ��� ��� ������ ���������� (��. ��������� ����).

DWORD SizeOfHeapCommit

����� ����������� ������, ���������� ���������� ��� ���� ��������. �� ��������� ����������� ������ ��� ���� ������ 0�1000 ����.

DWORD LoaderFlags (��������� ��� �������� �� ������������ � NT 3.5)

��� ������� �� WINNT.H, ��� ����, ��-��������, ������� � ���������� ���������. ��� ������� �� ����������� ������ ����������� ����, � �������� ���� �� ���� �� ���� ����� ��� �������������. ��� ����� ������, ��� � ������� ������������ ������������� ��. ���������� ��������� ��������:

1 � ��������� �� ������� ���������� ����� �������� ��������?
2 � ��������� �� �������� ��������� ����� ��������?

DWORD NumberOfRvaAndShes

���������� ������ � ������� DataDirectory (��. �������� ���������� ����). ����������� ����������� �������� ������ ������ ��� �������� ������ 16.

IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

������ �������� ���� IMAGE_DATA_DIRECTORY. ��������� �������� ������� �������� ��������� RVA � ������� ������ ������ ������������ �����. � ��������� ����� ��������� �������� � ����� ������� �� ������������. ������ ������� ������� � ��� ������ ����� � ������ ���������������� ������� ������� (���� ��� ������������). ������ ������� ������� � ����� � ������ ��������������� ������� ������� � �.�. ��� ���� ����� ������� ������ �������� ����������� ��������� �������, ��. IMAGE_DIRECTORY_ENTRY_xxx ��������� #define � WINNT.H.

���� ������ ������������ ��� ����, ����� ��������� ��� ������ ����� ������������ ������ ����������� (��������, ��������������� ������� �������) ��� ����������������� �������� ���� ������ �����������, ����� ������ ��� �� ���������� �����.

������� ����� ��������� ������� ��������� ��� ������ � ������. ��� �� ����� ������� IMAGE_DIRECTORY_ENTRY_DEBUG ���������� ������ ��������� ����� ������ � ������ .rdata. �� ����� ��������� ����������� �� ����� ������� ����������� � ������� "������ .rdata" � ���� �����.

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

����� ���������� ��-����� � ��������� ������� ��� ������ ����������� ��������� ������� ������. ��� ������� �������� ���������� � ������ ������ �����������. ������ � ����������� ����������� �� �� ���������� ������, � �� � ���������� �������.

� ���������� ������� ���������� ����� ����������, ��� �� ����� ������. � NE-����� ����������� ��� � ������ �������� � ��������� ��������� � �����. ����� ��������� NE-����� ������������ ����� ������ �������� � �� ����� ��� ������� ��������, ������������� ����������. ������ ��������� ������� �������� ���������� �� ����� ��������. �������� ���������� �������� ��� �������� (��������� ��� ������), ��� ������ � ��� ������������, ��� �� �� �� ��������� � �����. � ��-����� ������� ������ ���������� ������� ��������� � NE-�����.

������, � ������� �� ������� ��������� NE-�����, ������� ������ ��-����� �� ������ �������� ��������� ��� ������� ����� ������������ ���� ��� ������. ������ ����� ������ ������� ������� ������ ������ �����, �� �������� �������� ������ ����� ���� ���������� � ������. �������� �� ��, ��� ������ ���������� 32-��������� ���������, ��� �� ����� ���� �� �������� ��������������� ����������. ������ ����� ������ ������ �������� ��������� ������ ������������ ��������� ������������ ��������.

������ �������� ��-������ �� NE-������ �������� ��, ��� ��� ��������� ���������������� �������, ������� ������������ �� ����������, � ������������ ��������. � �������� ���� �������� ����� �������� �������� DLL, ������������ ������������ �������, � ��������������� ������� �������� (fixup). � NE-������ ������� �� ��������� ����������. � ���� ��� ����� ����������� �� ���������, ���������� � �������� �� �������� � ������� ��������� ��������� NE-�����. ������ ����� ������� ������� � ��������� ������� � ����� ��������� NE-�����. ���������� �� ��������������� � ���������������� �������� ���� �� ������������� ��������� ������ ������������ ��������, ��� ������������� � �������� ��������� NE-�����.

������ �������� � ������ ��-�����. ���, ��� ��������� ������ ����������� ����� ��� �������, �������� � ������������ ������. ����� �������, ���������� �� ��������������� �������� �������� � ����� ����������� ������ ��� ��, ��� � ������� �������������� ������� �������. �� �� ����� ����������� � ��� ������ ���������. ����� ��������� ��� ������, ������� ����� ������������ ��������� ��� ������������ �������, �������� ���� ����������� ������.

������ � ����� ������������� ��������� ������, �� ������� ��� ����� ������� ������, � ������� ������� ������������ ������� �������� � ��������. ����� ����� ��������� ��-����� � ������ ������� ������ �� IMAGE_SECTION_HEADER. ���������� ��������� ����� ������� �������� � ��������� ��-����� (���� IMAGE_NT_HEADER.FileHeader.NumberOfSections). ��������� PEDUMP ������� ������� ������, ��� ���� � �������� ������. ���. 8.2 ���������� ����� � ������� PEDUMP ������� ������ ��� ��������� ���-�����. ���. 8.3 ���������� ����� � ������� PEDUMP ������� ������ ��� ��������� OBJ-�����.

01 .text VirtSize:  00005AFA  VirtAddr:      00001000
raw data offs:      00000400  raw data size: 00005C00
relocation offs:    00000000  relocations:   00000000
line # offs:        00009220  line #'s:      0000020C
characteristics:    60000020
  CODE MEM_EXECUTE MEM_READ

02 .bss VirtSize:   00001438  VirtAddr:      00007000
raw data offs:      00000000  raw data size: 00001600
relocation offs:    00000000  relocations:   00000000
line # offs:        00000000  line #'s:      00000000
characteristics:    C0000080
  UNINITIALIZED_DATA MEM_READ MEM_WRITE

03 .rdata VirtSize: 0000015C  VirtAddr:      00009000
raw data offs:      00006000  raw data size: 00000200
relocation offs:    00000000  relocations:   00000000
line # offs:        00000000  line #'s:      00000000
characteristics:    40000040
  INITIALIZED_DATA MEM_READ

04 .data VirtSize:  0000239C  VirtAddr:      0000A000
raw data offs:      00006200  raw data size: 00002400
relocation offs:    00000000  relocations:   00000000
line # offs:        00000000  line #'s:      00000000
characteristics:    C0000048
  INITIALIZED_DATA MEM_READ MEM_WRITE

05 .idata VirtSize: 0000033E  VirtAddr:      0000D000
raw data offs:      00008600  raw data size: 00000400
relocation offs:    00000000  relocations:   00000000
line # offs:        00000000  line #'s:      00000000
characteristics:    C0000040
  INITIALIZED DATA MEN_READ MEM_WRITE

06 .reloc VirtSize: 000006CE  VirtAddr:      0000E000
raw data offs:      00008A00  raw data size: 00000800
relocation offs:    00000000  relocations:   00000000
line # offs:        00000000  line #'s:      00000000
characteristics:    42000040
  INITIALIZED DATA MEM_DISCARDABLE MEM_READ

���. 8.2. �������� ������� ������ ���-�����

01 .drectve PhysAddr: 00000000  VirtAddr:      00000000
raw data offs:        000000DC  raw data size: 00000026
relocation offs:      00000000  relocations:   00000000
line # offs:          00000080  line #'s:      00000000
characteristics:      00100A00
  LNK_INFO LNK_REMOVE

02 .debug$S PhysAddr: 00000026  VirtAddr:      00000000
raw data offs:        00000102  raw data size: 000016D0
relocation offs:      000017D2  relocations:   00000032
line # offs:          00000080  line #'s:      00000000
characteristics:      42100048
  INITIALIZED_DATA MEM_DISCARDABLE MEM_READ

03 .data PhysAddr:    000016F6  VirtAddr:      00000000
raw data offs:        000019C6  raw data size: 00000D87
relocation offs:      0000274P  relocations:   00000045
line # offs:          00000000  line #'s:      00000000
characteristics:      C0480048
  INITIALIZED_DATA MEM_READ MEM_WRITE

04 .text PhysAddr:    0000247D  VirtAddr:      00000000
raw data offs:        000029FF  raw data size: 000010DA
relocation offs:      00003AD9  relocations:   000000E9
line # offs:          000043F3  line #'s:      000000D9
characteristics:      60500020
  CODE MEM_EXECUTE MEM_READ

05 .debug$T PhysAddr: 00003557  VirtAddr:      00000000
raw data offs:        00004909  raw data size: 00000030
relocation offs:      00000008  relocations:   00000000
line # offs:          00000000  line #'s:      00000000
characteristics:      42100048
  INITIALIZED_DATA MEM_DISCARDABLE MEM_READ

���. 8.3 �������� ������� ������ ���������� �����

������ IMAGE_SECTION_HEADER ������������ ����� ������ ���� ������ �� ����� ������ ����� ��� ��� OBJ � ����� ��������� ������.

BYTE Name[IMAGE_SIZEOF_SHORT_NAME]

��� 8-�������� ��� � ��������� ANSI (�� Unicode), ������� ������� ������. ����������� ���� ������ ���������� � ����� (��������, .text), �� ��� �� �����������, ������� ����, � ��� �������� ��� ������� ��������� ��������� �� ��-������. ������������ ����� ������ ����� ����� ����������� ������� � ������� ���� ���������� ��������� � ����������, ���� � ������� �������� #pragma data_seg � #pragma code_seg ����������� Microsoft C/C++. (������������ Borland C++ ������ ������������ #pragma codeseg.) ���������� ��������, ���, ���� ��� ������ �������� 8 ������ ������, ����������� ����������� ���� NULL. (��������� TDUMP � Borland C++ 4.Ox �������� �� ���� ��� �������������� � �������� ����������� ����� �� ��������� �� ���-������.) ���� �� ����������� printf(), �� ������ ������������ "%.8s", ����� �� ���������� ������-��� � ������ ����� ��� ���������� �� ������� ������.

union {
DWORD    PhysicalAddress 
DWORD    VirtualSize 
} Misc;

��� ���� ����� ��������� ���������� � ����������� �� ����, ����������� �� ��� � ���- ��� OBJ-�����. � ���-����� ��� �������� ����������� ������ ������ ������������ ���� ��� ������. ��� ������ �� ���������� �� ��������� ������� ������� �����. ���� SizeOfRawData ������ � ���� ��������� �������� ��� ����������� ��������. ���������, ��� Borland TLINK32 ������ ������� �������� ����� ���� � ���� SizeOfRawData �, ��� �� �����, �������� ���������� �������������. � ������ OBJ-������ ��� ���� ��������� ���������� ����� ������. ������ ������ ���������� � ������ 0. ����� �������� ���������� ����� ��������� ������, ���� ��������� �������� � SizeOfRawData � ����������� ������ ������ ������.

DWORD VirtualAddress

� ������ ���-������ ��� ���� �������� RVA, ���� ��������� ������ ���������� ������. ����� ��������� �������� ��������� ����� ������ ������ � ������, ���������� � ������������ ������ ������, ������������� � ���� ����, ��������� ������� ����� �����������. �������� Microsoft ������������� �� ��������� RVA ������ ������ ������ 0�1000. ��� ��������� ������ ��� ���� �� ����� �������� ������ � ��������������� � 0.

DWORD SizeOfRawData

� ���-������ ��� ���� �������� ������ ������, ����������� �� ��������� ������� ������� ������� �����. ��������, ��������, ��� ������ ������������ ����� 0�200. ���� ���� VirtualSize ���������, ��� ����� ������ ��35� ����, �� � ������ ���� ����� �������, ��� ������ ������ 0�400 ����. ��� OBJ-������ ��� ���� �������� ������ ������ ������, ��������������� ������������ ��� �����������. ������� �������, ��� OBJ-������ ��� ������������ ���� VirtualSize � ���-������.

DWORD PointerToRawData

��� �������� �������� �������, ��� ��������� �������� ������ ��� ������. ���� ������������ ��� ���������� � ������ ��- ��� COFF-���� (������ ����, ����� �������� �������� ������������ �������), ��� ���� ������, ��� ���� VirtualAddress. �������� �������� ��, ��� � ���� ������ ��������� ��������� �������� ����������� ����� �����, ��� ��� ������ ��� ������ ����� ���������� �� ����� ��������, � �� �� RVA, ���������� � ���� VirtualAddress.

DWORD PointerToRelocations

� ��������� ������ ��� �������� �������� ���������� � ��������� ��� ������ ������. ���������� � ��������� � ����� ������ ���������� ����� ������� �� ��������� ������� ��� ���� ������. � ���-������ ��� (� ���������) ���� �� ����� ��������� �������� � ��������������� � ����. ����� ����������� ������� ���-����, �� ��������� ����������� ��������, � �� ����� �������� �������� ��������� ������ ������� �������� �������� � ��������������� �������. ���������� � ������� ��������� � ��������������� �������� �������� � ������� ������� �������� � ��������������� �������, ��� ��� ��� ������������� � ���-����� �������� ������ �������� ��� ������ ������ ����� �������� ������ ������.

DWORD PointerToLinenumbers

�������� �������� ������� ������� �����. ������� ������� ����� ������ � ������������ ������ ����� ��������� ����� �������, �� ������� ����� ����� ���, ��������������� ��� ������ ������. � ����������� ���������� ��������, ����� ��� ������ CodeView, ���������� � ������� ����� �������� ��� ����� ���������� ���������. � ���������� ������� COFF, ������, ���������� � ������� ����� ������������� ������� �� ���������� � ���������� ������/�����. ������ ������ ������ � ����������� ����� (��������, .text ��� CODE) ����� ������ �����. � ���-������ ������ ����� ������� � ����� ����� ����� �������� ������ ��� ������. � ��������� ������ ������� ������� ����� ��� ������ ������� �� ��������� ������� ������ � �������� ����������� ��� ���� ������. � ������������ ������ ������ ������� ����� �����, � ������� "���������� COFF-���������".

WORD NumberOfRelocations

���������� ����������� � ������� �������� ��� ������ ������ (���� PointerToRelocations ��������� ����). ��� ���� ������������, ��-��������, ������ � ��������� ������.

WORD NumberOfLinenumbers

���������� ������� ����� � ������� ������� ����� ��� ������ ������ (���� PointerToLinenumbers ��������� ����).

DWORD Characteristics

��, ��� ������� ����� ������������� �������� ������� (flags), ������ COFF/PE �������� ���������������� (characteristics). ��� ���� ������������ ����� ����� ������, ������� ��������� �� �������� ������ (���������/������, ������������ ��� ������, ������������ ��� ������ � �.�.). �� ������ �������� ���� ��������� ��������� ������ ����������� � IMAGE_SCN_XXX_XXX defines � ����� ��������� WINNT.H. ��������� �� ����� ������ ������ ��������� � ����. 8.1.

���� �������������
0�00000020 ��� ������ �������� ����������� ���. ��� �������, ��������������� ������ � ������ (0�80000000)
0�00000040 ������ ������ �������� ������������������ ������. ����� ��� ���� ������, ����� ����������� � .bss ������, ���� ���� ����������
0�00000080 ������ ������ �������� �������������������� ������ (��������, .bss ������)
0�00000200 ������ ������ �������� ����������� ��� �����-������ ������ ��� ����������. �������� ������������� ����� ������ � ��� ������ .drectve, ����������� ������������ � ���������� ������� ��� ������������
0�00000800 ���������� ������ ������ �� ������ ���� �������� � �������� ���-����. ����� ������ ������������ ������������/����������� ��� �������� ���������� ������������
0�02000000 ������ ������ ����� ���������, ��� ��� ��� �� ������������ ����������, ����� ���� ��� ��������� ���������. ���� ����� ����������� ������������� ������ � ��� ������ ������� �������� (.reloc)
0�10000000 ������ ������ �������� ��������� ������������. ��� ������������� � DLL ������ � ����� ������ ������������ ��������� ����� ����������, ������������� ��� DLL. �� ��������� ������ ������ �� �������� ��������� �������������, �.�. ������ �������, ������������ DLL, ����� ���� ����������� ��������� ����� ����� ������ ������. ������ ����� ����������� ������, ��������� ������������ ������ ���� �������� ��������� ������ ������������� ����������� ������� ��� ���� ������ ���, ��� ��� ��������, ������������ DLL, ��������� �� ���� � �� �� ���������� �������� � ������. ����� ������� ������ ��������� ������������, ���������� ������� SHARED �� ����� ����������. ��������: LINK/SECTION:MYDATA,RWS... ��������� ������������, ��� ������ � ��������� MYDATA ������ ���� ��������� ��� ������, ������ � ��������� ������������. �� ��������� �������� ������ DLL Borland C++ ����� �������� ����������� �������������
0�20000000 ������ ������ �������� �����������. ���� ���� ������ ��������������� ������ ���, ����� ��������������� ���� "���������" (Contains Code) (0�00000020)
0�40000000 ������ ������ ������������� ��� ������. ���� ���� ����� ������ ���������� ��� ������ ���-������
0�80000000 ������ ������ ������������� ��� ������. ���� ���� ���� �� ���������� � ������ ���-�����, ��������� ������ �������� ������������ � ������ �������� ��� ��������������� ������ ��� ������ ��� ������ ��� ����������. �������� ������ � ���� ��������� � ��� .data � .bss

������� 8.1. ����� COFF-������

��������� ��������, ���� �� ������� � ����������, ���������� � ������ ������. ��-������, ������� �������� �������� �� ���������� ����� ��������� PRELOAD. �������� ������ NE ��������� ������������ ���������� �������� PRELOAD ��� ���������, ������� ������ ���� ��������� ����� �� ����� �������� ������. �������� ������ OS/2 2.0 LX ����� ����� �������, ��� ��������� ������������ ������ �������� � ���, ��� �������������� ������ ���� ��������� �� ������ �������. ��-������, ��������, �� ����� ������ ���������. ������ �� �����, ���������� ���������, ��� Microsoft ��������� ������� � ������������ ���������� �������� ������� ��� ����� ���������� Win32.

� ��-������� ����� ����������� ������� ������ ������������� �������. ���������� IMAGE_SECTION_HEADER � �������� ������� OS/2 LX �� ��������� ���������������, ��� ��������� � ����� ������ � ����������� ��� ������. ������ ����� ���� ������� OS/2 LX �������� ������� ������ �������, ������������ �������� � ������������ � ����� ������������ ���������� ������� ������ ������. ��-������ ��������� ��� ����� ����� � �����������, ��� ������ �� ������ ����� ��������� ���������� � �����. ��������� ��� �������, ����� �������, ��� LX-����� ����� �����, ����� ��� ����� �� ������� ����� � ������. ���� ���� ��������� �������� ��������� ������ � �������������� ��� ����� ��������, � ���� ����� ���������� �� ���!

������ ������������� �������� ��-������� �� ����� ������� NE-������� �������� ��, ��� ������������ ��������� �������� � ���� ������� �������� ���� DWORD. � NE-������� ������������ ����������� ������ �������� ��������� � ���� �������� �������. ����� ��������� �������������� �������� ��������, ����� ���� ������� ����� ������ ������������ � ��������� NE-����� � ��������� ��� � ������ ������� (������ 16 ��� 512 ����). ����� ����� ���� �������� ������ ������� �� ��������� �������� �������, ����� �������� �������������� �������� ��������. ���� ���-������ �� ����������� �� �������� � ���� ���������� �������� � NE-�����, ���, ��������, �������� ��� �������� ������������ ��������� NE-�����. ����� ����, ��� ��������� NE-����� �� ��������� � ������ �����, ������������ ���������� ���������� � ���� ��������� �������� �������� ��������� NE-�����. � ����������������� ����� ��-����� ���������� ��������� ��������� ���������, ��������� ������� �������� ������������ ���� ���������, � ������� ���� ��� ��������� � ������. � �����, � �� ����������� ����� ��������, ��� � ��������� NE, LX ��� LE (��� �������, ��� ����� ������������ ������������ � ������ �����).

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

����� ���� ��� �������� ������� ����� ������������� � ���, ��� ����� ������ � ��� ������ �����������, ����� ������� � ����� ��������� �������� ������, ����� ������������� � ���- � ��������� ������. � ���� ���� �������� �� � ���� ������ ������ ������� �������������, ��, ��� �� �����, �������� ������, � �������� ������������ ������������ ��������� (���� ���� �� �� ���� � �� �����������). ������ ������������ � ������� �������� � � ������������ � ��������� �������� �� ���������.

������ .text

� ���� ������ ������ ���� ����������� ��� ������ ����������, ������������ ������������ ��� �����������. ��������� ��-����� �������� � 32-��������� ������ � �� ��������� � 16-��������� ���������, ��� ������������� ��������� ����������� ��� �� ������ �������� ������ �� ������ �������. ������ ����� ����������� ���������� ��� ������ .text �� ��������� ��������� ������ � ���� ������� ������ .text � ���-�����. ���������� Borland C++ �������� ���� ����������� ��� � ������� � ��������� CODE. ����� �������, ��-�����, ��������� � ������� Borland C++, ����� ������ � ��������� CODE ������ ������ .text. (��. � ���� ����� ������ "������ CODE � .icode Borland" ��� ��������� �������.)

� ��� �������, ��������� �������������� ����������� ��� � ������ .text, ������ ����, ������� � ������ ������������ ��� ����������� �� ��������� ��������� ���������� ���������. � ��-�����, � ������ ������ ������� �� ������� ������ (��������, GetMessage() �� USER32.DLL), ���������� CALL, ��������������� ������������, �� �������� ���������� ��������������� ������ ������� � DLL. ������ ����� ���������� CALL �������� ���������� ������� JMP DWORD PTR[XXXXXXXX], ����� ����������� � ������ .text. ������� JMP ������������� � ������, ����������� � ������� ����� � ������ .idata. ��� ������� ����� � ������ .idata �������� ��������� ����� ����� ����� ������� ������������ �������, ��� �������� �� ���. 8.4.

����� ��������� ����������� � �����, ������ ������ DLL ����������� ����� �������. ������ ��� ������ ������ ������� DLL � ���� �����, ��������� �� ����� "������" ������ ����������, ���������� DLL. ���, ��� �������� ����������, ��� ��������� ���������� ����� ������� ������� � ������� ����� � ������ .idata. �� ����� "������" ������� ���������� CALL. ��� ������������ ������� ������� �� �������� � NE-�������, � ������� ������ ������� �������� �������� ��������, ������� ������ ����������� � ��������. ���� �����-������ ������� �������� ������ ������� �� DLL 20 ���, ���������� ����� ����� 20 ��� ���������� ����� ������� � ���� �������. ����������� ��-������ �������� ��, ��� ������������ �� ����� ���������������� ���������� �������� ������� ������� DLL. ��������, ������������ ����� ��������, ��� ����� �����:

FARPROC pfnGetMessage = GetMessage;

�������� ����� GetMessage � ���������� pfnGetMessage. � Win 16 ��� ���������, � � Win32 � ���. � Win32 ���������� pfnGetMessage � ����� ����� ��������� ����� ����������� JMP DWORD PTR [��������] � ������ .text, � ������� ���� ��������� ������. ���� �� ������������ ������� ������� ����� � ������� ��������� �������, �� ��� ��������� �� ���, ��� ������������ � ������. ���� �� ��������, ������, ��������� ����� � ������ GetMessage(), ��� ��� �� ������� (���� �� �� ��������� �������������� ������, ����������� �� "����������" .idata ��������������). � ������� � ���������� ���� ���� ����� � ������� "������ ��-������".


���. 8.4. ����� ������������� ������� �� ��-�����

����� ���� ��� � ������� ��������� ������� ���� �����, �������� Visual C++ 2.0; ��� ������ ��������� ������� � ������ ��������������� �������. ���� ��������� � ��������� ����� ���������� �� Visual C++ 2.0 (��������, WINBASE.H), ����� ���������� ������� �� ���������� Visual C++ 1.0. � Visual C++ 2.0 ��������� ������� ������������ ������� � ��������� DLL �������� __declspec(dllimport) ��� ����� �� �����������. ���������, ��� __declspec(dllimport) ����� �������� �������� ��� ������ ��������������� �������. ����� ������������ �������� ��������������� �������, ����������������� � ������� __declspec(dllimport), ���������� �� ������� ����� ���������� JMP DWORD PTR[XXXXXXXX] ���-������ ��� � ������. ������ ����� ���������� ���������� ����� ������� � ���� CALL DWORD PTR[XXXXXXXX]. ����� [��������] ��������� � ������ .idata. ��� ��� �� ����� �����, ������� ��� �� �����������, ���� �� ������������� ��� ������ �������� JMP DWORD PTR[XXXXXXXX]. ��������� � ����, ��� ������ Borland C++, ������ �� 4.5, �� ����� ����� ��������.

������ Borland CODE � .icode

���������� � ����������� Borland C++ �� �������� � COFF-�������� ��������� ������. ������ ����� Borland ��������� �������������� 32-��������� ������ ������� Intel OMF. ���� Borland ��� �� ��������� ���������� ������������ �������� � ������ .text, ��� ����� ��������� CODE � �������� ����� �������� �� ���������. ����� ���������� ��� ������ � ��-�����, ����������� Borland (TLINK32.EXE) ��������� ��� �������� �� ���������� ����� � �������� ��� �� 8 �������� (� ������ �������������). ��-�� ����� ��-����� Borland C++ ����� ������ CODE, � �� ������ .text.

������� � ������ ������, �������, �� �������� �������, � ���������� ����� ������ ������� � ���, ��� Borland ��-����� ����������� � ������� ��������. ��� ���� ������� ������, ��� ���������� ������ .text, ��� ������ ��������� ������ ���� ����� ���������� JMP DWORD PTR [��������]. � ������� Microsoft ���� ���������� �������� � ���-���� �� ������ .text ������������� ����������. �������� ��������� ������� ������������� ���������� (� ����������), ����� ������������ ������������ ������� DLL. � ���������� ����������� �� ������ "�����", ��� ��������� ��� ����������� ������. ���������� ������� � ��� � ���������������� ������ ��������� ���������� ������������ ���� � ������ ��� ���������� � ��-����.

������� ������������ � ���������������� ��������� Borland ���� � ������������ ������ ��������� ��������, ������� ����������� ��� 16-��������� NE-������. ���������� �������, ������������ ������������� Borland, � ���������������� ������������ �������� ���� ������� � DLL, � ������� ��� ���������. ����� �������, TLINK32 �������� �� ����������� ����, ����� �������� ������������� ��� ������� DLL, � �� ��������� ���������������� ����������� JMP DWORD PTR[XXXXXXXX]. � Borland C++ 4.0 TLINK32 ������ �����������, ������� �� �������, � ������ � ������ .icode. � Borland C++ 4.02 TLINK32 �������, ����� ������� ��� ����������� JMP DWORD PTR[XXXXXXXX] � ������ CODE.

������ .data

��� �� ��������� ����������� ��� �������� � ������ .text, ��� � ������������������ ������ �������� � ������ .data. ������������������ ������ ������� �� ��� ���������� � ����������� ����������, ������� ���� ������������������� �� ����� ����������. ��� ����� �������� ��������� �������� (��������, ������ "Hello World" � ��������� C/C++). ����������� ���������� ��� ������ .data �� ������ ��������� � LIB-������ � ���� ������ .data � ���-�����. ��������� ���������� ����������� � ����� ������� � �� �������� ����� � ������� .data � .bss.

������ DATA

Borland C++ ���������� �� ��������� ��� DATA ��� ������ ������. ��� ������������ ������ .data � ����������� Microsoft (��. ���������� ����� "������ .data").

C����� .bss

� ������ .bss �������� �������������������� ����������� � ���������� ����������. ����������� ���������� ��� ������ .bss �� ������ ��������� � LIB-������ � ���� ������ .bss � ���-�����. � ������� ������ ���� RawDataOffset ��� ������ .bss ��������������� � 0, ���������, ��� ��� ������ �� �������� �������� ����� � �����. TLINK32 �� ������� ������ .bss. ������ ����� �� ��������� ����������� ������ ������ DATA ���, ����� �������� �������������������� ������.

������ .CRT

��� ���� ������ ��� ������������������ ������, ������������ ������������ ��������� ���������� ��������� Microsoft C/C++ (������ � �������� .CRT � C/C++ runtime libraries). ������ �� ���� ������ ������������ ��� ����� �����, ��� ����� ������������� ����������� ������� C++ ����� ������� main ��� WinMain.

������ .rsrc

������ .rsrc �������� ������� ������. �� ������ ������� �������� NT �������� .RES-���� 16-���������� RC.EXE ���� ������, ������� �� ������������� ������������� Microsoft. ��������� CVTRES ���������� ��� .RES-����� � ��������� ����� COFF-�������, ������� ������ �������� � ������ .rsrc ������ ���������� �����. ����� ����� ����������� ��� ������������� ��������� ���� �������� ��� ��� ���� ��������� ���� ��� ����������, ��� ��������� ������������ �� ������� �� ���-���� ��������� � ��������. ����� ����������� ������������ Microsoft ��������� ���������� ������������ ����� .RES ���������������. � �������� � ������� ������ �������� ����� � ���� �����, � ������� "������� ��-������".

������ .idata

������ .idata �������� ���������� � �������� (� ������), ������� ������ ����������� �� ������ DLL. ��� ������ ������������ ���������� ������� ������ � NE-�����. �������� ������� ������� � ���, ��� ������ �������, ������������� ��-������, ����������� � ���� ������. ����� �������� ������������� ���������� � NE-�����, ������������ �������� �� ������ � ��������� � ����� �������� ������ ��� ������� �� ���������. � �������� ����� �������� � ������� ������� ������� ����� � ���� �����, � ������� "������ ��-������".

������ .edata

������ .edata ������������ �������� ������� � ������, ������� ��-���� ������������ ��� ������������� ������� ��������. �� ���������� ��� NE-����� � ��� ���������� ������� �����, ������� ����������� ���� � ������� ������������� ����. � ������� �� Win 16, ����� ����� ��������� ������������� �������������� ���-���� �� ���-������, ��� ��� ������ ������ .edata ����� ������� ������ � DLL. ����������� �������� ���-�����, ��������� Borland C++, �������, ��-��������, ������ ������������ ������� (_GetExceptDLLinfo) ��� ����������� ������������� ����������� ��������� ���������� ���������.

������ ������� �������� ����������� ����� � ������� "������� ��-������" � ���� �����. ��� ������������� ������� Microsoft ������ �� ������ .edata �������� � ��-���� ����� ���� .���. ������� �������, ����������� �� ������� ��� ���������� ���. ������ ����� �� ���������� �� ��������� ��������� (LIB32), ������������ OBJ-����� � ���������� ���� .���, ������� ����������� ��������� � ���� �������� ������� ��� ����������. ��, ������ ���! ��� ����������� ����� .��� � � ���������������� ����� ���� OBJ-����� � ������ �����������. ��������� ��������� PEDUMP (������������ ����� � ���� �����) � ������ /S (�������� ������� ��������), ����� ������� �������, �������������� ����� ����� .���.

������ .reloc

������ .reloc �������� ������� ������� �������� (base relocation). ������� �������� � ��� ��������� �� ��������� � ���������� ��� �������� ������������������ ����������; ���-����� ��� DLL ��������� � ����� ��������, ���� ��������� �� ����� ��������� ���� �� ������, ������� ������������� �������������. ���� ���������� ������� ��������� ����������� �� ���������� ������������� �������� ������, ��������� ���������� ����������� ���������� � ���� ������.

���� ��� ������� �������� ������� � �� ���������, ��� ��������� ������ ������ ��������� ����������� �� ���������� ������������� �������� ������, ����������� ���� /FIXED, ����� ����������� ������ ��� ����������. ���� ��� � ��������� ����� � ����������� �����, ������ ��� �� ����� ������� ������ ���� ������������ �� ������ ���������� Win32. �����, ��������, �� ������� ���-���� ��� NT � ����������� ��� �� ������ 0�10000. ���� �� ���� �������� ������������ ������� ��������, ������ ���-���� �� ����� �������� � Windows 95, ��� ��� ��� ����� 0�10000 �� �������� (���������� ����� �������� � Windows 95 � 0�400000, �.�. 4 �����).

���������� ��������, ��� ���������� JMP � CALL, ������������ ������������, ���������� �������� ������������ ���� ����������, � �� �������������� �������� � 32-��������� ��������. ���� ����������� ���������� ��������� �� �������� ������, ��������� �� ���������� �������������, �� ����� �������� ��� ����������, ��������� ��� ���������� ������������� ���������. � ���������� �������� �� ��� �����, ��� ����� �� ����������. �������� ������ ��������� ������ ��� ����������, ������������ 32-��������� �������� ��� ������. ��������, ������� ��������� ���������� ���������� ����������:

int i;
int *ptr = &i;

���� ����������� ������ � �������� �������� ������ ����������� 0�10000, ����� ���������� i ����� � ����� ��������� ���-������ ��������� 0�12004. � ������, ������������ ��� ��������� ptr, ����������� �������� �������� 0�12004, ��������� ��� ����� ���������� i. ���� ��������� ����� (�� �����-���� ��������) ��������� ���� �� �������� ������ 0�70000, ������� ���������� i ����� � ����� ������ 0�72004. ������ �������� ���������� ptr ����� �������������� ������ ����� ������������, ��� ��� / ������ ��������� �� 0�60000 ���� ���� � ������.

��� �����-�� ����������� ���������� � �������� � ����. ������ .reloc � ��� �������� �����������, �.�. ���� � �����������, � ������� ���������� ��������� � ���� �������� ����� �������� ������������� ������� �������� � �������� ������� ��������. � �������� ��������� � ��������� � ������� "������� �������� ��-������".

������ .tls

����� ������������ ��������� ����������� "__declspec(thread)", ������������ ������ �� �������� �� � ������ .data, �� � ������ .bss. ������ ����� �� ����� � ����� ����������� � ������ .tls. ��� ������ .tls ���������� �� thread local storage (��������� ������ ������). ��� ������ ������� � ���������� ������� TlsAlloc().

��������� ������ ������ ����� ����������� ��� ��������� ����� ���������� ���������� ��� ������� ������. ��� ��������, ��� ������ ����� ����� ����� ���� ����� ������� ����������� ������, ������ ����������� ��� ���������� ��� ������, ��������������� � ����, ����� ����� �����������. ���������� ���������, ������� ��������� �������, ������� �������� ��� ����� � ��� �� �������, �.�. ��������� ���� � ��� �� ����������� ���. ���� ������������ ������� ���������� ���������� �������� ������, ��������:

__declspec(thread) int i = 0; //��� ���������� ���������� ����������.

�� ������ ����� ����� ����� ���� ����������� ����� ���������� i.

����� �������� ����� ������ �� ������������� ��������� ������ ������ �� ����� ���������� ��������� � ������� ������� TlsAlloc, TlsSetValue � TlsGetValue. (� ����� 3 �������� ���������� � �������� TlsXXX.) � ����������� ������� ������� ����� ��������� ������ � ��������� � ������� __declspec (thread), ��� ������������ ������ ��� ������ � ���������� ��������� �� ��� � �����, ���������� �������� TlsAlloc().

���������� ��������� �� ����� ������������� ������� ������ .tls � ���������� __declspec (thread). � NT � Windows 95 �������� ���������� �������� ������ �� ����� �������� ��� DLL, ���� ��� DLL ��������� ����������� � ������� LoadLibrary(). ��� ��� ��� ������ ����������� DLL ��� ����� �������� ���������. ���� ��� ����������� ���� ������������ DLL, � ��� ������ ���������� ��� ��������� ������, �� �������� �� ������������ ����������� � ������� TlsAlloc() � TlsGetValue(). ���������� ��������, ��� �� ����� ���� ����� ������ ��� ������ �� �������� � ������ .tls �� ����� ���������� ���������. ������� �������, ���������� ������, �������� ������ �� �������� ���������� �������� ������, ������������ � ������ .tls ������. ������ ����� ������ .tls ������������ ������ ������, ������������ ��� ������������� ��������� ������ ������ ��� ������. ������������� �������� ������ ��� ������ ������������ ����������� �������� ������������ ������� � ��������� ��������� ���������� ���������. ��� ������� �������������� ������ � �������� TLS, ����������� � ������ .rdata.

������ .rdata

������ .rdata �����, ��� �������, ������ ��������������. ��-������, � ���-������, ��������� � ������� ������������ Microsoft Link, ������ .rdata �������� ������� ������� (� ��������� ������ ������ �������� ���). � ���-������, ��������� � ������� ������������ TLINK32, ������� ������� ��������� � ������ .debug. ������� ������� ������������ ������ �������� IMAGE_DEBUG_DIRECTORY. ��� ��������� �������� ���������� � ����, ������� � ��������������� ��������� ����� ���������� ����������, ������������ � �����. ���� ��� ������� ���� ���������� ����������: CodeView, COFF � FPO. �� ���. 8.5 ������� ����� ��������� �������� ������� � ������� ��������� PEDUMP.

Type       Size      Address   FilePtr   Charactr  TimeData  Version
--------------------------------------------------------------------
COFF       000065C5  00000000  00009200  00000000  2CF8CF3D  0.00
(unknown)  00000114  00000000  0000F7C8  00000000  2CFSCF3D  0.00
FPO        000004B0  00000000  0000F8DC  00000000  2CF8CF3D  0.00
CODEVIEW   0000B0B4  00000000  0000FD8C  00000000  2CFBCF3D  0.00

���. 8.5. �������� ������� �������

������� ������� �� ����������� ������ ���������� � ������ ������ .rdata. ��� ���� ����� ���������� ������ �������� �������, ������� ������������ RVA, ������������ � ������� ������ (IMAGE_DIRECTORY_ENTRY_DEBUG) �������� ������. (������� ������ ��������� � ����� ��������� ��-�����.) ����� ���������� ���������� ������ � �������� ������� ��� ������������ Microsoft, ����� ��������� ������ ����� �������� (��������� � ���� ������� � ��������� ���� ������ �������� ������) �� ������ ��������� IMAGE_DEBUG_DIRECTORY. � ������ �� ������������ TLINK32 ��������������� ���� ������� ��� �������� ���������� ����� �������� �������, � �� ����� ����� � ������. ��������� PEDUMP ������������ ��� ��������.

������ ������ ������ ������ .rdata �������� ������ ��������. ���� ������������ ���������� ������� DESCRIPTION � ����� .DEF � ����� ���������, �� � ������ .rdata ���������� ������ ��������. � NE-������� ������ �������� ������ �������� ������ ������� ������������� ������� ����. ������ �������� ������������� ��� �������� ��������� ������, ������������ ����. � ���������, � �� ��������� �������� ������� ����� ��. � �������� ��-�����, � ������� ������ �������� ���������� ����� �������� �������, � �����, � ������� ��� ���� ����� ������� �������. ��� ���������� �� ���� ���������������� ����� ���������� ������ �������� (���� ����� ���� � ����������� ����, ������� �� ��� ������).

����� ����, ������ .rdata ������������ ��� GUID ��� OLE-����������������. ���������� ������� UUID.LIB �������� ����� 16-��������� GUID, ������������ � ������� ID-�����������. ��� GUID � ����� ����������� � ������ .rdata ���-����� ��� DLL.

��������� ���������� ������ .rdata, � ������� ��� ��������,� ��� ����� ��� �������� �������� TLS (ThreadLocalStorage � ��������� ������ �������). ������� TLS � ��� ����������� ��������� ������, ������������ ����������� ��������� ���������� ��������� ��� ������ ����������� ��������� ������ ������� ��� ����������, ����������� � ���������. ������ �������� TLS ����� ����� �� CD-ROM MSDN (Microsoft Developer Network) � ������������ Portable Executable and Common Object File Format. ���������� ������� � �������� TLS ������������ ��������� ������ � ����� ����� ������, ������������ ��� ������������� ������� ����� ��������� ������ �������. RVA �������� TLS ��������� � �������� IMAGE_DIRECTORY_ENTRY_TLS � �������� ������ ��������� ��-�����. �������� ������, ������������ ��� ������������� ������ TLS, ����� ����� � ������ .tis (������� ����).

������ .debug$S � .debug$T

������ .debug$S � .debug$T ���� ������ � COFF-��������� ������; � ��� �������� ���������� � �������� CodeView � �� �����. �������� ���� ������ ��������� �� �������� ���������, ������������ ��� ���� ���� ����������� ������������� Microsoft ($$SYMBOLS � $$TYPES). ������������ ���������� ������ .debug$T � ������� ���� � ����� .PDB, ����������� ���������� CodeView � ����� ��� ���� ��������� ������ �������. ���������� CodeView ��� ������������ ���-����� ����������� �������� � ���� .PDB.

������ .drective

��� ������ ���� ������ � ��������� ������. ��� �������� ����� ������ ��� ������������. ��������, ��������� ������ ���������� � ������ .drective � ����� ��������� �����, ������� � ������������ � ������� ����������� Microsoft Visual C++:

-defaultlib:LIBC -defaultlib:OLDNAMES.

��� ������������� � ��������� __declspec(export) ���������� ������ ������������ ���������� ��������� ������ � ������ .drectve (��������, exportMyFunction).

������, ���������� ������ $ (��� LIB � ��������� ������)

� ��������� ������ ������, ���������� $ (��������, .idata$2) �������������� ������������� ��-�������. ����������� ���������� ��� ������, ������� ���������� ������� � ����� ����� �������� $. ������ ������������ ������ ��������� ��, ��� ��������� ����� �������� $. ����� �������, ���� ����������� ��������� ������ � ������� .idata$2 � ,idata$6, �� ���������� �� � ���� ������ � ������ .idata.

������������ ������������ ������ ���������� � ������������ � ��������� ����� $. ����������� ��������� ����������� �������, ��� ��� ������ .idata$2 ����� ���� ����� ������� .idata$6, � ������ .data$A � ����� ������� .data$B.

��� ���� �� ������������ ������ $? ���� ����� �� ������������ ������������ �������, ������� � ������� .idata$x ������ ��������� ������ ��������� ������ .idata. ��� ���������� ���������. ����������� �� ������ ��������� ������ .idata � ����. ������ ����� �������� ������ .idata ��������� �� ������ ��������� ��� LIB-������, ������� ����������� ������������� ��� ����� ������ ������, ���������� ����������.

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

������� � ���������� PEDUMP, � ����� �� ������� �������� � ������ ������. ��������, Windows 95 GDI32.DLL �������� ������ ������ ��� ��������� _GPFIX, ���������� ������� ���������������� ������� � ���������� ������ GP.

������ ����� ������� ������� ����. �� ����������� �������������� ������������� ������ ����������� ������, ������������ ������������ ��� �����������. ���� ��� ���������� ��������� ������, �� ������� ������������ ��. ��� ������ � ������������ Microsoft C/C++ ����������� #pragma code_seg � #pragma data_seg. ������������ ����������� Borland ����� ������������ #pragma codeseg � #pragma dataseg. � ���������� ����� ������ ������� 32-��������� ������� � ������, �������� �� ���� ����������� ������. ����������� TLINK32 ���������� �������� ������������ ���� ������ ������, ��� ��� ������� ���� ����������� ������� �������� ������������ ���� ���� ���������� ��� ������, ���� ��������� �������� ��������� ������������ ����. ������ ����: ��������� ����� ������ ����� ��������� ������ ��������� �� ���������� � ���������� ����������� ��-�����.

�������������� � ��-������

������ � ��������, ����� ������� ������ ������� �� ������� DLL �� ���������� � ���� DLL ���������������. ������ ����� ���������� CALL �������� ���������� ���������� JMP DWORD PTR[XXXXXXXX] ���-�� � ������ .text ������������ ����� (��� � ������ .icode, ���� ������������ Borland C++ 4.0). ���� ������������ _declspec(dllimport) � Visual C++, ����� ������� ��������� ��� CALL DWORD PTR[XXXXXXXX]. � ����� ������� �����, ������� ���� ���������� JMP ��� CALL, �������� � ������ .idata. ���������� JMP ��� CALL �������� ���������� �� ����� ������, ����������� �������������� ������� ����. ���� �� �� ��� ������, ��������� � ���. 8.4.

����� ��������� � ������ ����������, ���������� � ������ .idata ��-�����, �������� ����������, ����������� ��� ����, ����� ��������� ��� ���������� ������ ������� ������� � ������������ �� � ����������� ������������ �����. ����� �������� ������ .idata �������� ��������� �������, ������������� ���-������ ��� DLL. ��������, ��� ��� ������� � ���������, ����������� � ���� �������, ���������� � ������ .idata.

������ .idata (��� ������� �������, ��� ��� ������ �������� �� ��������) ���������� � �������, ���������� �� IMAGE_IMPORT_DESCRIPTOR. ������ ������� (IMAGE_IMPORT_DESCRIPTOR) ������������� ����� �� DLL, � ������� ������ ������ ������ ��-����. ���������� ��������� � ������� ����� �� �����������. ������ ����� ��������� ��������� ������� IMAGE_IMPORT_DESCRIPTOR ����� ����, ���������� NULL. ��������� IMAGEJMPORT_DESCRIPTOR ����� ��������� ������.

DWORD Characteristics/OriginalFirstThunk

� ���� ���� ���������� �������� (RVA) ������� ������� ����. ������ �� ���� ������� ���� � ���������������� �������� ������������ IMAGE_THUNK_DATA. ������ ������� ����� IMAGE_THUNK_DATA ������������� ����� �������, ������������� ������ ���-������ ��� DLL. � ����� ������ IMAGE_THUNK_DATA DWORD ������� �����. ���� ������������ ������� BIND, �� ���� ������ ������� ���� �� ����������, � �������������� ������ ������� ���� FirstThunk (������ �������).

DWORD TimeDateStamp

������� � ������� � ����, �����������, ����� ��� ������ ������ ����. ������ ��� ���� �������� 0. ��� �� ����� ������� Microsoft BIND ��������� ��� ���� ����� � �������� �� DLL, �� ������� ��������� ������ 1MAGE_IMPORT_DESCRIPTOR.

DWORD ForwarderChain

��� ���� ����� ��������� � ��������, ����� ���� DLL �������� ������ �� �����-�� ���� ������� ������ DLL. ��������, � Windows NT KERNEL32.DLL �������� ��������� ����� �������������� ������� NTDLL.DLL. ���������� ����� ��������� ��� ������� ������� � KERNEL32.DLL, �� � ����� ��� ����� ����� � NTDLL.DLL. ��� ���� �������� ��������� � ������ FirstThunk (������ �������). �������, ��������� ���� �����, ����� ������� � ������ DLL. � ���������, ������ ������� ������� ���� ������� ������ � ������������ Microsoft. �� �������������� ����������� � ������� ����������� � ������� "�������� ��������" � ���� �����.

DWORD Name

��� RVA ������ �������� ASCII, �������������� ����� � ���������� ����� ������������� DLL (��������, KERNEL32.DLL ��� USER32.DLL).

PIMAGE_THUNK_DATA FirstThunk;

RVA-�������� ������� ������� ���� IMAGE_THUNK_DATA. � ����������� ������� ������� ����� ��������������� ��� ��������� �� ��������� IMAGE_IMPORT_BY_NAME. ������ ����� ������������� ������� ����� � �� ����������� ������.

������� ������� IMAGE_IMPORT_DESCRIPTOR �������� ��� ������������� DLL � ��� ������� ��������� IMAGE_THUNK_DATA DWORD. ������ ������� ����� IMAGE_THUNK_DATA ������������� ����� ������������� �������. � ���-������ ��� ��� ������� (�� ��� ��������� ���� Characteristics � FirstThunk) ���� ����������� ���� ����� � ������������ ���������-���������� NULL � ����� ������� �������.

����� ����� ��� ������������ ������� ���������� �� ��������� IMAGE_THUNK_DATA? ������ ������ (�� ���� ��������� ���� Characteristics) ����������� ����������. ������ ��� �������� �������� ����-������� (hint-name table). ������ ������, �� ������� ��������� ���� FirstThunk � IMAGE_IMPORT_DESCRIPTOR, �������������� ��-�����������. ��������� ��������������� ���������� IMAGE_THUNK_DATA � ������� ����� �������, �� ������� ��������� ���������. ����� ��������� ���������� � ������� ����� IMAGE_THUNK_DATA ����� ������������� �������.

������ � �������� � ���, ��� ������ ������� DLL ���������� ����� ���������� "JMP DWORD PTR[CXXXXXXX]". [XXXXXXXX] � ����������� ��������� �� ���� �� ��������� ������� FirstThunk. ��������� ������, ��������� �� IMAGE_THUNK_DATA, �������������� ����������� � � ����� �������� ������ ���� ������������� �������, �� ���������� "������� ������� �������". ���. 8.6 ���������� ��� ���� �������.

��� ������������� Borland ���� ��������� �������������� �������� � ���� ��������. � ��-�����, ��������� TLINK32, ����������� ���� �� ��������. � ����� ������ ���� Characteristics � IMAGE_IMPORT_DESCRIPTOR (�.�. � ������� ����-�������) ����� ���� (��������, ���������� Win32 �� ��������� � ���� �������). ����� �������, �� ���� ��-������ ������ ������ ���� ������ ������, �� ������� ��������� ���� FirstThunk (������� ������� �������).

�� ���� ����� ���� �� � ��������� ���������, ���� �� ��� ��������� ��������� PEDUMP � �� ���������� � ����� ���������� ���������. � ���������� ������ �� ������������ Microsoft "��������������" ������� IMAGE_THUNK_DATA � ��������� DLL ��� Windows NT (��������, KERNEL32.DLL). ����� ���� ����������� IMAGE_THUNK_DATA �� �������� ����������, ����������� ��� ���������� ������������� �������. ������ ����� ������� ����� IMAGE_THUNK_DATA ��� �������� ������ ������������� �������. ������� �������, ��� ���������� ��� ������������� ���������� ������ ������� � ������������ ������ ������������ � �������� ������������� �������. ������ ��� �������� ������ ������������� ������� ��� �� ��������. (������� BIND �� Win32 SDK ������������ ����� �����������.) � ���������, ��� �������� ��������� ��� ������ �������� ���������, ��������������, ��� ������ �������� �������� RVA ��� ��������� IMAGE_THUNK_DATA. �� ������ ��������: "� ������ �� ������������ ������� ����-�������?" ��� ���� �� ��������� ��������, ���� �� ������� ����-������� ������������ � ������ Borland. ��������� PEDUMP �������� � ����� ���������, ������, �� �������� ��������, ��������� ���������� ��������� �������������.


���. 8.6. ��� ��-���� ����������� �������

��������� ������� ������� ������� ��������� ������ � ��������� ��� ������ ������, �� �� ������������ ����� ����������� ������, ��������� ��� ��� DLL ������ DLL. ��� ����� ����� ������ "��������" ��������������� ������� ������� ������� ������� ���, ����� �� �������� �� �������� �������-�����������. �� ����� �������������� ��� �� � ����������, �� � ���������� �������. ��� ����������� �������������� ����� ��������. � ����� 10 � �������� � ���������-������ Win32 API, ������� ��������� �� ���� �����.

��������� ��������, ��� � ��-������ Microsoft ������� ������� �� ��������� ������������� �������������. ������ ����� ��� ��������, ����������� ��� ������ ������� �� ������ DLL, ������������� � ���������� �������. ��� ���������� DLL �������� ���������� (LIB.EXE) ��������� ����������� ��������� ����� � ������� ���������� �������. ��� ���������� ���������� �� ��������� �������, ������������ 16-���������� �������������� NE-������. ���������� �������, ����������� 32-���������� LIB-�������, ����� ������ .text � ��������� ������ .idata$. ������ .text � ���������� �������� ���������� JMP DWORD PTR[XXXXXXXX], � ������� � �������� ������. ��� ����� ����������� �������� � ������� �������� ���������� �����. ��� ������� ��������� ����� �������������� DLL ������� (�������� _DispatchMessage@4).

���� �� ������ .idata$ � ���������� ������� �������� ������� ����� � ����������. ������ ������ .idata$ ����������� ����� ��� "������ ������", �� ������� ������� ��� ������������� �������. ���� ��� ���� ���������� ��������� IMAGE_IMPORT_BY_NAME. ��� ���������� ��-�����, ������������� ���������� �������, ������ ���������� ������� ����������� � ������� ������ ���������� �����, ���������� ��������� �������������. ����� ����, ��� ���������� � ���������� ������� ����� ����� �� ���, ��� � ������������� �������, ����������� ������������ ���������� ��� ������������� ������� � ����������� ������ ������������� ������� ���, ����� ��� ��������� �� ����������. ������� ���������� � ���������� ������� ���������� ��� ������������� �������.

������ ����������� ������ ���� ��� ����������� ������������� ������� ���������� ������� ���������� ����� ������ .idata (��� ������� �������) ��-�����. ��� ����� ��������� �� ������ ������ .idata$, ���������� ������������� � ���������� �������. ������ ������, ����������� �� ��������� ��������������� ������� � ������� �� ������� ���������� �����. ����������� ������ ������� ����� ������������ ��� �������� � ����������� ������, � ��� ���������� ������ �����������.

IMAGE_THUNK_DATA DWORD

��� � ��� ��������, ������ ������� ����� IMAGE_THUNK_DATA ������������� ������������� �������. ������������� �������� ����� ������� �� ����, ��� �� ���� ��� �������� � ������ � ���� �� ������� ������������� �� ����� ��� �� ������ (�������������� �� ����� ����������� ����).

��� �������������� ������� �� ������ (��� ������ �����) ������� ��� (0�80000000) �������� ����� IMAGE_THUNK_DATA ������� ���-����� ��������������� � 1. ��������, ���������� IMAGE_THUNK_DATA �� ��������� 0�80000112 � ������� GDI32.DLL. ���� IMAGE_THUNK_DATA ����������� 112-� �������������� ������� �� GDI32.DLL. �������� ��� �������������� �� ������ ������� � ���, ��� ����� Microsoft �� ������������, ����� ���������� ������������ ������� �������� ������� Win32 API ��� Windows NT, Windows 95 � Win32s.

���� ������� ������������� �� �����, �� �� ������� ����� IMAGE_THUNK_DATA �������� RVA ��������� IMAGE_IMPORT_BY_NAME. ��� ������� ��������� �������� ��������� �������.

WORD Hint

��������� ������� � ���, ����� ����� �������� � ������������� �������. � ������� �� NE-������ ��� �������� �� ������� ���� ������. ��������� ���������� �� � �������� ���������� ��������������� �������� ��� ��������� ������ �������������� �������.

BYTE[?]

������ ASCIIZ � ������ ������������� �������. ������������� ������������� �������� ����� IMAGE_THUNK_DATA ���������� ����� ����, ��� ��-���� �������� ����������� Win32. ��������� Win32 ���������� �������� ���������� �� �������� ����� IMAGE_THUNK_DATA ��� ������ ������ ������������� ������� (���� �� �����, ���� �� ������). ����� ��������� ���������� � ������� ����� IMAGE_THUNK_DATA ����� ������������� �������.

��������� IMAGE_IMPORT_DESCRIPTOR � IMAGE_THUNK_DATA

������, ����� ���� ��� �� ������� � ��������� IMAGEJMPORTJDESCRIPTOR, � ��������� IMAGE_THUNK_DATA, ����� ������ ��������� ����� ��� ���� ������������� ��������, ������� ���������� ���-���� ��� DLL. ��� ����� ����� ������ ��������� ��������������� ��� �������� ������� IMAGE_IMPORT_DESCRIPTOR (������ �� ������� ������������� ����� ������������� DLL). ��� ������� �������� IMAGE_IMPORT_DESCRIPTOR ������� ������ ������� ���� IMAGE_THUNK_DATA � ��������������� ��� ��������������� �������. ���. 8.7 ���������� ����� ��������� PEDUMP ��� ���� ��������. (������� ��� ���� ������������� �� ������.)

Imports Table:
 USER32.dll
 Hint/Name Table: 0001F50C
 TimeDateStamp:   2EB9CE9B
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001FC24
 Ordn Name
 268  GetScrollInfo
 133  DispatchMessageA
 333  IsRectEmpty
 431  SendMessageCallbackA
 255  GetMessagePos
 // ��������� ����� ������� �������...

GDI32.dll
 Hint/Name Table: 0001F178
 TimeDateStamp:   2EB9CE9B
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001F890
 Ordn Name
 31   CreateCompatibleDC
 389  SetTextColor
 276  SetBkColor
 99   ExtTextOutA
 9    BitBlt
 // ��������� ����� ������� �������...

MPR.dll
 Hint/Name Table: 0001F2F8
 TimeDateStamp:   2EAF4824
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001FA08
 Ordn Name
 26
 35
 34
 33
 55
 // ��������� ����� ������� �������...

KERNEL32.dll
 Hint/Name Table: 0001F1CC
 TimeDateStamp:   2EB9DA61
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001F8E4
 Ordn Name
 636  SetEvent
 348  GetTimeFormatA
 375  GlobalGetAtomNameA
 301  GetProcAddress
 572  RtlZeroMemory
 // ��������� ����� ������� �������...

COMCTL32.dll
 Hint/Name Table: 0801FODC
 TimeDateStamp:   2EAD4AE5
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001F7F4
 Ordn Name
 152
 21   ImageList_Draw
 354
 352
 28   ImageList_GetIconSize
 // ��������� ����� ������� �������...

ADVAPI32.dll
 Hint/Name Table: 0001F0A0
 TimeDateStamp:   2EA8A148
 ForwarderChain:  FFFFFFFF
 First thunk RVA: 0001F7B8
 Ordn Name
 149  RegQueryValueA
 119  RegCloseKey
 142  RegOpenKeyExA
 13]  RegEnumKeyExA
 126  RegDeleteKeyA
 // ��������� ����� ������� �������...

���. 8.7. �������� ������� ������� � ���-����� (EXPLORER.EXE)

������� � ��-������

������������������ ������� ������� �������� �� ������� ��� ������������� ���-������� ��� ������� DLL. ���������� �� �������������� �������� �������� � ������ .edata ��-�����. ��� �������, ���-�����, ��������� Microsoft LINK, ������ �� ������������ � ������� �� ����� ������ .edata. ���-�����, ��������� � ������� TLINK32, ��������, ������ ������������ ���� ������ � ����� ������ .edata. ����������� DLL ������������ ������� � ����� ������ .edata. �������� ������������ ������ .edata (���, ������� �������, ������� ��������) �������� ������� ���� �������, ������ ����� ����� � ������ ��������. � NE-����� ������������� ������� �������� �������� ������� ���������, ������� ����������� ���� � ������� ������������� ����. � NE-������ ��� ������� �������� ��� ����� ��������� NE-�����, � �� � ��������� ��� ��������.

� ������ ������ .edata ����������� ��������� IMAGE_EXPORT_DIRECTORY. ����� ���� ��������� ����� ���� ������, �� ������� ��������� ���� ��������� IMAGE_EXPORT_DIRECTORY. IMAGE_EXPORT_DIRECTORY �������� ��������� �������.

DWORD Characteristics

��� ����, ��-��������, ������� �� ������������ � ������ ��������������� � 0.

DWORD TimeDateStamp

������� � ������� � ����, ����������� ����� �������� �����.

WORD MajorVersion;WORD MinorVersion

��� ����, ��-��������, ������� �� ������������ � ������ ��������������� � 0.

DWORD Name

RVA ������ ASCIIZ � ������ ���� DLL (��������, MYDLL.DLL).

DWORD Base

��������� ����� �������� ��� �������, �������������� ������ �������. ��������, ���� ������ �������������� ������� 10, 11 � 12, �� ��� ���� ����� ��������� 10.

DWORD NumberOfFunctions

���������� ��������� � ������� AddressOfFunctions. ��� ����� ����� �������������� ������ ������� �������. ������ ��� �������� ����� ��, ��� � � ���� NumberOfNames (��. ��������� ��������), ���� ��� ����� ���� � ����������.

DWORD NumberOfNames

���������� ��������� � ������� AddressOfNames. ��� �������� ������������� ���������� �������, �������������� �� �����, ������� ������ (���� � �� ������) ����� ������ ���������� �������������� �������.

PDWORD * AddressOfFunctions

��� ���� �������� RVA � ��������� �� ������ ������� �������. ������ ������� � ��� RVA ����� ����� ��� ������ �������������� ������� �������.

PDWORD * AddressOfNames

��� ���� �������� RVA � ��������� �� ������ ���������� ������. ������ �������� ����� �������, �������������� �� ����� �� ������� ������.

PWORD * AddressOfNameOrdinals

��� ���� �������� RVA � ��������� �� ������ ����. �� ��������, � ���� ������ �������� ������ �������� ���� �������������� �� ������� ������ �� ����� �������. ������ �� �������� ��������� ��������� ����� ��������, ��������� � ���� Base (������� ����).

������ ������� �������� ��������� �������. ��� � �������� ������, ������������� ��� ��������������� ������� �������� ����� � ����� ��������. ���� �� ������ �������������� ������� �� �����, ����� ����� ��� �������. ����� ���� �� ��������, ��� ������������ ��-������� ����� ��������� ��� ��� ��� ���������� � ���� ��������� � ����� ����� ����������� �������� ����� ��������. ������ ����� ���������� ���������� ��������� ����� � ���� ��������� ��������.

�������� ������ �� ���� ��������, �� ������� ��������� IMAGE_EXPORT_DIRECTORY, �������� ������, �� ������� ��������� ���� AddressOfFunctions. ��� ������ ������� ����, � ������� ������ ������� ����� �������� RVA ����� �� �������������� �������. ����� �������� ������ �������������� ������� ������������� �� ��������� � �������, ���, ��������, ��������, ��� ������ �������� ���������� � 1, �����, �� �������� �������� ����� ������� � ������� ��������, ������ 1, ���������� � ������ �������� �������. �����, �� �������� �������� ����� ������� � ������� ��������, ������ 2, ���������� �� ������ �������� ������� � �.�.

���������� ������� � ���� �������� ������������ ������� AddressOfFunctions. ��-������, ������ �������� � ���, ��� ������ ������� �������� ���������� � �����, ������������� � ���� Base ��������� IMAGE_EXPORT_DIRECTORY. ���, ���� ���� Base �������� 10, �� ������ ������� ����� � ������� AddressOfFunctions ������������� ������ �������� 10, ������ � 11 � �.�. ��-������, ������� ����� � ����, ��� ������ ��������� ����� ����� ��������. ��������, ��� ���� �������������� ��� ������� � �������� 1 � 3. �������� �� ��, ��� �������������� ������ ��� �������, ������ AddressOfFunctions ������ ��������� ��� ��������. ����� �������� �������, �� ���������� �������������� ��������, �������� 0.

����� ��������� Win32 ��������� ����� �������, �������������� �� ������, �� ��������� ������ �������������� ����� �����. �� ������ ���������� ����� ������� ��� ������ � ������� AddressOfFunctions ������-����. �������, ��������� ������ ������, ��� ���������� ����� �������� ����� ���� �� ����� 1, � ������ ��������� ���������� ��������������� �������.

���� ����� ���-����� � DLL ��� Win32 ����������� ������� �� �����, � �� �� ������. ����� ������� �� ����� ��� ������ �������, �� ������� ��������� ��������� IMAGE_EXPORT_DIRECTORY. ������� AddressOfNames � AddressOfNameOrdinals ���������� ��� ����, ����� ��������� ��� ������ ����� ����� �������� �� ��������� ����� �������. ������� AddressOfNames � AddressOfNameOrdinals �������� ���������� ���������� ��������� (�������� � ���� NumberOfNames ��������� IMAGE_EXPORT_DIRECTORY). ������ AddressOfNames � ��� ������ ���������� �� ����� �������, � ������ AddressOfNameOrdinals � ������ �������� ��� ������� AddressOfFunctions.

������� ���������, ��� ��������� Win32 ������������ ����� �������, ������������� �� �����. ������� ��������� ����� ������ ������, �� ������� ��������� ������ AddressOfNames. ��������, �� ������� ������� ������ � ������� ��������. ����� ��������� ���������� ��������� ������ ��� ������ ���������������� �������� � ������� AddressOfNameOrdinals (� ������ ������ ��� ������ �������). ��������� ������ � ��� ������ ����� ����, ��� ������ ����� ������ ���� ������� � ������� AddressOfFunctions. ������� ��������� ��� � ����� �������� � ������� AddressOfNameOrdinals � ������������ ��� � �������� ������� ��� ������� AddressOfFunctions.

� ��������� �� � ���������� ������ �������, ������������� �� �����, ����� ��������� �������� ��������� �������:

WORD namelndex = FindIndexOfString(AddressOfNames, "GetMessageA");
WORD function Index = AddressOfNameOrdinaIs[nameIndex];
DWORD functionAddress = AddressOfFunctions[functionlndex - OrdinalBase];

���. 8.8 ������������� ������ ������ �������� � ��� �� �������.


���. 8.8. �������� ������� �������� �� ���-�����

���. 8.9 ���������� ����� ���������� PEDUMP ������ �������� � KERNEL32.DLL.

Name:             KERNEL32.dll
Characteristics:  00000000
TimeDateStamp:    2C4857D3
Version:          0.00
Ordinal base:     00000001
# of functions:   0000021F
# of Names:       0000021F

Entry Pt   Ordn   Name
00005090   1      AddAtomA
00005100   2      AddAtomW
00025540   3      AddConsoleAliasA
00025500   4      AddConsoleAliasW
00026AC0   5      AllocConsole
00001000   6      BackupRead
00001E90   7      BackupSeek
00002100   8      BackupWrite
0002520C   9      BaseAttachCompleteThunk
00024C50   10     BasepDebugDump
// ��������� ����� ������� �������...

���. 8.9. ���������� ������ �������� ��� ���������� KERNEL32.DLL � ������� ��������� PEDUMP

���� �� �������������� ������� � ��������� DLL (��������, KERNEL32.DLL ��� USER32.DLL), �� ������ �������� ����������, ��� ����� ��� ������� ���������� ������ ����� �������� � ����� �����, �������� CreateWindowExA � CreateWindowExW. ��� ��� "����" ������������ ��������� ������� (Unicode). �������, �������������� �� �, �������� ASCII-������������ (��� ANSI-) ���������. �������, �������������� �� W, � ��� Unicode-������ ���� �������. ������������, ������������ �� ��������� ����, ����� ������� ���� ��������. ������ ����� ��������������� ������� ���������� � WINDOWS.H � ������� ��������� ������������� #ifdefs. ��� �������������� ��������� �������� �� NT WINDOWS.H:

#ifdef UNICODE
#efine DefWindowProc DefWindowProcW
#else
#define DefWindowProc DefWindowProcA
#end if  // !UNICODE

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

������ � DLL ������� �������������� �������, � �� ����������� ��� ����� � ������ DLL. ��� ����� �������� ���� DLL ����� ���������� ������� ������ DLL. ���� ��������� Win32 ��������� ����� ������������ �������, �� ��������� ������ �� ������� � �� DLL, ������� �������� ��������� ����������� ���.

��������������� ��������� ��������. ���������� ��������� ������� �� ������ ���������� PEDUMP Windows NT3.5 KERNEL32.DLL:

00043FC3 335 HeapAlloc (forwarder -> NTDLL.RtlAIlocateHeap) 
00044005 339 HeapFree (forwarder-> NTDLL.RtIFreeHeap) 
0004402C 341 HeapReAlloc (forwarder -> NTDLL.RtlReAllocateHeap) 
0004404D 342 HeapSize (forwarder-> NTDLL.RtlSizeHeap) 
0004466F 442 RtlFiIIMeiriory (forwarder -> NTDLL.RtlFiIIMernory) 
00044691 443 RtIMoveMemory (forwarder -> NTDLL. RtlMoveMemory) 
000446AF 444 RtI Unwind (forwarder-> NTDLL.RtI Unwind) 
000446CD 445 RtlZeroMemory (forwarder -> NTDLL. RtlZeroMemory)

������ ������� � ���� ������ ���������� ������� � NTDLL. ����� �������, ���������, ���������� ������� HeapAlloc, � ���������������� �������� ������� RtlAllocateHeap �� NTDLL.DLL. ����������, ����� HeapFree �������� � ���������������� ������� ������� RtlHeapFree �� NTDLL.

����� ������� ����� ������, ��� ������� ����������? ������������ ��������� �� ��, ��� ������� ����������, �������� ������� �� ������ � ������� �������� (������ .edata). � ���� ������ ��� ���������� ����� ������� � ���������������� �������� RVA ������, ���������� ������������ DLL � ��� �������. ��������, � ���������� ������ RVA ��� �������� ����� Ox43FC3. �������� Ox43FC3 � KERNEL32.DLL �������� � ������ .edata. ��� �������� ����� ������ NTDLL.RtlAllocateHeap. ������� DumpExportsSection � ��������� PEDUMP ����������, ��� ���������� ������������ �������.

���� �������� �������� ������� ����� �������� ���������, Microsoft �� ���� �������� ����, ��� ������������ �������� � ���������������� DLL. �� ��� ��� � �������� ������������� �������� ������ ����� DLL (�������������� Windows NT KERNEL32.DLL). ���� �������� �� ��, ��� ��� �� ����������� DLL � ���������� �������� ��� Windows 95, ��������� Windows 95, ��� �� �����, ������������ ��� ��������, � ��� � ����������� � ����� 3.

������� ��-�����

���������� �������� � ��-������ ������� �� ��������� � �������������� NE-�������. ������ �������������� �������� (��������, ����) ����������� �� ���������, �� � ��-������ ���������� ������� �� ������� ��������, ����� ����� ��.

����������� �� �������� ��������� �������� ������ �� ����������� �� �������� �����. ����� ���� ������� ������� (��������), ������� ���� �����������. ����������� ����� ���� ����������� �����������. � ���� ������������ ��������� �����. ����� ���������� �������� ������ ��������, ���������� ����� ��������, ��� ���������� �������. � ��-������ ��� �������� �������, ��� � ��� ����������� �������� ����������� ���� IMAGE_RESOURCE_DIRECTORY. ��������� IMAGE_RESOURCE_DIRECTORY ����� ��������� ������.

DWORD Characteristics

������������ ��� ���� ����� ��������� ����� ��������, ��, ��-��������, ��� ������ ����� 0.

DWORD TimeDateStamp

������� � ������� � ���� �������� �������.

WORD MajorVersion; WORD MinorVersion

������������ ��� ���� ����� �� ��������� ����� ������ �������. ��-��������, ��� ������ ����� 0.

WORD NumberOfNamedEntries

���������� ��������� ������� (������ �����), ������������ ����� � ��������� �� ���� ����������. �� �������������� ����������� ����������� � �������� ���� DirectoryEntries.

WORD NumberOfIdEntries

���������� ��������� �������, ������������ ����� ID � ��������� �� ���� ���������� � ����� �������������� ����������. �� �������������� ����������� ����������� � �������� ���� DirectoryEntries.

IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]

��� ���� ��������� �� �������� ������ ��������� IMAGE_RESOURCE_DIRECTORY. �� ���� ����� ����� ������� ������ �������� IMAGE_RESOURCE_DIRECTORY_ENTRY. ���������� ��������� � ������� ����� ����� ����� NumberOfNamedEntries � NumberOfIdEntries. �������� ��������, ������� ��������������-����� (� �� ����� ID), ��������� � ������ �������.

������� �������� ����� ��������� ���� �� ���������� (�.�, �� ������ IMAGE_RESOURCE_DIRECTORY), ���� �� IMAGE_RESOURCE_DATA_ENTRY, ������� ���������, ��� � ����� ��������� �������� ������ ��������. ��� �������, ���������� ������ ��� ������� ��� ������ ���������, ����� ��� ��� ������� �� IMAGE_RESOURCE_DATA_ENTRY ��� ������� �������. ������� �������� ������ (������ ����) ������ ��������� � ������ ������ �������� (.rsrc). ����������� �������� �������� ������ ������������� ��������� ����� ��������, ����������� � �����. ��������, ���� ��-���� �������� �������, ������� ����� � ����, ����� ����� ������������� ����� �������������� ������� ��������, ������� ������� ����� � ������� ����. ������ �� ���� "�����" ������������ ����� � ���� ������� ����� "ID''-�����������. ��� ������� ������� ��������� ���� ������� ����� ������������ ���� ID-����������. ���� � ����������� ���� ������� ���� ������ ���������� ����, ������� �������� ����� ����� ������ ID-�����������. ������ ID-���������� ����� ����� ���� ��������� ��� (��������, MyDialog), ���� ����� ID, ������������ ��� ������������� ������� � RC-�����. ���. 8.10 �������� ������������ �������� ��������� ��������.


���. 8.10. �������� �������� ��������� ��-�����

���. 8.11 ���������� ����� ���������� PEDUMP �������� ����� CLOCK.EXE � Windows NT 3.5. �� ������ ������ �������� ����� ������ �����������, ����, �������, ������� �����, ����������� ����� � ������� ������. �� ������� ������ � ��� ����������� (� ID 1 � 2), ��� ���� (� ������� CLOCK � GENERICMENU), ��� ������� (���� � ������ ABOUTBOX, � ������ � � ����� ID, ������ 0�64) � �.�. �� ��������� ������ �������� � ������ ��� ������ 1 � RVA 0�9754 ������ 0x130 ����. ���������� ������ ��� ���� CLOCK ����� �������� ��952� � �������� 0��� ����.

Resources
ResDir (0) Named:00 ID:06 TimeDate:2E601E3C Vers:0.00 Char:0
   ResDir (ICON) Named:00 ID:02 TimeDate:2E601E3C Vers:0.00 Char:0
      ResDir (1) Named:00 ID:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 0000409 DataEntryOffs: 000001E0
         Offset: 09754 Size: 00130 CodePage: 0
      ResDir (2) Named:00 iD:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 000001F0
         Offset: 09884 Size: 002E8 CodePage: 0
   ResDir (MENU) Named:02 ID:00 TimeDate:2E601E3C Vers:0.00 Char:0
      ResDir (CLOCK) Named:00 ID:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 00000200
         Offset: 0952C Size: 000EA CodePage: 0
      ResDir (GENERICMENU) Named:00 ID:01 TimeDate:2E601E3C Vets:O,00 Char:0
         ID: 00000409 DataEntryOffs: 00000210
         Offset: 09618 Size: 0003A CodePage: 0
   ResDir (DIALOG) Named:01 IO:01 TimeDate:2E601E3C Vets:O,00 Char:0
      ResDir (ABOUTBOX) Named:00 ID:01 TimeDate:2E601E3C Vets:O,00 Char:0
         ID: 00000409 DataEntryOffs: 00000220
         Offset: 09654 Size: 000FE CodePage: 0
      ResDir (64) Named:00 ID:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 00000230
         Offset: 092C0 Size: 0026A CodePage: 0
   ResDir (STRING) Named:00 ID:02 TimeDate:2E601E3C Vers:0.00 Char:0
      ResDir (1) Named:00 ID:01 TimeDate:2E681E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 00000240
         Offset: 09EA8 Size: 000F2 CodePage: 0
      ResDir (2) Named:00 ID:O1 TimeDate:2E601E3C Vers:O.00 Char:O
         ID: 00000409 DataEntryOffs: 00000250
         Offset: 0 9F9C Size: 00046 CodePage: 0
   ResDir (GROUP ICON) Named:01 ID:00 TimeDate:2E601E3C Vers:0.00 Char:0
      ResDir (CCKK) Named:00 ID:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 00000260
         Offset: 09B6C Size: 00022 CodePage: 0
   ResDir (VERSION) Named:0 ID:01 TimeDate:2E601E3C Vers:0,00 Char:0
      ResDir (1) Named:00 ID:01 TimeDate:2E601E3C Vers:0.00 Char:0
         ID: 00000409 DataEntryOffs: 00000270
         Offset: 09B90 Size: 00318 CodePage: 0

���. 8.11. �������� �������� ��� CLOCK.EXE

����� ������������ ������ � ���������� �������� ��������, ��� ���������� ���������� � ������� �������������� ����� �������� (�������, ���� � �.�.). ���� ������� ����� �� ����� �����. �� � ����� ���������� �������, �� ������� ������ ������. ���� ��� ���������, ������� ���� RESFMT.TXT �� Win32 SDK, � ������� ���� ��������� �������� ���� ����� ��������. ��������� PEDUMP ���������� �������� ��������, �� �� ����������� �������������� ������� ��������.

������� �������� ��-�����

�����������, �������� ���-����, ������������, ��� � ������ ����� ��������� ����, � ����� �������� �������������� ������ ��������� ������������ ���� � ������ � ����������� ����. ����, ������, ����������� ���� ����������� ����-������ � ������ ����� � ����������� �������� ������������, ������, ������������� �������������, ����������� ���������. ����������, ���������� � ������ .reloc, ��������� ���������� ��-����� ��������� ��� ������ � ����������� ������. ����� ���������� ������� ��������� ���� �� �������� ������, ���������� �������������, ���������� � ������ .reloc ������������ �� �������������. �������� ������ .reloc ���������� �������� ����������, ������ ��� �� ������������� ������� �� �������� �������� ������ ������������ �����������.

� ������� �� �������� � NE-������, ������� �������� ��-������ ����������� ������. ��� �� ��������� �� ������� DLL ��� �� ������ ������ ������. ������ ����� ������� �������� �������� � ������� ��� ���� � �����������, ��� ����� ��������� ��������� ��������.

��� ������ ����, ��� �������� ������� ��������. �����������, ��� ���-���� ����������� � ���������, ��� ������� ����� ����� 0�400000. ����� ���������, ���������� ����� �����-���� ������, ����� �������� 0�2134 � �����������. ������ ���������� � ����������� ������ 0�404002, ��� ��� ��������� �������� ��� ��������. � ������ �������� ��������� ������, ��� ������ ����� ���������� � ������, ������� � ����������� ������ 0�600000. �������� ����� �������������� ������������� ������� ������� � �������� ������� �������� ���������� ������. � ����� ������ ������ ����� 0�200000 (0�600000-0�400000). ��������� ��� ����������� ����������� �� 0�200000 ���� ���� � ������, ����� ������ ������ 0�604002. ��������� �� ������ ������ �������� �������� ��������. ����� ��������� ���, � ���� ���������� ��������� ������ (� ����� ������ 0�200000).

����� ��������� Windows ������ ��� �����������, ����������� ���� �������� ������� �������� ��� ���� ����� � ������, � ������� ��������� ��������� (��� �������� � ����������� ����� 0�2134). ����� ��������� ������� ��������, ��������� ��������� ������ � ��������� ��������, ������������ �� ������, ���������� � ������� ���������. � ����� ������ ��������� ������ ��������� 0�200000 � ��������� �������� ��������� (0�404002) � ��������� ��� �������� (0�604002) ������� � ���������. ��� ������ ������������� ��������� �� ������ 0�604002, ��� ����� ���������� ����������. ���. 8.12 ���������� ���� ���� �������.


���. 8.12. ������� �������� ��-�����

������������ ������ ������� �������� �������� ��������� �������. �������� ������������� ������� ������� ������ ��������� �����. ������ ����� ��������� �������� ��� ����� ������������������� �������� ����������� � ���������� �� ��������� IMAGE_BASE_RELOCATION, ������� �������� ��������� �������.

DWORD VirtualAddress

��� ���� �������� ��������� RVA ��� ������� ����� ��������. �������� ������ ��������, ������� ������� ������, ����������� � ���� �������� ��� ��������� ��������� RVA, � �������� ������ ���� ��������� ������ ��������.

DWORD SizeOfBlock

������ ������ ��������� ���� ��� ����������� �������� ���� WORD. ����� ���������� ���������� �������� � ������ �����, ����� �� �������� ����� ���� ������� ������ IMAGE_BASE_RELOCATION (8 ����) � ����� ��������� �� 2 (������ ���� WORD). ��������, ���� ��� ���� �������� �������� 44, �� � ����� ������� 18 ��������:

(44 - sizeof(IMAGE_BASE_RELOCATION))sizeof(WORD) = 18

WORD TypeOffset

�� ����� ���� ��� �� ��������� �����, � ������ ����, ���������� ��������� � ������� ����������� �� �������, ����������� � �������� ����������� �������� �����. ������� 12 �������� ������� �� ���� ���� ������������ ����������� ��������, ������� ������ ���� ���������� � �������� � ���� VirtualAddress �� ��������� ������� ����� ��������. ������� 4 ������� ������� ����� �������� ����� ��������. ��� ��-������, ����������� �� ����������� ����� Intel, ���������� ������ ��� ���� ��������:

  • 0 (IMAGE_REL_BASED_ABSOLUTE). ��� �������� �� ����� ������ � ������������ ��� ����������� ��� ���������­��� �� ������� ���������� �������� �����.
  • 3 (IMAGE_REL_BASED_HIGHLOW). �������� ������������� ����������� ��� �������, ��� � ������� 16 �������� ������ � �������� �����, �� ������� ��������� ����������� RVA.

    ���� ����� ������ ��������, ������������ � WINNT.H, ������� ����� ������� ���������� �� ����������� ��������­���, �������� �� i386.

    ���. 8.13 ���������� ��������� ������� ��������, ���������� ���������� PEDUMP. ��������, ��� �������� RVA, ���������� �� �������, ���� ��� ������� ���������� ����� VirtualAddress ��������� IMAGE_BASE_RELOCATION.

    Virtual Address: 00001000 size: 0000012C
     00001032 HIGHLOW
     0000106D HIGHLOW
     000010AF HIGHLOW
     000010C5 HIGHLOW
     // ��������� ����� �������...
    Virtual Address: 00002000 size: 0000009C
     000020A6 HIGHLOW
     00002110 HIGHLOW
     00002136 HIGHLOW
     00002156 HIGHLOW
     // ��������� ����� �������...
    Virtual Address: 00003000 size: 00000114
     0000300A HIGHLOW
     0000301E HIGHLOW
     0000303B HIGHLOW
     0000306A HIGHLOW
     // ��������� �������� �������...
    

    ���. 8.13. ������� �������� � ���-�����

    COFF-������� ��������

    ���� ��� ���������� ������ �� ����� ��-�����, ������� ������������ ������������ ��������, �� ������ ������­���� ���� � ��������� ("COFF-���������� ����������") ������� � ���������� ������ � ������� "�������� ����� ��-������� � ���������� COFF-�������".

    � ����� ��������� ����� � COFF-�����, ��������� ������������ Microsoft, ���� ������� ��������. � ������� �� ���������� Code View, ��� ������� �������� �� �������� �������������� ������, �������������� ������ ��� ������­������� ������������ ����������� ���� � ���������� �����������. ��������, ��� ������� �������� ���������� ��� ���� ���������������� � ������� ��������, �� ������� ��������� ������. ���������� � ��������, ���������� �����­�������, ��������� � ������������ ��������� � ���� ������� ��������. ������ COFF-������� �������� ����������� ����� - �� ��������� � ����� ���������� �������� Microsoft/Intel OMF � ��� LNAME, PUBDEF � EXTDEF.

    ���� ��� ���������� ���������� ���������� �� ����������, �� � ������� �������� ���������� ����� ����� ����­����� ���� ��������� ���������� ��������. ���� �� �������� ���������� ���������� (� ������� /Zi), �� �������­��� ������� �������������� ���������� � ������, ����� � ����� ������ ������� ������. ���� ����� �������� �����­����� ���� � /DEBUGTYPE:COFF, ���� � /DEBUGTYPE:BOTH, ����������� �������� � ������������ ���-���� ���­���� �������� � COFF-�����.

    ����� ����� COFF-����������, ���� ���� ������� ����� ������ ���������� CodeView? ���� ������������ ������­��� �������� NT (NTSD) ��� �������� NT Kernel - KD (Kernel Debugger), �� � ���� ��������� ������ COFF. � ���� �� ���� ���� ��-��������� ������ ���������� � Windows NT, DRWTSN32 ����� ������������ ��� ���������� ��� "������� �������".

    � � ���-������, � � ��������� ������ ������������ � ������ COFF-������� �������� ���������� � ��������� IMAGE_FILE_HEADER (��. ������ "��������� ��-�����" ������ � ���� �����, ����� �������� � ������ �������� �� ���� ���������). ������� �������� ���������� ������� ������� � ������� �� ������� �������� IMAGE_SYMBOL. ����­������ ��������� � ���� ������� �������� ��������� ���� NumberOfSymbols ��������� IMAGE_FILE_HEADER. ���. 8.14 ���������� ������ ������ �������� ���������� PEDUMP.

    Symbol Table - 433 entries (* = auxiliary symbol)
    Indx   Name               Value     Section      cAux   Type     Storage
    ---- ------------------   --------  ----------   -----  -------  --------
    0000 .file                0000005B  sect:DEBUG   aux:1  type:00  st:FILE
        * EXEDUMP.c
    0002 .debug$S             0001B457  sect:7       aux:1  type:00  st:STATIC
        * Section: 0000 Len:   017C8 Relocs: 002C    LineNums: 0000
    0004 .data                0000B040  sect:4       aux:1  type:00  st:STATIC
        * Section: 0000 Len:   006CA Relocs: 0020    LineNums: 0000
    0006 _SzRelocTypes        0000B1E0  sect:4       aux:0  type:00  st:EXTERNAL
    0007 _SzResourceTypes     0000B148  sect:4       aux:0  type:00  st:EXTERNAL
    0008 _SzDebugFormats      0000B088  sect:4       aux:0  type:00  st:EXTERNAL
    0009 _PCOFFDebugInfo      0000B040  sect:4       aux:0  type:00  st:EXTERNAL
    000A .text                000026A0  sect:1       aux:1  type:00  st:STATIC
        * Section: 0000 Len:   00CE0 Relocs: 00A3    LineNums: 00D0
    000C _DumpDebugDirectory  000026A0  sect:1       aux:1  type:20  st:EXTERNAL
        * tag: 000E size: 01A4 Line #'s: 00009220  next fn: 0013
    000E .bf                  00000000  sect:4       aux:1  type:00  st:FUNCTION
    0010 .lf                  0000001A  sect:4       aux:0  type:00  st:FUNCTION
    0011 .ef                  000001A4  sect:4       aux:1  type:00  st:FUNCTION
    0013 _GetResourceTypeName 00002844  sect:1       aux:1  type:20  st:EXTERNAL
        * tag: 0015 size: 004A Line #'s: 000092BC  next fn: 001A
    0015 .bf                  000001A4  sect:4       aux:1  type:00  st:FUNCTION
    0017 .lf                  00000006  sect:4       aux:0  type:00  st:FUNCTION
    0018 .ef                  000001EE  sect:4       aux:1  type:00  st:FUNCTION
    // ��������� ������� �������...
    

    ���. 8.14. �������� COFF-������� ��������

    ������ ��������� IMAGE_SYMBOL ����� ��������� ������:

    typedef struct _IMAGE_SYMBOL { 
    union {
    BYTE   ShortName[8];
    struct {
    DWORD  Short;  // � ������ ��������� 0 ������� ������������ LongName. 
    DWORD  Long;        // �������� � ������� �����. 
    } Name;
    PBYTE  LongName[2];
    } N;
    DWORD  Value;
    SHORT  SectionNumber;
    WORD  Type;
    BYTE  StorageClass;
    BYTE   NumberOfAuxSymbols;
    } IMAGE_SYMBOL;
    typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;

    ������� ������ ������ �� ���� ����� ��������.

    union (Symbol name union)

    ���������� ��� ����� ����������� ����� ���������, � ����������� �� ��� �����. ���� ��� �� ������� 8 ������, �� ���� ����������� ShortName �������� ���������� ��� � ������� ASCIIZ. ������� ���� ���������� � ������, ����� ���������� ��� �������� � �������� 8 ������; ��� ���� ������ �� ������������ �����. ���� ���� Name.Short �� ����� ����, ������� ������������ ���� ����������� ShortName. ������ ������ ������������� ����������� ����� ���������­��, ����� ���� Name.Short ����� 0. � ���� �������� ���� Name.Long �������� �������� ��������� � ������� �����. ���­���� ����� - ��� �� ��� ����, ��� ������ ASCIIZ-�����, ��������� ���� �� ������ � ������. ��� ������� ���������� ����� �� �������� ��������. ����� ��������� ����� ������ ������� �����, ����� ������ �������� ���������� �������� �� ������ ��������� IMAGE_SYMBOL � ��������� ��������� � ���������� ������ ������� ��������. ����� ������� ����� � ������ ��������� � ������� �����, ������� �������� 0 � ������� �����.

    DWORD Value

    ��� ���� �������� ��������, ��������� � ��������. ��� ���������� �������� � �������� ������ (�.�. ������� � ���������� ����������) ���� Value �������� RVA ��������, �� ������� ��������� ������ ������. ��� �������� �����­����������� ����� ��� ��������� ������ ��������. � ����. 8.2 ����������� ������� �������� ��������� ���������� ���� Value ��� ����������� ��������.

    ������� 8.2. ����������� ������� � COFF-�������� ��������

    ��� ������� �������������
    .file ������ ���������� ������� ���������� ������� .file
    .data ��������� RVA ������� ������. ��� ������� ������������ �������� ������, �������� ���������� �������� .file
    .text ��������� RVA ������� ������������ ����. ��� ������� ������������ �������� ������, �������� ���������� �������� .file
    .If ���������� ��������� � ������� ������� ����� ��� �����-���� �������, ������� �������� ���������� ��������, ������������ �������

    SHORT SectionNumber

    ���� SectionNumber �������� ����� ������, ������� ����������� ������. ��������, ������� ��� ���������� ��­�������� �����, ��� �������, ����� � ���� ���� ����� ������ .data. ������ ����������� ������ ��-�����, ���������� ��� ������ ����������� ��������.

  • 0 (IMAGE_SYM_UNDEFINED). ������ �� ���������. ����� ����� ������ ������������ � ��������� ������ ��� ������������� ��������, ����������� ��� ������, �������� ������� ������� � ������� ���������� ����������.
  • -1 (IMAGE_SYM_ABSOLUTE). ���� ������ �������� ���������� ��������� � �� ������ �� � ����� ���������� ���­����. ��������� �������� ��������� � ����������� ����������.
  • -2 (IMAGE_SYM_DEBUG). ������ ������ ������������ ������ ���������� � �� ����� �� ���������. ������� .file, �������� ��� ��������� �����, - ������� ����� ���������� ������.

    WORD Type

    ��� �������. ���� WINNT.H ���������� ���������� ������� ������ ����� �������� (int, struct, enum � �.�.). (��. ������ �������� � ���������� #defines IMAGE_SYM_TYPE_xxx.) � ���������, �������� Microsoft, ��-��������, �� ��­�������� �������� ���� ��������� �����. ������ ����� ��� ���������� ���������� � ������� ����� ��� NULL ��� ��� �������, ������������ NULL.

    BYTE StorageClass

    ����� ������ �������. ��� � ��� ����� �������� ���� WINNT.H ���������� ���������� ������� ������ ������� ��­����: automatic, static, register, label � �.�. (��. ������ �������� � ���������� #define IMAGE_SYM_CLASS_xxx.) �����-����, ��� � � ������ �����, �������� Microsoft ������� ������ ��������� ���������� ����������. ��� ���������� ���������� � ������� ����� ����� ������ �������. �� ���� ���������, �� ���������� ������� ������� ������� ��� ��������� ����������, ����������� ���������� � �.�.

    BYTE NumberOfAuxSymbols

    �� ����� ���� � ������� ������� ��������. ������� �������� �� �������� � �������� �������� �������� IMAGE_SYMBOL. ���� ������ ����� ��������� �������� � ������ NumberOfAuxSymbols, �� �� �������� ������� ����� �� ����� �������� IMAGE_AUX_SYMBOL. ��������, �� �������� .file ������� ������� �������� IMAGE_AUX_SYMBOL, ������� ���������, ����� ������� ������ ���� � ��������� �����.

    � �������, ������ ��������� IMAGE_AUX_SYMBOL ����� ��, ��� � � ��������� IMAGE_SYMBOL, ��� ��� ������­������ ��� �� ����� ������������� ������� �������� ��� ������ �������� IMAGE_SYMBOL. ���������, ��� ������ ������� ������ ��������������� ��� ������ �������, ���� ���� ��������� �������� �������� ���������������� ����­����. ����� ��������� ������ ���������� ����������� �������, ����� ��������� ���������� ��������������� �����­���, ������������ ��������. ��������, ����� ������ ����� ������ 1. ���� �� ���������� ��� ��������������� �������, �� ������ ���������� ����������� ������� ����� ����� 4.

    IMAGE_AUX SYMBOL ������������ ����� ���������� ����������� �����. ����� ����������, ����� ����� ������­����� ������������, ���������� ����� ��� ����������� �������, ���������� � ������ ��������������� ��������. � ��­�� � ��� � �� �����, ����� ���� ����������� ������ ���� ������������ � ������ ������, � ������ ���� ��� ���������.

    �������, ������� ����� ������ IMAGE_SYM_CLASS_FILE, ���������� ���� ����������� File � ��������� IMAGE_AUX_SYMBOL.

    �������, ������� ����� ������ IMAGE_SYM_CLASS_STATIC, ���������� ���� ����������� Section � ��������� IMAGE_AUX_SYMBOL.

    ��� ��� ������, ���������� ������������� ��������������� ��������, � ������������ ���������� � ������� DumpAuxSymbols() � �������� ����� COMMON.� � ��������� PEDUMP. ���� �� �������������� ���������� ���-������ ���������, ����� ������� ��� ���������� � ��� �������.

    ������ ���������� ������ ������ ��������, ����� ��������, ��� ������� ����������� �� ����������. ��������, ��� ������������� �� ��������� ������� (��� �� �������� ������, ���� ��� ��� ������ ��������), �� ������� ��� ���������. ������ ������� � COFF-������� �������� �������� ������ .file. �������� ������ .file - ��� ������ � ������� ��������, ����������� �� ��������� ������ .file. ������ �� ���� ������� ������� .file, ����� ��������������� ����­����� ��� ��������� ������ � ���-�����. ����� �� ������� .file ������� ������ ������, ����������� � ������� �����­���� �����. ��������, ��� ������������� ������� (���������� ���������� � �������), ����������� � �������� ���­��, ���� ����� �� ������� .file, ���������� ������� ��������� �����. ��� ����������� ��������� ������ "��������" ������� �������� ��������� �������:

    Source File record                   // ��� ��������� �����.
    Data Section record (e.g., ".data")  // ������, ����������� � �����.
    GlobalVariablei record               // ���������� � ����������.
    GlobalVariable2 record               // ��������� ������ ���������� ����������
    Code Section record (e.g., ".text")  // ����������� ���, ����������� � �����.
    Function1 record                     // ���������� � �������.
    .BF record                           // ���������� � ������ �������.
    .LF record                           // ���������� � ����� �������.
    .EF record                           // ���������� � ����� �������.
    Function2 record
    .BF record
    .LF record
    .EF record                           // ��������� ������ �������

    COFF-���������� ����������

    ��� �������� ������������ ������ ���������� ���������� �������� ��� ���������� ����������, ��� � �������­��� � ������� �����. � COFF-������� ������, ����������� � �������� � ������, ����������� � ������� �����, ����­����� � ������ �������� �����. (� �������� ����� Borland � � ������� Code View ��� ������ �������� ���� ��� ���� ���������� ��������� �� ����� � ��� �� ����� �����.) � ������� ������� COFF-������� �������� ������, ��� ��� ���­���� ��� � ���������, ��� � � ���-������. � ���� �� ����� ���� � �������� �������� ��-������� ���������� ����� ���� � ����� PointerToSymbolTable � ��������� IMAGE_FILE_HEADER. �� ���� �������� � ����� ���������� � ������� ���­����� ��������.

    ��� COFF-������� �������� ���-����� ������� �� ���� ������: ���������, ���������� � ������� ����� � ������� ��������. ��� �� ����������� ����������� �� ��������� � ������, �� ����������� Microsoft ����������� �� ����� ��­�����. ������ COFF-������� �������� �������� ���:

    ��������� IMAGE_COFF_SYMBOLS_HEADER
    ������� ������� �����
    ������� �������� (����������� ������)
    

    ��������� IMAGE_COFF_SYMBOLS_HEADER ���������� �� ��, ����� ������ ���������� ������ ����� ��������­��� �� ����������. ��� ��������� �������� ��������� �� ������� ������� ����� � ��������, � ����� �� ����������, ����������� ���-���� � ������ ����� � �����.

    ����� �������� ��������� IMAGE_COFF_SYMBOLS_HEADER, ����� ��������� � ������ �������� IMAGE_DEBUG_DIRECTORY � ������ .rdata � �����. ��������� IMAGE_DEBUG_DIRECTORY, ���������� � ���� Type �������� 1 (IMAGE_DEBUG_TYPE_COFF), �������� ��������� �� COFF-������� ��������. �������� ��� ��� �������: ��­����� ������ (� ����� ��������� ��-�����) �������� RVA ������� �������� IMAGE_DEBUG_DIRECTORY. ������� ���� ���������� ����������, ����������� � �����, ������������� ���� ��������� IMAGE_DEBUG_DIRECTORY. ���� ���� �� ���� �������� IMAGE_DEBUG_DIRECTORY ��������� �� ���������� ���������� � COFF-�����, ��� �������� RVA ��������� IMAGE_COFF_SYMBOLS_HEADER. ��������� IMAGE_COFF_SYMBOLS_HEADER � ���� ������� �������� ��������� �� COFF-������� �������� � ���������� � ������� �����. ��������� IMAGE_COFF_SYMBOLS_HEADER ����� ��������� ������:

    typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
    DWORD NumberOfSymbols;
    DWORD LvaToFirstSymboI;
    DWORD NumberOfLinenumbers;
    DWORD LvaToFirstLinenumber;
    DWORD RvaToFirstByteOfCode;
    DWORD RvaToLastByteOfCode;
    DWORD RvaToFirstByteOfData;
    DWORD RvaToLastByteOfData;
    } IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;

    ���������� ��������� ���� ��������� IMAGE_COFF_SYMBOLS_HEADER.

    DWORD NumberOfSymbols

    ���������� �������� � COFF-������� ��������. ������ ���� �������� ����� �� ��������, ��� � ���� IMAGE_FILE_HEADER.NumberOfSymbols, ��� ����������� ������ � ������� "��������� ��-�����".

    DWORD LvaToFirstSymbol

    �������� �������� COFF-������� �������� �� ��������� � ������ ��������������� ���������. ����������� ���� �������� � RVA ��������� IMAGE_COFF_SYMBOLS_HEADER ���� ���������, ����������� �� ��������� ���� IMAGE_FILE_HEADER.PointerToSymbolTable.

    DWORD NumberOfLinenumbers

    ���������� ��������� � ������� ������� ����� (���. 8.15).

    Line Numbers
    SymIndex: C (DumpDebugDirectory)
     Addr: 016A9 Line: 0008
     Addr: 016B5 Line: 0009
     Addr: 016BF Line: 000A
     Addr: 016C4 Line: 000E
     // ��������� ������ ����� ��� ������� �������...
    SymIndex: 13 (GetResourceTypeName)
     Addr: 0184A Line: 0001
     Addr: 01854 Line: 0002
     Addr: 0186F Line: 0003
     Addr: 01874 Line: 0004
     // ��������� ������ ����� ��� ������� �������...
    SymIndex: 1A (GetResourceNameFromLd)
     Addr: 01897 Line: 0004
     Addr: 018A1 Line: 0006
     Addr: 018B6 Line: 0007
     Addr: 018BB Line: 000A
     // ��������� ������ ����� �������...
    

    ���. 8.15. �������� ������ ���������� �� ������� ������� ����� � ���-�����

    DWORD LvaToFirstLinenumber

    �������� �������� COFF-������� ������� ����� �� ��������� � ������ ��������������� ���������.

    DWORD RvaToFirstByteOfCode

    RVA ������� ����� ������������ ������������ ���� � �����������. ��� ���� ������ �������� �������� ������ RVA ������ .text. ��� �������� ����� ����� �����, ������������ ������� ������ ������������ �����.

    DWORD RvaToLastByteOfCode

    RVA ���������� ����� ������������ ������������ ���� � �����������. ���� ���� ������ ���� ����������� ������ (.text), �� ������ ���� ����� ����� RVA ���� ������ ���� ������ �� �������� ������. ��� �������� ����� ����� �����, ������������ ������� ������ ������������ �����.

    DWORD RvaToFirstByteOfData

    RVA ������� ����� ������ � �����������. �������� ����� ���� ������ ����� RVA ������ .bss.

    DWORD RvaToLastByteOfData

    RVA ���������� ����� ��������� ��������� ������ � �����������. �������, ������������ ������ FirstByteOfData � LastByteOfData, ����� ����������� ��������� ������ (��������, .bss, .rdata � .data).

    COFF-������� ������� �����

    COFF-������� ������� �����, �� ������� ��������� ��������� IMAGE_COFF_SYMBOLS_HEADER, �������� ����� ������� - ��� ������ ������ �������� IMAGE_LINENUMBER. ������ ��������� ������ � ������������ ����� ������ ������������ ���� ��������� ����� �� RVA � ����������� �����������. ���. 8.15 ��������� ������� ������� ������� �����, ���������� ���������� PEDUMP. ��������� IMAGE_LINENUMBER ����� ��� ���� - ����������� � �����.

    union{
    DWORD SymbolTableIndex;
    DWORD VirtualAddress;
    }Type;

    ���� ���� Linenumber (��. ����) ���������, �� ��� ������� ���������� ��� RVA ������ ������������ ����. ���� ���� Linenumber ����� ����, �� ������ ���� �������� ������ � ������� ��������. ���������� ������, �� ������� ��������� ���� ������, ���������� �������. ��� ������ ������� ����� ��� ���� ������� ������� ����� �� ���� ����������� ����­���. �� ������������ ������ ��������� PEDUMP �����, ��� ������� ������� ����� ������� �� ������ ������� ������� ��������, �� ������� ���� ������� ������ ������� �����, � ����� ��� - ������ ������ ������� ������� �������� � �. �.

    WORD Linenumber

    �������� ����� ������ ������������ ������ �������. ��� ���� �� �������� ������� ������ � �����. ����� ����­����� ��� � ������� ��� ������������� ����� ������ � �����, ������� ����� � ������� �������� ����� ��������� ������ ��������������� �������. ��������������� ������� - ��� �������, ������� 0 � ������ ���� � ����� ��������� ��­���� ������ ������. ���� ���-���� �������� ����������, �������� ����� ��������� PEDUMP �� ���. 8.15.

    ���� ��������� ������ ������ � ������� ����� ������ ����������� ������, �� ������� ������ ���� ������������­��� �������� ���������, ����������� � ������� �����, � ������� ������. ��������� IMAGE_SECTION_HEADER ���­��� ������ �������� �������� �������� � ������� ������� ����� ����� ������ �������. ��������� ����� COFF-������� ���� �������� ���������� � ������� ����� � �������, ������� ��� ������ ��� ������. � ��������� ������ ����������� ��������� IMAGE_COFF_SYMBOLS_HEADER, ������� ������������ �������� ������ ������ ����­��� ����� � ������� �������� IMAGE_SECTION_HEADER.

    �������� ����� ��-������� � ���������� COFF-�������

    �� ����� ����� ����������� ���������� � ������������ �������, ��� ������ ��������� � ������� ����� �������­��� ��� ��� � ��������� COFF-������, ��� � � ��-������, ��������� �� ���� ��������� ������. ��� ��������� COFF-�����, ��� � ��-����� ����� � ����� ������ (��� ����� ����) ��������� IMAGE_FILE_HEADER. �� ���� ����­������ ������� ������� ������, ���������� ���������� ��� ���� ������� �����. ��� ������� ����� ����� ���������� ������� ������ ������� ����� � ���������� ������, ���� ��-����� ����� ��������� �������������� ���������� ���­���� �� � COFF-�����. ������� �������� ���� �������� ����� ������� � �������� ����������� ���� ��������� PEDUMP. ����� ������� ���� � ���� ��������� - COMMON.C. ���� �������� ���� �������� ��� ������������, ��­����� ����� �������������� ��� ������� ���������, ��������������� ��-�����, ��� � �������, ��������������� ��­��� ��������� ������.

    ��� �������� ���� �������� �������� �� ��������. �� ���� - ����������� ��������� ������ ������������. �����­������� �������� ���-����� �� ������ ���������� ����� ������ ��������� � ������� ���������� ������ � ��������� ������� �������� �������� � �����������. ���� ��� � ���� ����� ������������ ���� ��������� COFF-���� ��� ����­��� ��-�����. ����������� ��� ���������� ���� ��������� �������, � � ���������� �� �����.

  • ��������� COFF-����� ���������� ����� � IMAGE_FILE_HEADER. ����� ���������� ��� ����� ���� DOS, � ��� ��������� �� ����� IMAGE_FILE_HEADER.
  • � ��������� ������ ����������� IMAGE_OPTIONAL_HEADER. � ��-������ ��� ��������� ������� ����� �� IMAGE_FILE_HEADER. ��������� ��������, ��� ��������� ��������� ����� ������ ������ COFF LIB ���-���� ��­������ IMAGE_OPTIONAL_HEADER.
  • � ��������� ������ ��� ������� ��������. ������ ����� ��� ����� ��������, ���������� �� ������� ��������. � �� ��­�������� ������� �������� COFF-������, ��� ��� ��� ������ ��������. ���� �� �������� ���� ���������� � ���� ���­������� �������, ���� PointerToRelocations � NumberOfRelocations � ������� ������� ������ ��������� �� �������� ��� ������ ������. �������� ������������ ����� ������ �������� IMAGE_RELOCATION, ������������ � ����� WINNT.H. ���� �������������� ��������������� ����, ��������� PEDUMP ����� �������� �������� ���������� �����.
  • ���������� CodeView � ��������� ����� �������� � ���� ������� - .debug$S � .debug$T. �����������, ��������­��� ��������� �����, �� �������� ��� ������ � ��-����. ������ ����� �� �������� ��� ��� ������ � ������� ������ ������� ��������, ������� �������� � ����� �����. ��������� ������� �������� �� �������� ������� (�.�. � ������� ������ ��-����� ��� ��������, ���������������� ��).

    ����� COFF LIB

    ������������ � ��������� COFF-������, �������� ����������� � ������������� ������ COFF LIB. �� ��������, ����� COFF LIB - ��� ������ ����� ��������� COFF-������ ���� ��������� ��������� ������, ����������� ������ ������������� ������������ ������ ��������� ������, ������������ ������ ����������. ������� ������������ �� ������� COFF LIB �������� LIB-����� ��������. ����� �������� ���� �������������� � ���������� � �.

    ��� LIB-����� ���������� � ����� � ��� �� �������������� ���������. ��� ��������� ���������� � ����� WINNT.H:

    #define IMAGE_ARCHIVE_START         "!<arch>\n"

    ��������� ����� ����� ������������ ��� ������� ���������� �����. ������ ������ ���������� ���������� IMAGE_ARCHIVE_MEMBER_HEADER:

    typedef struct MAGE ARCHIVE_MEMBER_HEADER {
    BYTE            Name[16];
    BYTE            Date[12];
    BYTE            UserlD[6];
    BYTE            GrouplD[6];
    BYTE            Mode[8];
    BYTE            Size[10];
    BYTE            EndHeader[2];
    } IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;

    ������ ��������� IMAGE_ARCHIVE_MEMBER_HEADER �������� ���� ���������� ����� ������ ����������, ���� ����� ������ �� ���������� ������ ����������� �������. ��� ����������� ������ ��������� � ������ ���������� � ��­�������� ��� ����, ����� ����������� � ���������� ��� ������ ���������� ��������� ����� � LIB-�����. �������� ������ ��� ����� ������ ������� ����� �� ���������� IMAGE_ARCHIVE_MEMBER_HEADER, � ������� ���������� ��­���� ������. ��� ����������� ������ ������ ������� �������� ������ ����� ����� ��, ��� � � ��������� �����. �����­��������, ����� ��������� PEDUMP �������� ����� LIB-������, ��� �������� �� �� ���������, ��� � ��� ��������� ���������� �����. ���. 8.16 ���������� ������ LIB-������.

    ���������� ���� ��������� IMAGE_ARCHIVE_MEMBER_HEADER.

    BYTE Name[16]

    ��� ����� ������. ���� ������ "/" ���������� ����� ASCII-������ (��������, FOO.OBJ/), �� ������ ����� �������� "/" ������������ ��� �����. ���� ��� ���������� � ������� "/", �� ������� ������� ���������� ����� (��������, /104), �� ����� �������� ��������� ����� ����� ������ ������ ����� Longnames LIB-�����. � ���������� ������� ��� ����� ���������� �� 104-�� ����� �� ������ ������� Longname.

    ������� ����� ����������� ����� ��� ����������� ������ ������:

    #define IMAGE_ARCHIVE_LINKER MEMBER            "/                " 
    #define 1MAGE_ARCHIVE_LONGNAMES_MEMBER         "//          "


    ���. 8.16. ��FF-������ LIB-������

    ��� ��������� ������ ������ ���������� ������� ��� ���� ������������ ��� DLL, ���������� ������������� �������.

    BYTE Date[12]

    ���� � ����� �������� �����. ��� ����� �������� � ���������� ASCII-����.

    BYTE UserID[6]

    ���������� ASCII-������������� �������������� ������������. ��-��������, ������ �������� ������� NULL.

    BYTE GroupID[6]

    ���������� ASCII-������������� �������������� ������. ��-��������, ������ �������� ������� NULL.

    BYTE Mode[8]

    ���������� ASCII-������������� ��������� ������. ��-��������, ������ ����� ����.

    BYTE Size[10]

    ������ ������ �����, �������������� � ���������� ASCII-�����. ������ ������ ������� �� �� ���� (������ � ��� ��������� ���� Name).

    BYTE EndHeader[2]

    ASCII ������ \n.

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

    ������ LIB-���� ����� ��� ������ ������ ������������, ����������� ������� ���������� ��� ��������� ����� �����. ��� ����� ����� ��� "/" � ����������� �� ������� ���������� � �����. ������ ���� ������������ - ��� ���­��� ���� ������ � ������ "/", � ������ ���� ������������ - ��� ������ ���� ������ � ������ "/".

    ��� ����� ������������ - ���, �� ��������, ������� ������������� �������� � LIB-����� ������ �� ���������� ������ ����� ������ - ��������� �������, ������� �������� ������������� �������. ��� ����� ������������ ���­�� ��������� �������. ����� ����� ��� ����� ���������� ����������? ������ ���� ������������ ������ ���� ���������� � ��� �������, � ����� ��������� ������ ���� ����� � LIB-�����. ��� �������� � ������������� �������. ������ ���� ������������ ������ ���� ������� � ���������� �������, ��� ������ ��� ������� ����� �������� ��� ������������. � ������������ � ������������� Microsoft ����������� ���������� ������ ���� ������������ � ������ ���������� ������ ����.

    ������ ���� ������������ ����� ��������� ������.

    DWORD NumberOfSymbols

    ����� ������������� �������� � ������ ����������. ��� ����� ������������ � ������� big-endian (�������� �����­��� COFF-������� ��� �����, �������� �� ����� i386). ������� ConvertBigEndian � ����� LIBDUMP.C ��������� PEDUMP ������������ ������������ �� ������� big-endian � ������ little-endian, ������������ i386.

    DWORD Offsef[NumberOfSymbols]

    ������ �������� �������� ������ ������ ������. ��� �������� ����� ������ big-endian. ������ �� ���� ������ - ��� ���� ���� OBJ. ������ ������� ����� ������� ������������� ����� ������� � ������� ����������� ����� ASCII.

    BYTE StringTable[?]

    ��� ����������� ����� ����� � ����� � � ������.

    �� ��������, ������ ������� ������� Offset ������������� ������ �������������� �������, ��� �������� ��������­�� � ������� StringTable. ��������, ������ ������� ������� Offsets �������� ������� ������ � ������� StringTable. ����� ��������� PEDUMP �������� ���:

    First Linker Member:
     Symbols:  00000006
     MbrOffs   Name
     --------  -----------
     00000180  _DumpCAP@0
     00000180  _StartCAP@0
     00000180  _StopCAP@0
     ...
    

    ������ ������� ����� ������������ ���������� ��-�� ���������� �������, ������������ ��� �������� ������ ���­�����. ������ ���� ������������ ����� ��������� ������.

    DWORD NumberOfMembers

    ��� ������� ����� �������� ���������� ������ � ������ ��������� �������, ��������� ������ � �����.

    DWORD Offsets[NumberOfSymbols]

    ������ �������� �������� ������ ������ ������. � ������� �� ������� ����� ������������ ��� �������� ������ � ������������ ������� ������ (�.�. � ������� little-endian ��� i386).

    DWORD NumberOfSymbols

    ���������� ������������� �������� � ������� StringTable (�������������, � ���������� ������������� �������� � ����������). ��� ���� � ���� �� �������� ���������� ��������� � ��������� ����� ������� Indices.

    WORD Indices[NumberOfSymbols]

    ������ ������ �������� ������� (������ ���������� � 1) ������� Offsets (������ �� ��� ���� ������). ���� ������ ���� ����������� ������� ������� StringTable.

    BYTE SiringTable[NumberOfSymbols]

    ��� ����������� ����� ����� � ����� � � ������.

    ��� ���� ����� �������� ��������� ���� �� ��� �������, ��������� ������ ���� ������������, ����������� ���­���� ������������� ������ StringTable � ��������� ������������� ������ ������ � �������. ����� ����������� ������­���� ���� ������ ��� ������ ����� � ������� Indices. �������, ����������� �������� 1 �� ����� ����� � ������� Indeces � ���������� ��������� ��� ������ ������� Offsets. ��������� ������� ����� � ������� Offsets ��� ��� � ����� ��������� � ��������� �����, ���������� ������������� ������. ������� DumpSecondLinkerMember �� ����� LIBDUMP.C ���­������ PEDUMP ���������� ���� ������� � ��������.

    ���� Longnames

    ������ � ������ ��������� ����� Longnames - ��� ������ ����� ����� � ����� �, ��������� ���� �� ������. ������ ���������� � ������ Longnames, ���� ��� ������� ������, ����� ��������� � 16 ����, ����������������� ��� ���� Name � ��������� IMAGE_ARCHIVE_MEMBER_HEADER. � ���� ������ ���� Name �������� ������ "/", �� ������� ������� ���������� ASCII-������������� �������� ������ � ������ Longnames.

    ������

    ��� Win32 Microsoft ��������� �������� ��������� � �������� ��������� � ����������� ������. ��� ��������� ��������� Microsoft ���������� �����, ��� ��� �������������� ������, ����������� ��� ������ ������������ ������. ������� ���� ������ ������������������ �������� �������� - �������� ������������� � ���������� �����������. COFF-������ ��������� ������ ����������� �� �������� Win32. ��-������ �������� ����������� COFF-������� � ���������� ��� ������������� �� ���������� Win32.

    ������ ����� ��� ���������, ��� � ����������� ������ ���������� �� ��������� IMAGE_FILE_HEADER. �� ���� ���������� (�, ��������, ��� ����� �������������� ����������) ������� ������� ������. � ������� ������ ������� ��­������������� � �������� ���� ������ �����. ������� ���������� ������������ ��������� ��������� ������������ ��­�� � ������. ����� ���������� ������� ���������� ����������, ��-���� �������� ������� ������, ����������� �� ������ ������� � ����� (��������, ������������ ������� �������� �����). ������ ��������� (��� ����������), ������ ������ � �������� ������ ������ ��������� COFF- � ��-����� ����� ����� ��������� ���������� � ������ �������� � ������� �����. ��� ���������� �������� � ����� ����� ����� ���� ���������� � ������ ��� ������.


    ����� �� ����������, �������������� �� ���� �������, �� ����� ���� ������������� � ����� �� �� �� ���� ����� � ������ �� �� �� ���� ���������� ��� ����������� ���������� ���������� ��������� ����.
        ��������� 2    ������ 60        �������