加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 为什么PE需要Original First Thunk(OFT)?

发布时间:2020-12-14 02:55:02 所属栏目:Windows 来源:网络整理
导读:有“First Thunk”(FT),加载程序在执行后用正确的地址覆盖. 但是当PE使用OFT时? PE甚至需要吗? 解决方法 如果导入已绑定但导入的.DLL不匹配,则需要原始的第一个thunk. 在新的未修补版本的Windows上,基本.DLL(ntdll,kernel32,user32等)中所有函数的所有地址
有“First Thunk”(FT),加载程序在执行后用正确的地址覆盖.

但是当PE使用OFT时?

PE甚至需要吗?

解决方法

如果导入已绑定但导入的.DLL不匹配,则需要原始的第一个thunk.

在新的未修补版本的Windows上,基本.DLL(ntdll,kernel32,user32等)中所有函数的所有地址都是已知的.以shell32为例,它链接到kernel32!Cre??ateProcess,CreateProcess的真实地址可以直接存储在shell32中.这称为import binding,并允许加载程序跳过查找导入函数的所有地址的步骤.

如果导入的.DLL尚未加载到其首选地址,并且.DLL已更改(安全更新等),则此方法无效.如果发生这种情况,则加载器必须查找“正常方式”的函数,并且必须使用原始的第一个thunk数组,因为这是存储函数名称的RVA的唯一位置.

如果未使用导入绑定,则原始的第一个thunk数组是可选的,可能不存在.

ASLR可能使这种优化无关紧要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读