本文主要是介绍导出表(EAT)规则特例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
GetLastError( )函数由kernel32.dll库文件导出,用ida打开找到该函数,发现没有汇编代码,只有一段字符串定义(和微软的导出表规则不太一样哦),下图:
再转到ntdll.dll查找RtlGetLastWin32Error( )函数源代码,如下图:
代码解释:获取TEB地址,再获取TEB偏移0x34处的4字节数据返回
查看TEB结构,偏移0x34处LastErrorValue,Windows XP和Windows 7都是如此定义:
还有另外2个函数IsDebuggerPresent( )、GetModuleHandleA( )源代码,也都有kernel32.dll库文件导出。
IsDebuggerPresent( ):先获取TEB地址,再获取TEB偏移0x30处值(PEB地址),返回PEB偏移0x2处的1个字节值。
GetModuleHandleA( ):当传入参数lpModuleName为NULL时,先获取TEB地址,再获取TEB偏移0x30处值(PEB地址),返回PEB偏移0x8处的4个字节值。
PEB结构体定义(只列出部分):
这篇关于导出表(EAT)规则特例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!