首页 > 编程语言 >win32汇编-调用API

win32汇编-调用API

时间:2023-10-11 14:12:04浏览次数:30  
标签:汇编 MessageBox 调用 函数 win32 API 参数 堆栈

 

 

Win32API是用堆栈来传递参数的, 调用者把参数一个个压入堆栈, DLL中的函数程序再从堆栈中取出参数处理, 并在返回之前将堆栈中已经无用的参数丢弃。

在Microsoft发布的《Microsoft Win 32 Programmer's Reference》中定义了常用API的参数和函数声明, 先来看消息框函数的声明:

 

上述函数声明说明了MessageBox有4个参数, 它们分别是HWND类型的窗口句柄(hWnd) , LPCTSTR类型的要显示的字符串地址(Ip Text) 和标题字符串地址(Ip Caption) ,还有UINT类型的消息框类型(u Type) 。这些数据类型看起来很复杂, 但有一点是很重要的,对于汇编语言来说, Win 32环境中的参数实际上只有一种类型, 那就是一个32位的整数, 所有这些HWND, LPCTSTR和UINT实际上就是汇编中的dword(doubleword) , 之所以定义为不同的模样, 是为了说明其用途。可能是因为Windows是用C写成的吧, 或者是因为世界上的程序员用C语言的最多, Windows所有编程资料发布的格式都是用C格式的。

有了函数原型的定义以后,就是调用的问题了,Win32API调用中要把参数放入堆栈,顺序是最后一个参数最先进栈, 在汇编中调用MessageBox函数的方法是:
push uType
push lpcaption

push lpText
push hwnd
call MessageBox

 

 

 

 

 

 

 

标签:汇编,MessageBox,调用,函数,win32,API,参数,堆栈
From: https://www.cnblogs.com/liming19680104/p/17756861.html

相关文章

  • 快学会这个技能-.NET API拦截技法
    https://www.zhihu.com/tardis/bd/art/608767248?source_id=1001 一、前言本文先抛出以下问题,请在文中寻找答案,可在评论区回答:1、什么是API拦截?2、一个方法被很多地方调用,怎么在不修改这个方法源码情况下,记录这个方法调用的前后时间?3、同2,不修改源码的情况下,怎么对方法的......
  • WebApi接口
     https://blog.csdn.net/weixin_43430200/article/details/126785026?ops_request_misc=&request_id=&biz_id=102&utm_term=c&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-126785026.142^v94^insert_down28v1&sp......
  • Apipost一大波新功能来袭!连接数据库、TCP协议、MySQL DDL数据导入
    本次Apipost带来数据库功能、TCP协议调试等重量级功能,感兴趣的话大家升级试试吧~数据库配置Apipost提供了数据库连接功能,以便开发者可以在接口调试中可以使用数据库获取入参或进行断言校验目前7.2.2的Apipost支持Mysql、SQLSever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Re......
  • fastapi swagger文档无法渲染问题
    由于fastapi默认使用国外的cdn获得支持swagger文档的js和css文件,所以在国内,/docs接口渲染不出来.解决方法1#在app生效之前,将生成swagger文档的方法替换掉.(在fastapi为:fastapi.openapi.docs.get_swagger_ui_html)​fromfastapiimportFastAPI,applicationsfromfa......
  • 【接口测试】如何在 Eolink Apilkit 中使用 cookie ?
    什么是Cookie?Cookie是一种在网站之间传递的小型文本文件,用于存储用户的个人信息和偏好设置。当您访问一个网站时,网站会将Cookie存储在您的浏览器中,并在您下次访问该网站时读取该Cookie。这样,网站可以记住您的登录状态、购物车内容以及其他个性化设置。在编写接口自动化测试用......
  • 视频监控系统EasyCVR如何通过API接口获取国标GB28181协议接入的实时录像?
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台也提供丰富的API接口供开发者集成、调用与二次开发。今天来介绍下......
  • chat智能聊天机器人api免费分享
    智能聊天机器人,上知天文,下知地理。接口地址:http://youlanjihua.com/youlanApi/v1/chat/index.php?secret=&content=请求方式:GET请求参数:​secret关注公众号【幽蓝计划】发送‘密钥’获取content提问的问题返回示例:​{"data":{"content":"你好,我是小i机器人,一个大......
  • Asp.Net Core webapi+net6 使用资源筛选器(过滤器) 做缓存
    写一个特性类,用来做标记[AttributeUsage(AttributeTargets.Method)]//只对方法有效publicclassResourceFilterAttribute:Attribute{}我这里使用了MemoryCache来做缓存,也可以使用字典来做,但一定要加上static,否则字典每一次请求都会new一个实例,缓存的东西就丢了private......
  • Topaz Gigapixel AI:智能照片放大专家 mac+win版
    TopazGigapixelAI是一款由TopazLabs公司开发的智能照片放大软件,它通过先进的人工智能技术,将低分辨率图片转化为高分辨率、清晰度和细节丰富的图像。→→↓↓载TopazGigapixelAImac/win版 该软件的操作流程非常简单,主要包括导入图片、选择放大倍数、调整参数、开始处理......
  • 常用Stream API示例
    1.flatMap    将多个集合压平为一个集合List<Long>siteIdList=routeLines.stream() .flatMap(routeLine->Stream.of(routeLine.getSubLineFSiteId(),routeLine.getSubLineTSiteId())) .distinct() .collect(Collectors.toList());2.Collectors.toMap()......