PE——节表结构

  • 联合体
    在这里插入图片描述
  • 节表数据结构
    在这里插入图片描述
    ① Name:8个字节,内容可自定义,需要注意的是该名称并不遵守必须以"\0"结尾的规律,如果不是以"\0"结尾,系统会截取8个字节的长度进行处理.我们在读取的时候需要小心!可以使用char[9]然后拷贝8个字节
    ② Misc:该节在没有对齐前的真实尺寸,该值可以不准确或被修改(不影响程序运行)这里注意真实尺寸存的是内存中的size,不一定比SizeOfRawData小,比如含有未初始化的全局变量,此时文件的数据段不会分配数据,而是在分配内存时才实际分配数据。
    ③ VirtualAddress:节区在内存中的偏移地址,相对于ImageBase偏移。
    ④ SizeOfRawData:节在文件中对齐的尺寸
    ⑤ PointerToRawData 节区在文件中的偏移.
    ⑥ PointerToRelocations 在obj文件中使用 对exe无意义
    ⑦ PointerToLinenumbers 行号表的位置 调试的时候使用
    ⑧ NumberOfRelocations 在obj文件中使用 对exe无意义
    ⑨ NumberOfLinenumbers 行号表中行号的数量 调试的时候使用
    ⑩ Characteristics 节的属性
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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`是导入的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值