导出表(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结构体定义(只列出部分):

猜你喜欢

转载自blog.csdn.net/singleyellow/article/details/87950938