-
-
[求助]据说看雪论坛高手如云,特来请教
-
发表于:
2009-9-16 16:14
6279
-
请教这2个函数的使用问题:
1、LoadLibraryA函数
LoadLibrary函数是把指定的可执行模块映射进调用进程的地址空间。通俗的说,如程序需要调用ole32.dll里面的CreateStreamOnHGlobal函数,首先应该用LoadLibraryA函数找到ole32.dll的句柄。然后根据这个句柄用GetProcAddress找到CreateStreamOnHGlobal的内存指针。
它有一个参数,即动态链接库名称的内存地址。汇编语言是这样实现的(以前面为例):
PUSH 10018888 //10018888指向ole32.dll名称。
CALL DWORD PTR DS:[10019990] //10019990是LoadLibraryA的内存指针。
结果放在EAX里面,返回值为模块句柄。
2、GetProcAddress函数
GetProcAddress函数返回指定的输出动态链接库内的函数地址。它有二个参数。汇编语言是这样实现的(以前面为例):
PUSH 1001888C //1001888C指向CreateStreamOnHGlobal名称。
PUSH EAX //EAX的值为LoadLibraryA的返回值,即ole32.dll的句柄。
CALL DWORD PTR DS:[1001999C] //1001999C为GetProcAddress函数的内存指针。
结果也放在EAX里面,返回值为DLL输出函数的内存地址。
我的问题:
第一段代码把ole32.dll的名称指针PUSH进栈的作用是什么,为什么要保存?
第二段代码也一样,非要把他们PUSH进栈才能CALL后面的函数吗???
谢谢啊 郁闷一下午了
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!