PE头那个字段保持这导入表
时间: 2023-07-20 11:27:11 浏览: 51
PE头中的数据目录(Data Directory)之一是导入表(Import Table),它记录了可执行文件所依赖的外部动态链接库(DLL)及其函数的名称和地址等信息。导入表使得程序能够在运行时动态链接调用其他的DLL,从而实现了模块化编程和代码复用。当程序执行到导入表时,系统会根据表中记录的DLL名称和函数名去查找和链接相应的DLL,并把DLL中的函数地址替换到程序中相应的调用位置,以完成函数调用。
相关问题
PE结构那个字段可以找到导入表
PE文件格式中的导入表(import table)信息存储在可执行文件的数据目录中,具体来说是存储在`IMAGE_DIRECTORY_ENTRY_IMPORT`目录项中。该目录项的值可以在PE文件的NT头中找到,NT头是PE文件格式中的一个结构体,包含了PE文件的各种信息,包括数据目录的位置和大小等信息。
NT头的结构体定义如下:
```
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
```
其中,`OptionalHeader`成员是一个结构体类型,它包含了PE文件的各种信息,包括数据目录的位置和大小等信息。`OptionalHeader`结构体定义如下:
```
typedef struct _IMAGE_OPTIONAL_HEADER {
WORD Magic;
BYTE MajorLinkerVersion;
BYTE MinorLinkerVersion;
DWORD SizeOfCode;
DWORD SizeOfInitializedData;
DWORD SizeOfUninitializedData;
DWORD AddressOfEntryPoint;
DWORD BaseOfCode;
DWORD BaseOfData;
DWORD ImageBase;
DWORD SectionAlignment;
DWORD FileAlignment;
WORD MajorOperatingSystemVersion;
WORD MinorOperatingSystemVersion;
WORD MajorImageVersion;
WORD MinorImageVersion;
WORD MajorSubsystemVersion;
WORD MinorSubsystemVersion;
DWORD Win32VersionValue;
DWORD SizeOfImage;
DWORD SizeOfHeaders;
DWORD CheckSum;
WORD Subsystem;
WORD DllCharacteristics;
DWORD SizeOfStackReserve;
DWORD SizeOfStackCommit;
DWORD SizeOfHeapReserve;
DWORD SizeOfHeapCommit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
```
其中,`DataDirectory`是一个数组,它包含了PE文件的各个数据目录项的位置和大小等信息。导入表信息就存储在`IMAGE_DIRECTORY_ENTRY_IMPORT`目录项中,它是`DataDirectory`数组的第5个元素,可以通过以下代码找到导入表的位置和大小:
```
PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + pDosHeader->e_lfanew);
PIMAGE_DATA_DIRECTORY pImportTable = &pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
DWORD dwImportTableSize = pImportTable->Size;
DWORD dwImportTableVA = pImportTable->VirtualAddress;
```
其中,`pDosHeader`是指向PE文件DOS头的指针。`dwImportTableVA`是导入表在内存中的虚拟地址,`dwImportTableSize`是导入表的大小。
windows PE结构的可选头部的那个数据描述导入表
PE结构的可选头部中的数据目录中第一项描述的就是导入表。数据目录是一个数组,每个元素是一个描述表项,包括该项数据在PE文件中的位置和大小等信息。在可选头部中,数据目录大小为16字节,其中第一项就是描述导入表的数据目录项,包括以下内容:
- RVA(Relative Virtual Address):导入表在内存中的相对虚拟地址。
- Size:导入表在PE文件中的大小。
- 其他字段:保留字段,通常为0。
导入表是一个描述PE文件需要在运行时调用哪些外部函数的表格。它包含了每个需要调用的外部函数的名称和地址,以及它们所在的DLL文件的名称和地址等信息。Windows在启动PE文件时就会动态地加载这些DLL文件,并把它们映射到进程的虚拟地址空间中。然后,当PE文件需要调用某个外部函数时,就可以直接跳转到该函数的地址执行。