Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过PE文件中的\u NAME结构在图像\u导入\u中获得提示?_Python_Portable Executable_Import Table - Fatal编程技术网

Python 如何通过PE文件中的\u NAME结构在图像\u导入\u中获得提示?

Python 如何通过PE文件中的\u NAME结构在图像\u导入\u中获得提示?,python,portable-executable,import-table,Python,Portable Executable,Import Table,我正试图编写python脚本来从导入表中提取信息。我设法获得了每个dll导入的函数名。然而,我不知道如何才能访问提示。 有什么建议吗 我假设您有一个指向32位模块的IMAGE_THUNK_数据结构的指针(或针对PE32+的IMAGE_THUNK_DATA64),因为您已经在枚举名称,所以我们将从这里开始介绍基础。 我还假设您正在处理32位模块,因为您没有另外指定 IMAGE_THUNK_数据数组只是一个DWORD数组,每个DWORD表示一个导入的函数。要知道函数是按名称而不是顺序导入的,必须检查

我正试图编写python脚本来从导入表中提取信息。我设法获得了每个dll导入的函数名。然而,我不知道如何才能访问提示。
有什么建议吗

我假设您有一个指向32位模块的IMAGE_THUNK_数据结构的指针(或针对PE32+的IMAGE_THUNK_DATA64),因为您已经在枚举名称,所以我们将从这里开始介绍基础。 我还假设您正在处理32位模块,因为您没有另外指定

IMAGE_THUNK_数据数组只是一个DWORD数组,每个DWORD表示一个导入的函数。要知道函数是按名称而不是顺序导入的,必须检查DWORD中是否未设置最高位(即0x8000000)

1> 如果设置了高位,则带0xFFFF的DWORD and的值(仅取低位字)是序号(也是“提示”值)。因此,该函数是按序号导入的,没有可用的名称

2> 如果未设置高位,则整个DWORD是一个RVA(指向内存映像的指针,不带基),指向映像的“按名称导入”结构。如果正在读取文件映像,则必须将RVA转换为文件偏移量。我还假设您已经在这样做了,否则就不会有导入的函数名。在winnt.h中,图像按名称导入结构的定义如下:

typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;
    BYTE    Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
注意:名称处指定的字节当然只标记导入函数名字符数组的开头,因为名称可以大于一个字符


第一个单词是提示,如果您已经有了该名称,则必须跳过提示。您是否有一段代码可以表明您有问题?

Perfect。我的问题解决了!我意识到,为了命名,我需要跳过两个字节,但不知道这两个字节实际上是暗示。谢谢