LOWORD和HIWORD函数
本人小白一枚,最近在做逆向分析题目的时候通过IDA反编译的源码中出现了两个没见过的函数,LOWORD和HIWORD函数,在网上查找了一会儿,感觉都不太全面,下面是对于这两个函数的一点总结和体会
这是Win32编程中常用的两个宏
HIWORD是High Word的缩写,作用是取得某个4字节变量(即32位的值)在内存中处于高位的两个字节,即一个word长的数据
LOWORD是Low Word的缩写,作用是取得某个4字节变量(即32位的值)在内存中处于低位的两个字节,即一个word长的数据
例如对于十六进制数0xCCDDEEFF,那么HIWORD(0xCCDDEEFF)得到的结果就是oxCCDD,正好是一个word值.
同理LOWORD(0XCCDDEEFF)返回的结果就是0xEEFF,也正好是一个word值.
为了直观显示,下面用一个c语言代码测试
#include <windows.h>
#include <stdio.h>
int main()
{DWORD dwValue ;
WORD low, high ;
dwValue = 0XCCDDEEFF ;
high = HIWORD(dwValue) ;
low = LOWORD(dwValue) ;
printf("high = 0x%x, low = 0x%x", high, low) ;
return 0 ;
}
测试结果:
需要注意的是这是32位中的宏,取的值为word两字节,如果需要64位的,使用的宏为HIDWORD
和LODWORD
函数,取值位dword四字节
下面是常用的截取高低位的宏
#define LOBYTE(x) (*((_BYTE*)&(x))) // low byte
#define LOWORD(x) (*((_WORD*)&(x))) // low word
#define LODWORD(x) (*((_DWORD*)&(x))) // low dword
#define HIBYTE(x) (*((_BYTE*)&(x)+1))
#define HIWORD(x) (*((_WORD*)&(x)+1))
#define HIDWORD(x) (*((_DWORD*)&(x)+1))
以上就是本小白的总结,希望可以给各位参考~
如有不当之处,请不吝赐教
LOWORD和HIWORD函数相关推荐
- 关于 Lo、Hi、LoWord、HiWord
Cardinal 是 4 字节无符号的整型, 先看一个例数: Cardinal 例数: 4277991664 按字节划分: 第四字节 第三字节 第二字节 第一字节 二进制: 11111110 1111 ...
- LOWORD或HIWORD宏得到的是一个无符号WORD类型的数
今天做一个小程序时,在那个窗口设置了SetCapture来捕获鼠标,然后那个窗口的WM_MOUSEMOVE消息里通过LOWORD和HIWORD宏获取当前鼠标位置时遇到这个问题,当鼠标移动到窗口外左边时 ...
- C++ 常用WinDef 宏函数LOWORD和HIWORD
做一个WORD 和LONG #define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((D ...
- LOWORD与HIWORD,GetEditSel与SetEditSel
两个宏函数 LOWORD 定义: #define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) <<16) & 0xFFFF ) ). 取低位的1 ...
- 学习LOWORD、 HIWORD、LOBYTE、HIBYTE
对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如: LPARAM lParam; WORD loValue = LOWORD(lP ...
- delphi 中几种多线程操作方式
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 主线程又程为UI线程. 进程和线程的主要差别在于它们是不同的操作系统资源管理方式.进程有独立的地址空 ...
- Delphi多线程详解CreateThread、TThread,以及线程间通过临界区(CriticalSection)实现同步
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...
- delphi 多线程3
多线程程序设计 我们知道,win95或winNT都是"多线程"的操作系统,在DELPHI 2.0中,我们可以充分利用这一特性,编写出"多线程"的应用程序. 对 ...
- delphi 讲的比较详细的多线程(推荐)
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...
最新文章
- 计算机视觉与深度学习 | 像素坐标转相机坐标转世界坐标,求R,t(附C++和Python源代码)
- gogs创建项目_容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
- 微软更懂“怎样尊重程序员”,正在改进程序员招聘流程
- apache kafka_2018年机器学习趋势与Apache Kafka生态系统相结合
- html5网站 500.19错误,WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决?...
- 阿里研究院:2020阿里农产品电商报告
- Cap03_项目立项管理
- 微信公众平台开发之留言板
- python第六篇文件处理类型
- Androd UI学习之ImageSwitcher
- SQLyog官网下载,SQLyog-12.4.2下载,SQLyog最新版下载,SQLyog Download
- 开源.net 混淆器ConfuserEx介绍 [转]
- m分别使用ESN网络,ESN+RBF神经网络以及ESN+Volterra网络进行数据预测对比仿真
- php工具能自动出代码的,打造自己的PHP半自动化代码审计工具
- Udp数据接收和发送代码
- 关于iPhone出现白苹果黑屏现象的修复方法
- AT1106S(PHS/EN输入接口通道0.8A低压H桥直流刷式电机驱动IC)
- 智能枕头方案/案列/APP
- 以Fitbit看新智能硬件商业模式
- TS7016: Could not find a declaration file for module ‘@/api/checkitem.js‘.解决办法
热门文章
- 自制机器人15分钟破解保险箱密码
- 基于多源大数据的实时公共交通服务指数研究:以天津市为例
- 用计算机算生日的魔术,农历年龄计算器,猜出别人生日的魔术有那些?
- python高亮显示输出
- 计算机跨应用心理,2017跨专业应用心理学考研难不难
- 【问题集锦】【Oracle】ORA-12518 TNS: listener could not hand off client connection
- 【idea】Command line is too long. Shorten command line for XXXApplication
- PS入门教程:简单实用的PS快捷键教程1
- openwrt路由器(RP-LINK)安装python并设置开机启动程序
- 【Android】0行代码实现任意形状图片展示--android-anyshape