![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
������ ������������ ����� ������������ ������� � ������������ ������� �������� ���������� � ������������ ������� ������������� � ������ ���������. ���� �������� ���� ������� ������� ������������ ����� � �� �������� ����� �� ������� ����� �������� ����������������, ��� �� �����, �� ����� ����� ���������� ������ ������ ���������� �� ������������ �������. ������������ ����������, ��������� ���������� � ���������� ������� � ��� ������ ��� ������� ������������� ������� ������������ �������, ������� ����� ������ �� ���� �������� ������� ����������� ������.
� ���� ����� �� �������� ������� � ����������� ����������� (�� � 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 �������� ���������, ����������� �� ��������� ������ � ������������� ��� ������ ��-������ � ������ ������� 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.
����� ��� ��� ������ ���������� ������� ��-�����, � ����� �� ����������� ��������� ����� �������� ����, ����������� ������� ����� ������. � �������� ����� ���������� � ���� ������������ ������� ������, ������������ ��� ��� ����� ��������, ������ � ������� ������������ ����� ��� 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) |
���������� ������ � ���- ��� OBJ-�����.
�����, ����� ���� ��� ������ ������������� (��� ������������, ���� ��� OBJ-����). � ���� ���� ������� ���������� ������, �������� � 16:00 31 ������� 1969 ����.
�������� �������� COFF-������� ��������. ��� ���� ������������ ������ � OBJ- � ��-������ � ����������� COFF-���������. ��-����� ������������ ������������� ���������� �������, ��� ��� ��������� ������ ��������� �� ����� IMAGE_DIRECTORY_ENTRY_DEBUG � �������� ������ (����� ��������� �������).
���������� �������� � COFF-������� ��������. ��. ���������� ����.
������ ��������������� ���������, ������� ����� ��������� �� ���� ����������. � ����������� ������ � ��� ������ ��������� IMAGE_OPTIONAL_HEADER, ������� ������� �� ���� ����������. � ��������� ������, �� ����������� Microsoft, ��� ���� ������ �������� ����. ������ ��� ��������� ���������� ������ KERNEL32.LIB ����� ���������� ��������� ���� � ��������� ��������� � ���� ����, ��� ��� ���������� � ������������ Microsoft � ��������� ������������.
�����, ���������� ���������� � �����. ����� ����������� ��������� ������ ���� (������ ���� ���������� � 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. �� ������� �������� ����� ����� ����������� ��� ���������� ��������� �������� �����.
�����-���������, ������������ ��������� ������������� �����. ���������� ��������� ��������:
0�0107 ����������� ��� 0�010� ���������� ����������� ����������� (�������� ��� ������� ����� ������) |
������ ������������, ������� ������ ������ ����. ����� ������ ���� ������������ � ���������� ����, � �� � �����������������. �������� ������ ������������ 2.23.
��������� ������ ����������� ������, ����������� � ������� �������. ������ ����������� ������ ����� ������ ���� ����������� ������, ��� ��� ��� ���� ������ ������������� ������� ������ .text.
��������������, ��� ��� ����� ������ ���� ������, ��������� �� ������������������ ������ (�� ������� �������� ������������ ����.) ������ �� ������, ����� ��� ��������� � �������� ������ ������������������ ������ � �����.
������ ������, ��� ������� ��������� �������� ����� � ����������� �������� ������������, �� ������� �� �������� �������� ����� � �������� �����. � ������ ������ ��������� ��� ������ �� ������� ����� �����-���� ������������ �������� � ������ �������� �������������������� ������ (Uninitialized Data). �������������������� ������ ������ ��������� � ������ ��� ��������� .bss.
�����, � �������� ����������� �������� ����������. ��� RVA, ������� ����� ����� � ������ .text. ��� ���� ��������� ��� ��� ���-�����, ��� � ��� DLL.
RVA, � �������� ���������� ����������� ������ �����. ����������� ������ ���� ������ ���� � ������ ����� �������� ������ � ����� ��������� ��-�����. ���� RVA ������ ����� 0�1000 ��� ���-������, ��������� �������������� Microsoft. ��� TLINK32 (Borland) �������� ����� ���� ����� 0�10000, ��� ��� �� ��������� ���� ����������� ����������� ������� �� ������� � 64 ����� � ������� �� 4 ����� � ������ ������������ Microsoft.
RVA, � �������� ���������� ������ ������ �����. ������ ������ ������ ���� ���������� � ������, ����� ��������� ��-����� � ����������� ������.
����� ����������� ������� ����������� ����, �� ������������, ��� ���� ����� ��������� � ������������ ����� � ������. ��� ������ ���� ����� � �������� � ���� ����. ������ ������ �������� ��������� ������������ �������� �����������. ���� ��������� ������������� ��������� ���� � ������ �� ����� ������, �� ��������� ����� �������� �� ��������� �� � ����� ���������. � �������� �� ���� ������� ��������� ��� ���������� ����������� ������������ ����. � ����������� ������ 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 ������, ������ ��� ��������� ������ ��������� ������� ��������. � ����� ������� �������� ������� �����.
����� ����������� � ������ ������ ������ ����� ����������� ���������� � ������������ ������, �������� ������ ��������. � ������ �������� ������� ����������� �������� ����� ���� 0�1000 ������������ ������������� Microsoft �� ���������. TLINK � Borland C++ ���������� �� ��������� 0�10000 (64 �����).
� ������ ��-����� �������� ������, ������� ������ � ������ ������ ������, ����� ����������� ���������� � ������, �������� ������ ��������. ��������, ��������������� �� ���������, ����� 0�200 ���� �, ��������, ������� ��� ��� ����, ����� ������ ������ ������ ��������� � ������� ��������� ������� (0�200 ���� � ��� ��� ��� ������ ��������� �������). ��� ���� ������������ ������� ������������ ��������/������� � NE-������. � ������� �� NE-������, ��-����� �� ������� �� ����� ������, ��� ��� ������, �������� ��� ������������ ������ �����, ������ ����� �������������.
����� ������ ������ ������������ �������, ������� ����� ������������ ������ ����������� ����. ���������� ����� ���� �� ������ ����, ��� ��� ���� ���������� (��������� ����), ������, ����� ����� �� ��������������. � ������� ����� ������ Win32 � ���� ���� ���������� ��������, ��������������� ������ 1.0 .
������������ ������������� ����. ��� ���� ��������� ����� ��������� ������ ���-������ � DLL. ��� ���� ��������������� � ������� ����� ������������ /VERSION, ��������:
LINK/VERSION:2.0 myobj.obj |
��� ���� �������� ����� ������ ������ ����������, ����������� ��������� ������ ����������� ����. �������� �������� � ���� ���� 4.0 (���������� Windows 4.0, ��� ����������� Windows 95).
��� ����, ��-��������, ������ ����� ����.
������������ ����� ������ ���� ������ �����������, ����������� ��� ��������� ����������. ��� �������� ����� ������� ������� ������, ������� � �������� ������ ����������� � ���������� ������� ����� ��������� ������. ����� ����� ������ �������� �� ��������� ������� ������� ������.
������ ��������� ��-����� � ������� ������ (�������). �������� ������ ��� ������ ���������� ����� ����� ���� ������������ ������ ���������.
���������������� �������� ����������� ����� �������� ����������� ���������� ����� (CRC-��������) ��� ������� �����. ��� � ��� ������ ����������� �������� Microsoft, ��� ���� ������ ������������ � ��������������� � ����. ������ ��� ���� DLL ���������, DLL, ����������� �� ����� �������� ��, � ��������� DLL ��� �����������, ����� ������ ����� ���������� ��������. �������� ��� ����������� ����� ����� ����� � IMAGEHLP.DLL. ��������� IMAGEHLP.DLL ������������ � WIN32 SDK.
��� ����������, ������� ������ ����������� ���� ���������� ��� ������ ����������������� ����������. 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 |
����� ������, ������������, ��� ����� ��������������� ����� ���������� ������� ������������� DLL (��������, DllMain()). ��� ��������, ��-��������, ������ ������ ��������������� � ����, ������ ������������ ������� �������� ������� ������������� DLL ��� ���� ������� �������. ���������� ��������� ��������:
1 � �����, ����� DLL ������� ��������� � �������� ������������ �������� 2 � �����, ����� ������� ����������� ������ 4 � �����, ����� ������� �������� ������ 8 � ����� ��� ������ �� DLL |
����� ����������� ������, ������������� ��� ��������� ���� �������. ������ �� ��� ��� ������ ���������� (��. ��������� ����). �� ��������� ��� ���� ��������������� � 0�100000 (1 �����). ���� ������������ ��������� 0 � �������� ������� ����� � CreateThread(), ������������ ������� ����� ����� ���� ���� �� �������.
���������� ������, ���������� ���������� ��� �������� ���� �������. ��� ���� �� ��������� ����� 0�1000 ���� (1 ��������) ��� ������������� Microsoft, ����� ��� TLINK32 ������ ��� ������ 0�2000 (2 ��������).
����� ����������� ������, ������������� ��� ����������� ���� ���������. ���� ���������� ���� ����� ��������, ������ GetProcessHeapO. ������ �� ��� ��� ������ ���������� (��. ��������� ����).
����� ����������� ������, ���������� ���������� ��� ���� ��������. �� ��������� ����������� ������ ��� ���� ������ 0�1000 ����.
��� ������� �� WINNT.H, ��� ����, ��-��������, ������� � ���������� ���������. ��� ������� �� ����������� ������ ����������� ����, � �������� ���� �� ���� �� ���� ����� ��� �������������. ��� ����� ������, ��� � ������� ������������ ������������� ��. ���������� ��������� ��������:
1 � ��������� �� ������� ���������� ����� �������� ��������? 2 � ��������� �� �������� ��������� ����� ��������? |
���������� ������ � ������� DataDirectory (��. �������� ���������� ����). ����������� ����������� �������� ������ ������ ��� �������� ������ 16.
������ �������� ���� 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 � ����� ��������� ������.
��� 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 � ����������� ������ ������ ������.
� ������ ���-������ ��� ���� �������� RVA, ���� ��������� ������ ���������� ������. ����� ��������� �������� ��������� ����� ������ ������ � ������, ���������� � ������������ ������ ������, ������������� � ���� ����, ��������� ������� ����� �����������. �������� Microsoft ������������� �� ��������� RVA ������ ������ ������ 0�1000. ��� ��������� ������ ��� ���� �� ����� �������� ������ � ��������������� � 0.
� ���-������ ��� ���� �������� ������ ������, ����������� �� ��������� ������� ������� ������� �����. ��������, ��������, ��� ������ ������������ ����� 0�200. ���� ���� VirtualSize ���������, ��� ����� ������ ��35� ����, �� � ������ ���� ����� �������, ��� ������ ������ 0�400 ����. ��� OBJ-������ ��� ���� �������� ������ ������ ������, ��������������� ������������ ��� �����������. ������� �������, ��� OBJ-������ ��� ������������ ���� VirtualSize � ���-������.
��� �������� �������� �������, ��� ��������� �������� ������ ��� ������. ���� ������������ ��� ���������� � ������ ��- ��� COFF-���� (������ ����, ����� �������� �������� ������������ �������), ��� ���� ������, ��� ���� VirtualAddress. �������� �������� ��, ��� � ���� ������ ��������� ��������� �������� ����������� ����� �����, ��� ��� ������ ��� ������ ����� ���������� �� ����� ��������, � �� �� RVA, ���������� � ���� VirtualAddress.
� ��������� ������ ��� �������� �������� ���������� � ��������� ��� ������ ������. ���������� � ��������� � ����� ������ ���������� ����� ������� �� ��������� ������� ��� ���� ������. � ���-������ ��� (� ���������) ���� �� ����� ��������� �������� � ��������������� � ����. ����� ����������� ������� ���-����, �� ��������� ����������� ��������, � �� ����� �������� �������� ��������� ������ ������� �������� �������� � ��������������� �������. ���������� � ������� ��������� � ��������������� �������� �������� � ������� ������� �������� � ��������������� �������, ��� ��� ��� ������������� � ���-����� �������� ������ �������� ��� ������ ������ ����� �������� ������ ������.
�������� �������� ������� ������� �����. ������� ������� ����� ������ � ������������ ������ ����� ��������� ����� �������, �� ������� ����� ����� ���, ��������������� ��� ������ ������. � ����������� ���������� ��������, ����� ��� ������ CodeView, ���������� � ������� ����� �������� ��� ����� ���������� ���������. � ���������� ������� COFF, ������, ���������� � ������� ����� ������������� ������� �� ���������� � ���������� ������/�����. ������ ������ ������ � ����������� ����� (��������, .text ��� CODE) ����� ������ �����. � ���-������ ������ ����� ������� � ����� ����� ����� �������� ������ ��� ������. � ��������� ������ ������� ������� ����� ��� ������ ������� �� ��������� ������� ������ � �������� ����������� ��� ���� ������. � ������������ ������ ������ ������� ����� �����, � ������� "���������� COFF-���������".
���������� ����������� � ������� �������� ��� ������ ������ (���� PointerToRelocations ��������� ����). ��� ���� ������������, ��-��������, ������ � ��������� ������.
���������� ������� ����� � ������� ������� ����� ��� ������ ������ (���� PointerToLinenumbers ��������� ����).
��, ��� ������� ����� ������������� �������� ������� (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 (��� �������, ��� ����� ������������ ������������ � ������ �����).
����� ���� ��� �������� ������� ����� ������������� � ���, ��� ����� ������ � ��� ������ �����������, ����� ������� � ����� ��������� �������� ������, ����� ������������� � ���- � ��������� ������. � ���� ���� �������� �� � ���� ������ ������ ������� �������������, ��, ��� �� �����, �������� ������, � �������� ������������ ������������ ��������� (���� ���� �� �� ���� � �� �����������). ������ ������������ � ������� �������� � � ������������ � ��������� �������� �� ���������.
� ���� ������ ������ ���� ����������� ��� ������ ����������, ������������ ������������ ��� �����������. ��������� ��-����� �������� � 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 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.
��� �� ��������� ����������� ��� �������� � ������ .text, ��� � ������������������ ������ �������� � ������ .data. ������������������ ������ ������� �� ��� ���������� � ����������� ����������, ������� ���� ������������������� �� ����� ����������. ��� ����� �������� ��������� �������� (��������, ������ "Hello World" � ��������� C/C++). ����������� ���������� ��� ������ .data �� ������ ��������� � LIB-������ � ���� ������ .data � ���-�����. ��������� ���������� ����������� � ����� ������� � �� �������� ����� � ������� .data � .bss.
Borland C++ ���������� �� ��������� ��� DATA ��� ������ ������. ��� ������������ ������ .data � ����������� Microsoft (��. ���������� ����� "������ .data").
� ������ .bss �������� �������������������� ����������� � ���������� ����������. ����������� ���������� ��� ������ .bss �� ������ ��������� � LIB-������ � ���� ������ .bss � ���-�����. � ������� ������ ���� RawDataOffset ��� ������ .bss ��������������� � 0, ���������, ��� ��� ������ �� �������� �������� ����� � �����. TLINK32 �� ������� ������ .bss. ������ ����� �� ��������� ����������� ������ ������ DATA ���, ����� �������� �������������������� ������.
��� ���� ������ ��� ������������������ ������, ������������ ������������ ��������� ���������� ��������� Microsoft C/C++ (������ � �������� .CRT � C/C++ runtime libraries). ������ �� ���� ������ ������������ ��� ����� �����, ��� ����� ������������� ����������� ������� C++ ����� ������� main ��� WinMain.
������ .rsrc �������� ������� ������. �� ������ ������� �������� NT �������� .RES-���� 16-���������� RC.EXE ���� ������, ������� �� ������������� ������������� Microsoft. ��������� CVTRES ���������� ��� .RES-����� � ��������� ����� COFF-�������, ������� ������ �������� � ������ .rsrc ������ ���������� �����. ����� ����� ����������� ��� ������������� ��������� ���� �������� ��� ��� ���� ��������� ���� ��� ����������, ��� ��������� ������������ �� ������� �� ���-���� ��������� � ��������. ����� ����������� ������������ Microsoft ��������� ���������� ������������ ����� .RES ���������������. � �������� � ������� ������ �������� ����� � ���� �����, � ������� "������� ��-������".
������ .idata �������� ���������� � �������� (� ������), ������� ������ ����������� �� ������ DLL. ��� ������ ������������ ���������� ������� ������ � NE-�����. �������� ������� ������� � ���, ��� ������ �������, ������������� ��-������, ����������� � ���� ������. ����� �������� ������������� ���������� � NE-�����, ������������ �������� �� ������ � ��������� � ����� �������� ������ ��� ������� �� ���������. � �������� ����� �������� � ������� ������� ������� ����� � ���� �����, � ������� "������ ��-������".
������ .edata ������������ �������� ������� � ������, ������� ��-���� ������������ ��� ������������� ������� ��������. �� ���������� ��� NE-����� � ��� ���������� ������� �����, ������� ����������� ���� � ������� ������������� ����. � ������� �� Win 16, ����� ����� ��������� ������������� �������������� ���-���� �� ���-������, ��� ��� ������ ������ .edata ����� ������� ������ � DLL. ����������� �������� ���-�����, ��������� Borland C++, �������, ��-��������, ������ ������������ ������� (_GetExceptDLLinfo) ��� ����������� ������������� ����������� ��������� ���������� ���������.
������ ������� �������� ����������� ����� � ������� "������� ��-������" � ���� �����. ��� ������������� ������� Microsoft ������ �� ������ .edata �������� � ��-���� ����� ���� .���. ������� �������, ����������� �� ������� ��� ���������� ���. ������ ����� �� ���������� �� ��������� ��������� (LIB32), ������������ OBJ-����� � ���������� ���� .���, ������� ����������� ��������� � ���� �������� ������� ��� ����������. ��, ������ ���! ��� ����������� ����� .��� � � ���������������� ����� ���� OBJ-����� � ������ �����������. ��������� ��������� PEDUMP (������������ ����� � ���� �����) � ������ /S (�������� ������� ��������), ����� ������� �������, �������������� ����� ����� .���.
������ .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 � ��� �������� �����������, �.�. ���� � �����������, � ������� ���������� ��������� � ���� �������� ����� �������� ������������� ������� �������� � �������� ������� ��������. � �������� ��������� � ��������� � ������� "������� �������� ��-������".
����� ������������ ��������� ����������� "__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 �����, ��� �������, ������ ��������������. ��-������, � ���-������, ��������� � ������� ������������ 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 ���� ������ � COFF-��������� ������; � ��� �������� ���������� � �������� CodeView � �� �����. �������� ���� ������ ��������� �� �������� ���������, ������������ ��� ���� ���� ����������� ������������� Microsoft ($$SYMBOLS � $$TYPES). ������������ ���������� ������ .debug$T � ������� ���� � ����� .PDB, ����������� ���������� CodeView � ����� ��� ���� ��������� ������ �������. ���������� CodeView ��� ������������ ���-����� ����������� �������� � ���� .PDB.
��� ������ ���� ������ � ��������� ������. ��� �������� ����� ������ ��� ������������. ��������, ��������� ������ ���������� � ������ .drective � ����� ��������� �����, ������� � ������������ � ������� ����������� Microsoft Visual C++:
-defaultlib:LIBC -defaultlib:OLDNAMES. |
��� ������������� � ��������� __declspec(export) ���������� ������ ������������ ���������� ��������� ������ � ������ .drectve (��������, exportMyFunction).
� ��������� ������ ������, ���������� $ (��������, .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 ����� ��������� ������.
� ���� ���� ���������� �������� (RVA) ������� ������� ����. ������ �� ���� ������� ���� � ���������������� �������� ������������ IMAGE_THUNK_DATA. ������ ������� ����� IMAGE_THUNK_DATA ������������� ����� �������, ������������� ������ ���-������ ��� DLL. � ����� ������ IMAGE_THUNK_DATA DWORD ������� �����. ���� ������������ ������� BIND, �� ���� ������ ������� ���� �� ����������, � �������������� ������ ������� ���� FirstThunk (������ �������).
������� � ������� � ����, �����������, ����� ��� ������ ������ ����. ������ ��� ���� �������� 0. ��� �� ����� ������� Microsoft BIND ��������� ��� ���� ����� � �������� �� DLL, �� ������� ��������� ������ 1MAGE_IMPORT_DESCRIPTOR.
��� ���� ����� ��������� � ��������, ����� ���� DLL �������� ������ �� �����-�� ���� ������� ������ DLL. ��������, � Windows NT KERNEL32.DLL �������� ��������� ����� �������������� ������� NTDLL.DLL. ���������� ����� ��������� ��� ������� ������� � KERNEL32.DLL, �� � ����� ��� ����� ����� � NTDLL.DLL. ��� ���� �������� ��������� � ������ FirstThunk (������ �������). �������, ��������� ���� �����, ����� ������� � ������ DLL. � ���������, ������ ������� ������� ���� ������� ������ � ������������ Microsoft. �� �������������� ����������� � ������� ����������� � ������� "�������� ��������" � ���� �����.
��� RVA ������ �������� ASCII, �������������� ����� � ���������� ����� ������������� DLL (��������, KERNEL32.DLL ��� USER32.DLL).
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 ������������� ������������� �������. ������������� �������� ����� ������� �� ����, ��� �� ���� ��� �������� � ������ � ���� �� ������� ������������� �� ����� ��� �� ������ (�������������� �� ����� ����������� ����).
��� �������������� ������� �� ������ (��� ������ �����) ������� ��� (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. ��� ������� ��������� �������� ��������� �������.
��������� ������� � ���, ����� ����� �������� � ������������� �������. � ������� �� NE-������ ��� �������� �� ������� ���� ������. ��������� ���������� �� � �������� ���������� ��������������� �������� ��� ��������� ������ �������������� �������.
������ ASCIIZ � ������ ������������� �������. ������������� ������������� �������� ����� IMAGE_THUNK_DATA ���������� ����� ����, ��� ��-���� �������� ����������� Win32. ��������� Win32 ���������� �������� ���������� �� �������� ����� IMAGE_THUNK_DATA ��� ������ ������ ������������� ������� (���� �� �����, ���� �� ������). ����� ��������� ���������� � ������� ����� 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 �������� ��������� �������.
��� ����, ��-��������, ������� �� ������������ � ������ ��������������� � 0.
������� � ������� � ����, ����������� ����� �������� �����.
��� ����, ��-��������, ������� �� ������������ � ������ ��������������� � 0.
RVA ������ ASCIIZ � ������ ���� DLL (��������, MYDLL.DLL).
��������� ����� �������� ��� �������, �������������� ������ �������. ��������, ���� ������ �������������� ������� 10, 11 � 12, �� ��� ���� ����� ��������� 10.
���������� ��������� � ������� AddressOfFunctions. ��� ����� ����� �������������� ������ ������� �������. ������ ��� �������� ����� ��, ��� � � ���� NumberOfNames (��. ��������� ��������), ���� ��� ����� ���� � ����������.
���������� ��������� � ������� AddressOfNames. ��� �������� ������������� ���������� �������, �������������� �� �����, ������� ������ (���� � �� ������) ����� ������ ���������� �������������� �������.
��� ���� �������� RVA � ��������� �� ������ ������� �������. ������ ������� � ��� RVA ����� ����� ��� ������ �������������� ������� �������.
��� ���� �������� RVA � ��������� �� ������ ���������� ������. ������ �������� ����� �������, �������������� �� ����� �� ������� ������.
��� ���� �������� 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 ����� ��������� ������.
������������ ��� ���� ����� ��������� ����� ��������, ��, ��-��������, ��� ������ ����� 0.
������� � ������� � ���� �������� �������.
������������ ��� ���� ����� �� ��������� ����� ������ �������. ��-��������, ��� ������ ����� 0.
���������� ��������� ������� (������ �����), ������������ ����� � ��������� �� ���� ����������. �� �������������� ����������� ����������� � �������� ���� DirectoryEntries.
���������� ��������� �������, ������������ ����� ID � ��������� �� ���� ���������� � ����� �������������� ����������. �� �������������� ����������� ����������� � �������� ���� 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, ������� �������� ��������� �������.
��� ���� �������� ��������� RVA ��� ������� ����� ��������. �������� ������ ��������, ������� ������� ������, ����������� � ���� �������� ��� ��������� ��������� RVA, � �������� ������ ���� ��������� ������ ��������.
������ ������ ��������� ���� ��� ����������� �������� ���� WORD. ����� ���������� ���������� �������� � ������ �����, ����� �� �������� ����� ���� ������� ������ IMAGE_BASE_RELOCATION (8 ����) � ����� ��������� �� 2 (������ ���� WORD). ��������, ���� ��� ���� �������� �������� 44, �� � ����� ������� 18 ��������:
(44 - sizeof(IMAGE_BASE_RELOCATION))sizeof(WORD) = 18 |
�� ����� ���� ��� �� ��������� �����, � ������ ����, ���������� ��������� � ������� ����������� �� �������, ����������� � �������� ����������� �������� �����. ������� 12 �������� ������� �� ���� ���� ������������ ����������� ��������, ������� ������ ���� ���������� � �������� � ���� VirtualAddress �� ��������� ������� ����� ��������. ������� 4 ������� ������� ����� �������� ����� ��������. ��� ��-������, ����������� �� ����������� ����� Intel, ���������� ������ ��� ���� ��������:
���� ����� ������ ��������, ������������ � 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-�����, ��������� ������������ 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; |
������� ������ ������ �� ���� ����� ��������.
���������� ��� ����� ����������� ����� ���������, � ����������� �� ��� �����. ���� ��� �� ������� 8 ������, �� ���� ����������� ShortName �������� ���������� ��� � ������� ASCIIZ. ������� ���� ���������� � ������, ����� ���������� ��� �������� � �������� 8 ������; ��� ���� ������ �� ������������ �����. ���� ���� Name.Short �� ����� ����, ������� ������������ ���� ����������� ShortName. ������ ������ ������������� ����������� ����� �����������, ����� ���� Name.Short ����� 0. � ���� �������� ���� Name.Long �������� �������� ��������� � ������� �����. ������� ����� - ��� �� ��� ����, ��� ������ ASCIIZ-�����, ��������� ���� �� ������ � ������. ��� ������� ���������� ����� �� �������� ��������. ����� ��������� ����� ������ ������� �����, ����� ������ �������� ���������� �������� �� ������ ��������� IMAGE_SYMBOL � ��������� ��������� � ���������� ������ ������� ��������. ����� ������� ����� � ������ ��������� � ������� �����, ������� �������� 0 � ������� �����.
��� ���� �������� ��������, ��������� � ��������. ��� ���������� �������� � �������� ������ (�.�. ������� � ���������� ����������) ���� Value �������� RVA ��������, �� ������� ��������� ������ ������. ��� �������� ���������������� ����� ��� ��������� ������ ��������. � ����. 8.2 ����������� ������� �������� ��������� ���������� ���� Value ��� ����������� ��������.
������� 8.2. ����������� ������� � COFF-�������� ��������
��� ������� | ������������� |
---|---|
.file | ������ ���������� ������� ���������� ������� .file |
.data | ��������� RVA ������� ������. ��� ������� ������������ �������� ������, �������� ���������� �������� .file |
.text | ��������� RVA ������� ������������ ����. ��� ������� ������������ �������� ������, �������� ���������� �������� .file |
.If | ���������� ��������� � ������� ������� ����� ��� �����-���� �������, ������� �������� ���������� ��������, ������������ ������� |
���� SectionNumber �������� ����� ������, ������� ����������� ������. ��������, ������� ��� ���������� ���������� �����, ��� �������, ����� � ���� ���� ����� ������ .data. ������ ����������� ������ ��-�����, ���������� ��� ������ ����������� ��������.
��� �������. ���� WINNT.H ���������� ���������� ������� ������ ����� �������� (int, struct, enum � �.�.). (��. ������ �������� � ���������� #defines IMAGE_SYM_TYPE_xxx.) � ���������, �������� Microsoft, ��-��������, �� ���������� �������� ���� ��������� �����. ������ ����� ��� ���������� ���������� � ������� ����� ��� NULL ��� ��� �������, ������������ NULL.
����� ������ �������. ��� � ��� ����� �������� ���� WINNT.H ���������� ���������� ������� ������ ������� ������: automatic, static, register, label � �.�. (��. ������ �������� � ���������� #define IMAGE_SYM_CLASS_xxx.) �����-����, ��� � � ������ �����, �������� Microsoft ������� ������ ��������� ���������� ����������. ��� ���������� ���������� � ������� ����� ����� ������ �������. �� ���� ���������, �� ���������� ������� ������� ������� ��� ��������� ����������, ����������� ���������� � �.�.
�� ����� ���� � ������� ������� ��������. ������� �������� �� �������� � �������� �������� �������� 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-������� ������, ����������� � �������� � ������, ����������� � ������� �����, ��������� � ������ �������� �����. (� �������� ����� 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.
���������� �������� � COFF-������� ��������. ������ ���� �������� ����� �� ��������, ��� � ���� IMAGE_FILE_HEADER.NumberOfSymbols, ��� ����������� ������ � ������� "��������� ��-�����".
�������� �������� COFF-������� �������� �� ��������� � ������ ��������������� ���������. ����������� ���� �������� � RVA ��������� IMAGE_COFF_SYMBOLS_HEADER ���� ���������, ����������� �� ��������� ���� IMAGE_FILE_HEADER.PointerToSymbolTable.
���������� ��������� � ������� ������� ����� (���. 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. �������� ������ ���������� �� ������� ������� ����� � ���-�����
�������� �������� COFF-������� ������� ����� �� ��������� � ������ ��������������� ���������.
RVA ������� ����� ������������ ������������ ���� � �����������. ��� ���� ������ �������� �������� ������ RVA ������ .text. ��� �������� ����� ����� �����, ������������ ������� ������ ������������ �����.
RVA ���������� ����� ������������ ������������ ���� � �����������. ���� ���� ������ ���� ����������� ������ (.text), �� ������ ���� ����� ����� RVA ���� ������ ���� ������ �� �������� ������. ��� �������� ����� ����� �����, ������������ ������� ������ ������������ �����.
RVA ������� ����� ������ � �����������. �������� ����� ���� ������ ����� RVA ������ .bss.
RVA ���������� ����� ��������� ��������� ������ � �����������. �������, ������������ ������ FirstByteOfData � LastByteOfData, ����� ����������� ��������� ������ (��������, .bss, .rdata � .data).
COFF-������� ������� �����, �� ������� ��������� ��������� IMAGE_COFF_SYMBOLS_HEADER, �������� ����� ������� - ��� ������ ������ �������� IMAGE_LINENUMBER. ������ ��������� ������ � ������������ ����� ������ ������������ ���� ��������� ����� �� RVA � ����������� �����������. ���. 8.15 ��������� ������� ������� ������� �����, ���������� ���������� PEDUMP. ��������� IMAGE_LINENUMBER ����� ��� ���� - ����������� � �����.
union{
DWORD SymbolTableIndex;
DWORD VirtualAddress;
}Type; |
���� ���� Linenumber (��. ����) ���������, �� ��� ������� ���������� ��� RVA ������ ������������ ����. ���� ���� Linenumber ����� ����, �� ������ ���� �������� ������ � ������� ��������. ���������� ������, �� ������� ��������� ���� ������, ���������� �������. ��� ������ ������� ����� ��� ���� ������� ������� ����� �� ���� ����������� �������. �� ������������ ������ ��������� PEDUMP �����, ��� ������� ������� ����� ������� �� ������ ������� ������� ��������, �� ������� ���� ������� ������ ������� �����, � ����� ��� - ������ ������ ������� ������� �������� � �. �.
�������� ����� ������ ������������ ������ �������. ��� ���� �� �������� ������� ������ � �����. ����� ��������� ��� � ������� ��� ������������� ����� ������ � �����, ������� ����� � ������� �������� ����� ��������� ������ ��������������� �������. ��������������� ������� - ��� �������, ������� 0 � ������ ���� � ����� ��������� ������ ������ ������. ���� ���-���� �������� ����������, �������� ����� ��������� PEDUMP �� ���. 8.15.
���� ��������� ������ ������ � ������� ����� ������ ����������� ������, �� ������� ������ ���� ��������������� �������� ���������, ����������� � ������� �����, � ������� ������. ��������� IMAGE_SECTION_HEADER ������ ������ �������� �������� �������� � ������� ������� ����� ����� ������ �������. ��������� ����� COFF-������� ���� �������� ���������� � ������� ����� � �������, ������� ��� ������ ��� ������. � ��������� ������ ����������� ��������� IMAGE_COFF_SYMBOLS_HEADER, ������� ������������ �������� ������ ������ ������� ����� � ������� �������� IMAGE_SECTION_HEADER.
�� ����� ����� ����������� ���������� � ������������ �������, ��� ������ ��������� � ������� ����� ���������� ��� ��� � ��������� COFF-������, ��� � � ��-������, ��������� �� ���� ��������� ������. ��� ��������� COFF-�����, ��� � ��-����� ����� � ����� ������ (��� ����� ����) ��������� IMAGE_FILE_HEADER. �� ���� ���������� ������� ������� ������, ���������� ���������� ��� ���� ������� �����. ��� ������� ����� ����� ���������� ������� ������ ������� ����� � ���������� ������, ���� ��-����� ����� ��������� �������������� ���������� ������� �� � COFF-�����. ������� �������� ���� �������� ����� ������� � �������� ����������� ���� ��������� PEDUMP. ����� ������� ���� � ���� ��������� - COMMON.C. ���� �������� ���� �������� ��� ������������, ������� ����� �������������� ��� ������� ���������, ��������������� ��-�����, ��� � �������, ��������������� ����� ��������� ������.
��� �������� ���� �������� �������� �� ��������. �� ���� - ����������� ��������� ������ ������������. ������������ �������� ���-����� �� ������ ���������� ����� ������ ��������� � ������� ���������� ������ � ��������� ������� �������� �������� � �����������. ���� ��� � ���� ����� ������������ ���� ��������� COFF-���� ��� ������� ��-�����. ����������� ��� ���������� ���� ��������� �������, � � ���������� �� �����.
������������ � ��������� 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.
��� ����� ������. ���� ������ "/" ���������� ����� ASCII-������ (��������, FOO.OBJ/), �� ������ ����� �������� "/" ������������ ��� �����. ���� ��� ���������� � ������� "/", �� ������� ������� ���������� ����� (��������, /104), �� ����� �������� ��������� ����� ����� ������ ������ ����� Longnames LIB-�����. � ���������� ������� ��� ����� ���������� �� 104-�� ����� �� ������ ������� Longname.
������� ����� ����������� ����� ��� ����������� ������ ������:
#define IMAGE_ARCHIVE_LINKER MEMBER "/ " #define 1MAGE_ARCHIVE_LONGNAMES_MEMBER "// " |
���. 8.16. ��FF-������
LIB-������
��� ��������� ������ ������ ���������� ������� ��� ���� ������������ ��� DLL, ���������� ������������� �������.
���� � ����� �������� �����. ��� ����� �������� � ���������� ASCII-����.
���������� ASCII-������������� �������������� ������������. ��-��������, ������ �������� ������� NULL.
���������� ASCII-������������� �������������� ������. ��-��������, ������ �������� ������� NULL.
���������� ASCII-������������� ��������� ������. ��-��������, ������ ����� ����.
������ ������ �����, �������������� � ���������� ASCII-�����. ������ ������ ������� �� �� ���� (������ � ��� ��������� ���� Name).
ASCII ������ \n.
������ LIB-���� ����� ��� ������ ������ ������������, ����������� ������� ���������� ��� ��������� ����� �����. ��� ����� ����� ��� "/" � ����������� �� ������� ���������� � �����. ������ ���� ������������ - ��� ������ ���� ������ � ������ "/", � ������ ���� ������������ - ��� ������ ���� ������ � ������ "/".
��� ����� ������������ - ���, �� ��������, ������� ������������� �������� � LIB-����� ������ �� ���������� ������ ����� ������ - ��������� �������, ������� �������� ������������� �������. ��� ����� ������������ ����� ��������� �������. ����� ����� ��� ����� ���������� ����������? ������ ���� ������������ ������ ���� ���������� � ��� �������, � ����� ��������� ������ ���� ����� � LIB-�����. ��� �������� � ������������� �������. ������ ���� ������������ ������ ���� ������� � ���������� �������, ��� ������ ��� ������� ����� �������� ��� ������������. � ������������ � ������������� Microsoft ����������� ���������� ������ ���� ������������ � ������ ���������� ������ ����.
������ ���� ������������ ����� ��������� ������.
����� ������������� �������� � ������ ����������. ��� ����� ������������ � ������� big-endian (�������� �������� COFF-������� ��� �����, �������� �� ����� i386). ������� ConvertBigEndian � ����� LIBDUMP.C ��������� PEDUMP ������������ ������������ �� ������� big-endian � ������ little-endian, ������������ i386.
������ �������� �������� ������ ������ ������. ��� �������� ����� ������ big-endian. ������ �� ���� ������ - ��� ���� ���� OBJ. ������ ������� ����� ������� ������������� ����� ������� � ������� ����������� ����� ASCII.
��� ����������� ����� ����� � ����� � � ������.
�� ��������, ������ ������� ������� Offset ������������� ������ �������������� �������, ��� �������� ���������� � ������� StringTable. ��������, ������ ������� ������� Offsets �������� ������� ������ � ������� StringTable. ����� ��������� PEDUMP �������� ���:
First Linker Member: Symbols: 00000006 MbrOffs Name -------- ----------- 00000180 _DumpCAP@0 00000180 _StartCAP@0 00000180 _StopCAP@0 ... |
������ ������� ����� ������������ ���������� ��-�� ���������� �������, ������������ ��� �������� ������ ��������. ������ ���� ������������ ����� ��������� ������.
��� ������� ����� �������� ���������� ������ � ������ ��������� �������, ��������� ������ � �����.
������ �������� �������� ������ ������ ������. � ������� �� ������� ����� ������������ ��� �������� ������ � ������������ ������� ������ (�.�. � ������� little-endian ��� i386).
���������� ������������� �������� � ������� StringTable (�������������, � ���������� ������������� �������� � ����������). ��� ���� � ���� �� �������� ���������� ��������� � ��������� ����� ������� Indices.
������ ������ �������� ������� (������ ���������� � 1) ������� Offsets (������ �� ��� ���� ������). ���� ������ ���� ����������� ������� ������� StringTable.
��� ����������� ����� ����� � ����� � � ������.
��� ���� ����� �������� ��������� ���� �� ��� �������, ��������� ������ ���� ������������, ����������� ������� ������������� ������ StringTable � ��������� ������������� ������ ������ � �������. ����� ����������� ���������� ���� ������ ��� ������ ����� � ������� Indices. �������, ����������� �������� 1 �� ����� ����� � ������� Indeces � ���������� ��������� ��� ������ ������� Offsets. ��������� ������� ����� � ������� Offsets ��� ��� � ����� ��������� � ��������� �����, ���������� ������������� ������. ������� DumpSecondLinkerMember �� ����� LIBDUMP.C ��������� PEDUMP ���������� ���� ������� � ��������.
������ � ������ ��������� ����� Longnames - ��� ������ ����� ����� � ����� �, ��������� ���� �� ������. ������ ���������� � ������ Longnames, ���� ��� ������� ������, ����� ��������� � 16 ����, ����������������� ��� ���� Name � ��������� IMAGE_ARCHIVE_MEMBER_HEADER. � ���� ������ ���� Name �������� ������ "/", �� ������� ������� ���������� ASCII-������������� �������� ������ � ������ Longnames.
��� Win32 Microsoft ��������� �������� ��������� � �������� ��������� � ����������� ������. ��� ��������� ��������� Microsoft ���������� �����, ��� ��� �������������� ������, ����������� ��� ������ ������������ ������. ������� ���� ������ ������������������ �������� �������� - �������� ������������� � ���������� �����������. COFF-������ ��������� ������ ����������� �� �������� Win32. ��-������ �������� ����������� COFF-������� � ���������� ��� ������������� �� ���������� Win32.
������ ����� ��� ���������, ��� � ����������� ������ ���������� �� ��������� IMAGE_FILE_HEADER. �� ���� ���������� (�, ��������, ��� ����� �������������� ����������) ������� ������� ������. � ������� ������ ������� ��������������� � �������� ���� ������ �����. ������� ���������� ������������ ��������� ��������� ������������ ���� � ������. ����� ���������� ������� ���������� ����������, ��-���� �������� ������� ������, ����������� �� ������ ������� � ����� (��������, ������������ ������� �������� �����). ������ ��������� (��� ����������), ������ ������ � �������� ������ ������ ��������� COFF- � ��-����� ����� ����� ��������� ���������� � ������ �������� � ������� �����. ��� ���������� �������� � ����� ����� ����� ���� ���������� � ������ ��� ������.
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |