导出函数与未导出函数
导出函数:
出现在导出表EAT里面的函数,可以供外部调用的函数。
使用LordPE查看,或者使用GetProcAddress或者MmGetSystemRoutineAddress之类的函数获取地址,能获取到就是导出函数。
非导出函数:
仅供自己调用,可以根据函数的特征码来搜索,即硬编码(NeReadVirtualMemory)
公开(文档化)函数:
各种厂商提供的带有函数原型和文档的函数,带有参数说明。
肯定是导出函数,但是导出函数可以是非公开函数,比如LdrLoadDll这个函数,能获取到地址但是msdn上没有说明。
非公开(非文档化)函数:
没有函数与原型和文档的函数,可以被GetProcAddress或者MmGetSystemRoutineAddress获取到地址,函数原型需要搜索或者逆向。
未公开的函数(导出未文档化)已经对导出来,但是不能直接使用。
使用方法:
1. 在Ring0层使用MmGetSystemRoutineAddress加函数名称获得函数的地址。
2. 在Ring3层使用LoadLibrary和GetProcessAddress(提前定义好原型)。
未导出函数的使用比较麻烦,一般先获得函数所在模块的基地址,然后通过特征码去获取函数的地址。