【旧文章搬运】加载PE文件时IAT的填充时机
原文发表于百度空间,2011-06-20
==========================================================================
大致过程如下:
LdrInitializeThunk //ring3线程第一次执行从这里开始
->LdrpInitialize
->_LdrpInitialize
->LdrpInitializeProcess // 如果不是该进程第一次调用,这里会变成LdrpInitializeThread,判断依据是PEB->Ldr是否被填充过
->LdrpWalkImportDescriptor //该函数是递归的。。。
->LdrpHandleOldFormatImportDescriptors 或 LdrpHandleNewFormatImportDescriptors
->LdrpHandleOneOldFormatImportDescriptor 或 LdrpHandleOneNewFormatImportDescriptor
->LdrpLoadImportModule(这里会调用LdrpMapDll加载导入表中的dll),然后调用LdrpSnapIAT
->LdrpSnapThunk
->LdrpGetProcedureAddress //获取函数地址,进行填充
以上全是ntdll中的函数,所以什么给GetProcAddress下断观察IAT填充根本是不靠谱的。
系统断点ntdll!DbgBreakPoint是在LdrpInitializeProcess中执行完LdrpWalkImportDescriptor把IAT填充完毕后判断BeingDebugged标志有效才中断的,这时候IAT都已经填充完了,如果用OD的话最早只能中断在系统断点,所以OD不能观察到这个过程。windbg调试程序时默认也是中断在系统断点ntdll!DbgBreakPoint,但是通过设置我们可以让windbg在收到进程创建事件时就中断下来,这时进程的第一个线程才刚刚从ring3开始执行,这样就可以提前给LdrpInitializeProcess和LdrpWalkImportDescriptor下断来跟踪IAT的填充过程。具体方法如下:
一、用windbg打开要调试的PE文件,这时windbg会中断在ntdll!DbgBreakPoint
二、选择"Debug"菜单里的"Event Filters",会打开以下对话框:
然后把"Create Process"事件由Ignored设置为Enabled就可以了。
三、在windbg命令窗口中输入".restart"来重启应用程序,这时就会中断在ntdll!KiUserApcDispatcher处
四、给LdrpInitializeProcess和LdrpWalkImportDescriptor下断,然后g就可以在这里中断下来了
因为很少用windbg调ring3程序,所以误以为不能比ntdll!DbgBreakPoint更早地中断,特此更正。
【旧文章搬运】加载PE文件时IAT的填充时机的更多相关文章
- Android 解决在初次打开Activity加载布局文件时,ScrollView滚动条不在顶部的问题
出现这种问题的情况列举:ScrollView中嵌套有(包括自定义)的ListView,GridView时,会出现这种情况 解决办法: 1.在布局加载时让ScrollView上面的那个控件聚焦,具体做法 ...
- XmlDocument.Load()加载xml文件时,提示分析 EntityName 时出错的问题。
今天一个接口突然报错,错误是: 分析 EntityName 时出错. 行 35,位置 90. xmlDoc.Load(System.Web.HttpContext.Current.Server.Map ...
- arcpy加载mxd文件时,无效的MXD路径,提示assert (os.path.isfile(mxd) or (mxd.lower() == "current")), gp.getIDMessage(89004, "Invalid MXD filename")
无效的MXD路径,将路径前加‘u’,改为这种: mxdPath = u"C:\\1331\\DB\\Original Files\\dd.mxd" 参考: https://gis. ...
- Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)
今天配置Spring的xml出现了错误 Multiple annotations found at this line: - schema_reference.4: Failed to read sc ...
- webpack模块加载css文件及图片地址
webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...
- 在seajs中使用require加载静态文件的问题
注意,在seajs中使用require加载静态文件时,必须使用常量,不能用变量.如果一定要用变量,请使用require.async var html = require("view/sys/ ...
- Java加载资源文件的两种方法
处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...
- Spring加载xsd文件报错:because 1) could not find the document; 2) the document could not be read...
Spring启动时加载xml文件的过程: spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),如果没有找到,才会转向去URL指定的路 ...
- Django模版中加载静态文件配置详解
.settings.INSTALLED_APPS下添加:django.contrib.staticfiles .settings.py下添加:STATIC_URL = '/static/' . ()在 ...
随机推荐
- HTML5开发移动web应用——Sencha Touch篇(7)
Sencha Touch中的Ext.DomHelper组件能够方便的实现对元素的追加或重写操作 演示样例: launch:function(){ function appendDom(){ Ext.D ...
- A20 Gate信号
https://doc.docsou.com/ba8e6b0612d6a989b7cebeaae-5.html Gate A20 Option 功能:设置A20 地址线的控制模式 设定值:Fast 或 ...
- Toad 使用中遇到的问题
1:智能提示: 视图-->toad选项-->Editor-->Code Assist-->Toad Insight---->sort pick list alphabet ...
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)
1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...
- Cocos2d-X中提高性能的方法
1)内存使用效率: 使用大纹理 场景切换时,要尽量使用replaceScene 2)用好缓存: CCTextureCache(纹理缓存) CCSpriteFrameCache(精灵帧缓存) CC ...
- D3js-API介绍【英】
Everything in D3 is scoped under the d3 namespace. D3 uses semantic versioning. You can find the cur ...
- 用callgraph生成的两张函数调用关系图
参考这里,感觉很Cool吧. Linux-0.11函数调用关系图: QEMU函数调用关系图:
- Fakeapp2.2安装,使用简记
1,硬件和操作系统,支持cuda的Nvidia显卡,8G及以上的内存,Windows10 x64(推荐,Windows7 x64亲测可行),可以使用gpu-z查看你的显卡详情 我的笔记本是双显卡(都是 ...
- 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...
- C# - Garbage Collection
The .NET Framework's garbage collector manages the allocation and release of memory for your appl ...