首页
社区
课程
招聘
[求助]ASM里如何调用dll里面的函数?
发表于: 2008-8-7 01:30 5144

[求助]ASM里如何调用dll里面的函数?

2008-8-7 01:30
5144
如题,
invoke LoadLibrary,CTXT("mydll.dll")
mov hwnd,eax
invoke GetProcAddress,eax,CTXT("myfunction")
mov hfunction,eax
call hfunction

我知道,如果函数没有参数,可以直接call她,,,,但有参数的函数该如何调用呢?
是不是要先写个函数原形,再把GetProcAddress回来的地址付值后再行使用??我在delphi里是这样做的,,,,不知道在ASM里该如何实现.......
请高手飘过之前留下个例程(user32.dll的messageboxa为例)..

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
先把参数push进去,push进去的顺序是函数列表由右向左
2008-8-7 09:21
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
MESSAGEBOX typedef proto :DWORD,:DWORD,:DWORD,:DWORD

.data
   szUserDll db 'User32.dll',0
   szMessageBoxA db 'MessageBoxA',0
   szMessage db '调用MessageBoxA函数',0
   szMsgTitle db 'MessageBoxA函数调用示例',0

.code
start:
  invoke LoadLibrary,offset szUserDll
  .if eax
    mov esi,eax
    invoke GetProcAddress,eax,offset szMessageBoxA
    .if eax
      invoke (MESSAGEBOX ptr eax),0,offset szMessage,offset szMsgTitle,MB_OK
    .endif
    invoke FreeLibrary,esi
  .endif
  invoke ExitProcess,NULL
end start
2008-8-7 09:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
明白了,谢谢小花
2008-8-7 09:53
0
游客
登录 | 注册 方可回帖
返回
//