invoke 语句

我们在MASM中可以用这种方法来调用API函数:invoke  函数名 [参数1],[参数2] ,......  。这样可以避免我们在写汇编程序中调用函数时少写或漏写了参数,漏写参数会导致堆栈对不齐,但是这样的程序在编译链接时并不会报错,但执行的时候程序会崩溃。而用这种方法就像在c语言中调用函数一样,如果我们漏写了参数,编译器会报错,就可以避免上面的情况发生。编译器报错内容是:error A2137 : too few arguments to INVOKE  。就是参数少了的意思。使用invoke的例子:

invoke MessageBox NULL,offset szText,offset szCaption,MB_OK

最后那个MB_OK表示窗口类型,具体什么类型稍后再介绍,其他的参数都很熟悉了,标题,内容。

API函数声明和返回值,include,includelib语句

有的API函数也和c++中的一些函数一样会有返回值,返回值如果是deword类型,那么将永远放在EAX中,如果返回的内容EAX容纳不下那么将返回一个指针,这个指针指向返回数据。

和c语言很像,win32 API在调用之前也需要先声明,否则编译器不认识这个函数。声明的格式:函数名  proto  [距离] [语言] [参数1]:数据类型 [参数2]:数据类型......

声明的格式其实和c语言中声明的格式有相同之处,也要指定参数类型,也要学出写出函数名,但是和C语言有不同的地方就是win32API的参数名可以省略,可以只用写参数类型,而win32API的参数类型又只使用deword的类型,所以比如我们的messagebox函数的声明就是:MessageBox Proto :deword,:dword,:dword.:dword

有时候我在使用OD寻找messagebox函数时会看到有两个这样的函数:MessageBoxA  MessageBoxW  。这两个是有区别的,后面接A的是用来处理ANSI字符集的,也就是只占一个字节的数据,像英文字符就是只占一个字节,而后面接W的就是用来处理占两个字节的Unicode字符型数据的,比如中文。

有时候在OD中查看汇编代码时能看到messagebox这个函数,但是在user32.dll中只有MessageBoxA和MessageBoxW,并没有叫MessageBox的函数,但是为什么我们有时候在编写源代码时又能使用MessageBox呢?如果我们到程序头文件user32.inc中去查看就能看到一句话:MessageBox equ <MessageBoxA>  这句话的意思是将MessageBox替换成MesageBoxA,这样我们每次用MessageBox就是默认使用了带A的。那么,这个程序头文件是什么呢?我们这样来介绍一下。首先,如果我们每要调用一个函数,就声明一次的,未免太麻烦了,并且有的函数的参数很多,所以又出了一种使调用函数更简单的方式,就和c语言中引入头文件一样:include  头文件名。头文件中有被包含的函数的声明,这样我们要用声明什么函数,就是直接把函数对应的头文件给包含进来,然后就不用自己声明就可以直接使用了。每一个DLL对应一个头文件:<DLL名.inc >,在masm32 sdk中已经包含所有DLL的API声明列表,所以我们想用什么可以直接包含进来。比如我们要把user32.dll中的函数声明的头文件包含进来:include user32.inc  。对于编译器而言,它会将这句话替换成指定文件的内容。我们也可以像c语言一样,写一个文件,然后用include把文件包含进来,就可以使用文件里的东西了。如果文件名和一些关键字同名的话,我们可以用<>将文件名括起来。

我们再来看一下一个WIN32源文件:

我们可以看到它的include文件定义部分,除了有include还有includelib ,其实思考一下就会知道,include 只是把函数声明包含进来,而我们还没有真正把函数给弄进来,而那个includelib 就是做这个的,准确地说是把对应的DLL的导入库文件给包含进来。要解释的话就要说到以前的使用中断方式调用系统功能的汇编,这个时候的汇编也有库函数的概念,但这个时候的调用为静态调用,就是在最后链接成可执行文件的时候,link 程序直接从库里面把相应的函数的代码一起链接成最后的可执行文件。而现在的WIN32汇编是动态调试的方式,库文件中存放的不是函数的代码(函数现在在DLL文件中),而是函数的定位信息和参数目录等其他一些简单的信息,现在这种库文件叫做导入库,并且一个DLL文件对应一个导入库文件,如user32.dll对应的导入库文件是user32.lib,并且includelib也不是在链接的时候将导入库文件里的内容直接链接进来,而是告诉链接器在链接的时候,到指定的库文件中去找API函数的位置信息。

