汇编语言怎样调用Win Api ??

whupyf 2003-07-05 04:49:19
我反汇编了一段程序。
可是不知道这个程序是怎样调用Api的.

请高手指点下
...全文
357 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
smuwcwt 2003-08-01
  • 打赏
  • 举报
回复
学习学习
Yashmak 2003-07-31
  • 打赏
  • 举报
回复
invoke是个伪指令,
编译器会把它展开为
push 参数n
......
push 参数1
call 函数名(或地址)
返回值在eax中

当然,你要在文件头包含API的导入表

include ***.inc
includelib ***.lib
ckp 2003-07-29
  • 打赏
  • 举报
回复
我的肚子有点痛.:-)哈
ckp 2003-07-29
  • 打赏
  • 举报
回复
哈,楼上好有趣:-)
W32API 2003-07-29
  • 打赏
  • 举报
回复
拜托,不要开口就调用我好不好?
jzma 2003-07-29
  • 打赏
  • 举报
回复
就是在函数名后加伪指令PROTO,再跟一串由逗号相隔的数据类型链表。在前面的 ExitProcess 定义中,该函数有一个 DWORD 类型的参数。当您使用高层调用语句 INVOKE 时,使用函数原型定义特别有用,您可以简单地认为 INVOKE 是一个有参数类型检查的调用语句。譬如,假设您这样写:

call ExitProcess

若您事先没把一个DWORD类型参数压入堆栈,编译器和链接器都不会报错,但毫无疑问,在您的程序运行时将引起崩溃。但是,当您这样写:

invoke ExitProcess

连接器将报错提醒您忘记压入一个 DWORD 类型参数。所以我建议您用 INVOKE 指令而不是CALL去调用一个函数。INVOKE 的语法如下:

INVOKE expression [,arguments]

expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。大多数API函数的原型放在头文件中。 如果您用的是 hutch 的 MASM32,这些头文件在文件夹MASM32/include 下, 这些头文件的扩展名为 INC,函数名和 DLL 中的函数名相同,譬如:KERNEL32.LIB 引出的函数 ExitProcess 的函数原形声明于kernel.inc中。您也可以自己声明函数原型。
jzma 2003-07-16
  • 打赏
  • 举报
回复
提议返汇编,最好使用ida,里面写的非常清楚了
cupidvenus 2003-07-15
  • 打赏
  • 举报
回复
同意
bahanzo1 2003-07-07
  • 打赏
  • 举报
回复
invoke <函数名> 参数
神农氏 2003-07-07
  • 打赏
  • 举报
回复
基本同意楼上!
如调用MessageBox:
push MB_OK
push offset szText
push offset szCaption
push NULL
call dword ptr ds:[address]
address 是导入函数地址表的地址。
紫郢剑侠 2003-07-07
  • 打赏
  • 举报
回复
这要看你所使用的开发环境了.

如果用TASM
就要用CALL指令.如调用MessageBox:

push MB_OK
push offset szAppName
push offset szAppName
push hWnd
call MessageBox

如果是用MASM32,
可以用INVOKE伪指令.如调用MessageBox:

invoke MessageBox, hWnd, addr szAppName, addr szAppName, MB_OK
hotrain 2003-07-05
  • 打赏
  • 举报
回复
调用WIN32 API要在汇编语言的源程序开头声明函数和库。
至于INVOKE嘛,是一个伪操作,就相当于一连串的PUSH和一个CALL,使用INVOKE可以增强程序的可读性。如果不使用INVOKE的话,可以自己把相应的参数PUSH入栈,然后CALL相应的函数就可以了,不过要注意PUSH的顺序,后面的参数应该先入栈。
csdn20032004 2003-07-05
  • 打赏
  • 举报
回复
正常的Win32 汇编语言都是在程序的头部加上函数的声明以及库。
然后指定调用方式,即参数的调用方向,然后在程序中使用invoke 语句进行Api的调用。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