windows pe 文件的地址导出 table 中出现空条目的原因是什么?
What is the reason for null entries in address export table of a windows pe file?
我有一个我构建的项目,用于检查 Windows PE 文件。在处理某些文件(例如 User32 和 Shell32)时,我注意到导出地址 table 中的条目为 0。导出地址 table 中包含空 (0) 条目的目的是什么? (条目 0 不会解析为有效的虚拟地址)
仅供参考 - 使用 NikPEViewer 和 Dll Export Viewer 等应用程序根本不会显示这些条目,DumpBin 显示不包含在导出名称 table 和序号 table 中的导出但它会跳过空条目。
我只有部分回应。
假设我们写下一个 exports.def (win 8.1 x64 user32.dll) file:
EXPORTS
...
wvsprintfW @2412
NtUserDelegateInput @2503 NONAME
...
并且@2412 和@2503 之间没有任何序数 - 因此链接器,为了保留您的序数顺序,需要在导出地址 Table 中生成 90 个零条目。所以链接器的原因很明确——它符合我们的指定。但这将我们重定向到另一个问题 - 写这种 def 文件的原因是什么?
认为这与将此文件从一个版本重写到另一个版本有某种关系。
在 win7 x64 中说 user32.dll - 最高序号是 @2502(与 NtUserDelegateInput @2503 比较)
在 win 10 x64 中 user32.dll 可以查看:
...
NtUserUpdateWindowTrackingInfo @2585 NONAME
; interval [@2586, @2700) is zero
GetDialogBaseUnits96 @2700 NONAME
; @2701 is zero
EnablePerMonitorMenuScaling @2702 NONAME
new API set export begin from ordinal @2700 (space [@2586, @2700) 已保留?)。但 user32.dll 通常不会导出已知的(稳定的)序数 - 所以它不能在不同版本之间保留。所以我不清楚 DEF 文件中所有直接设置序数的原因
我有一个我构建的项目,用于检查 Windows PE 文件。在处理某些文件(例如 User32 和 Shell32)时,我注意到导出地址 table 中的条目为 0。导出地址 table 中包含空 (0) 条目的目的是什么? (条目 0 不会解析为有效的虚拟地址)
仅供参考 - 使用 NikPEViewer 和 Dll Export Viewer 等应用程序根本不会显示这些条目,DumpBin 显示不包含在导出名称 table 和序号 table 中的导出但它会跳过空条目。
我只有部分回应。 假设我们写下一个 exports.def (win 8.1 x64 user32.dll) file:
EXPORTS
...
wvsprintfW @2412
NtUserDelegateInput @2503 NONAME
...
并且@2412 和@2503 之间没有任何序数 - 因此链接器,为了保留您的序数顺序,需要在导出地址 Table 中生成 90 个零条目。所以链接器的原因很明确——它符合我们的指定。但这将我们重定向到另一个问题 - 写这种 def 文件的原因是什么? 认为这与将此文件从一个版本重写到另一个版本有某种关系。 在 win7 x64 中说 user32.dll - 最高序号是 @2502(与 NtUserDelegateInput @2503 比较)
在 win 10 x64 中 user32.dll 可以查看:
...
NtUserUpdateWindowTrackingInfo @2585 NONAME
; interval [@2586, @2700) is zero
GetDialogBaseUnits96 @2700 NONAME
; @2701 is zero
EnablePerMonitorMenuScaling @2702 NONAME
new API set export begin from ordinal @2700 (space [@2586, @2700) 已保留?)。但 user32.dll 通常不会导出已知的(稳定的)序数 - 所以它不能在不同版本之间保留。所以我不清楚 DEF 文件中所有直接设置序数的原因