win32 API 调用方法相关推荐

  1. python爬虫接口_python爬虫之百度API调用方法

    调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'ke ...

  2. 有道接口php,php有道翻译api调用方法实例,php有道api实例

    php有道翻译api调用方法实例,php有道api实例 本文实例讲述了php有道翻译api调用方法,这里我们利用了file_get_contents函数直接读取由api返回的数据进行处理,分享给大家供 ...

  3. php有道,PHP实例:php有道翻译api调用方法实例

    <PHP实例:php有道翻译api调用方法实例>要点: 本文介绍了PHP实例:php有道翻译api调用方法实例,希望对您有用.如果有疑问,可以联系我们. PHP学习调用之前我们需申请一个有 ...

  4. saltstack一些常用模块和api调用方法

    研究可执行模块的时候,发现很多自带的模块已经很完善,可以帮助我们完成日常工作了,这里写入自己的记录操作: 1.使用salt.clien调用接口操作举例: >>> import sal ...

  5. 大模型开发(四):OpenAI API调用方法

    全文共8500余字,预计阅读时间约17~30分钟 | 满满干货(附代码示例),建议收藏! 代码下载点这里 一.获取OpenAI的API keys 前提:拥有OpenAI账户,并可以魔法上网 如果涉及账 ...

  6. Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法

    话不多说,看效果图: 先说下原理: 微信接收到你说的话,发给机器人来回复,用回复的话传参给斗图网,然后获得斗图网返回的图片,保存后把图片再发给跟你斗图的人. 斗图啦官网API调用文档 斗图啦官网 菜单 ...

  7. Openshift API调用方法

    概述 请思考以下场景: 你们已经有了一套发布平台,用于生产环境或者开发,测试,预发布和生产都已经在使用了,然后你也想推广容器平台,但是容器平台的界面和现有的发布平台是割裂的,而且现有的数据也没法用到容 ...

  8. 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |   Max Woolf 编译 |  刘淑雯 编译 |  林檎 报道 | 数据实战派 编者按:在今年5月29日,OpenAI 发表了一篇关于 GPT ...

  9. QT Creator引用win32 api类库方法(.lib)

    由于Qt Creator使用的是mingW进行程序编译,该编译方式无法识别#pragma comment(lib,"lib\\hvdailt.lib")引用. 所以需要在.Pro文 ...

  10. 揭示Win32 API拦截细节/API hooking revealed (1)

    原文出处:http://www.codeproject.com/system/hooksys.asp 简要介绍 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑战性的课题, ...

最新文章

  1. [置顶] 【IOS】IOS7 UI适配
  2. Android中pendingIntent的深入理解
  3. 在WEBSTART中实现串口通信(WINDOWS版)
  4. Go 语言新提案:添加模糊测试支持
  5. php配置cors跨域漏洞怎么修复,CORS跨域漏洞的简单认识
  6. 网络与IO知识扫盲(七):仿照Netty工作架构图,手写多路复用模型
  7. 【QMIX】一种基于Value-Based多智能体算法
  8. 计算机应用基础知识点提纲,计算机应用基础复习提纲
  9. CentOS 安装MySQL5.7 源码方式安装
  10. java高级-反射获取对象的18代祖宗
  11. 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)
  12. vue.js视频教程,vue.js视频教程下载
  13. Backup EXEC虚拟化备份失败
  14. 用 Python 给自己找个合适的妹子
  15. Junos: 使用之前
  16. 如何利用魔棒工具抠图_PS怎么用魔棒工具扣图
  17. 我的理想200字计算机工程师,我的理想工程师作文(我的理想是做一名工程师)...
  18. 计算机屏幕黑屏让程序继续允许,电脑软件让对方黑屏
  19. 11尺寸长宽 iphone_2019新发布iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max尺寸规格对比
  20. B4A +GoLang 实现手机端webserver

热门文章

  1. 微信小程序健康管理系统的开发与实现
  2. C# DevExpress ChartControl用法总结
  3. 记录10本关于开关电源的书
  4. 学校后勤物资管理系统(数据库课程设计)
  5. 机器人学从理论、设计到建模仿真零基础入门教程(硬核、偏零基础)
  6. 菜鸟站长之家收集分享一些比较出名的外链发布地址
  7. 电力系统负荷预测基于神经网络模型
  8. 2022最新RiPro-V2子主题美化包源码+实测可用
  9. 如何免费复制百度文库上的文字
  10. 创e下载园7edown.com(坑爹流氓网站大揭秘)