本人小白一枚,最近在做逆向分析题目的时候通过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位的,使用的宏为HIDWORDLODWORD函数,取值位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函数相关推荐

  1. 关于 Lo、Hi、LoWord、HiWord

    Cardinal 是 4 字节无符号的整型, 先看一个例数: Cardinal 例数: 4277991664 按字节划分: 第四字节 第三字节 第二字节 第一字节 二进制: 11111110 1111 ...

  2. LOWORD或HIWORD宏得到的是一个无符号WORD类型的数

    今天做一个小程序时,在那个窗口设置了SetCapture来捕获鼠标,然后那个窗口的WM_MOUSEMOVE消息里通过LOWORD和HIWORD宏获取当前鼠标位置时遇到这个问题,当鼠标移动到窗口外左边时 ...

  3. C++ 常用WinDef 宏函数LOWORD和HIWORD

    做一个WORD 和LONG #define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((D ...

  4. LOWORD与HIWORD,GetEditSel与SetEditSel

    两个宏函数 LOWORD 定义: #define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) <<16) & 0xFFFF ) ). 取低位的1 ...

  5. 学习LOWORD、 HIWORD、LOBYTE、HIBYTE

    对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如: LPARAM lParam; WORD loValue = LOWORD(lP ...

  6. delphi 中几种多线程操作方式

    在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 主线程又程为UI线程. 进程和线程的主要差别在于它们是不同的操作系统资源管理方式.进程有独立的地址空 ...

  7. Delphi多线程详解CreateThread、TThread,以及线程间通过临界区(CriticalSection)实现同步

     在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...

  8. delphi 多线程3

     多线程程序设计 我们知道,win95或winNT都是"多线程"的操作系统,在DELPHI 2.0中,我们可以充分利用这一特性,编写出"多线程"的应用程序. 对 ...

  9. delphi 讲的比较详细的多线程(推荐)

     在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...

最新文章

  1. 计算机视觉与深度学习 | 像素坐标转相机坐标转世界坐标,求R,t(附C++和Python源代码)
  2. gogs创建项目_容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
  3. 微软更懂“怎样尊重程序员”,正在改进程序员招聘流程
  4. apache kafka_2018年机器学习趋势与Apache Kafka生态系统相结合
  5. html5网站 500.19错误,WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决?...
  6. 阿里研究院:2020阿里农产品电商报告
  7. Cap03_项目立项管理
  8. 微信公众平台开发之留言板
  9. python第六篇文件处理类型
  10. Androd UI学习之ImageSwitcher
  11. SQLyog官网下载,SQLyog-12.4.2下载,SQLyog最新版下载,SQLyog Download
  12. 开源.net 混淆器ConfuserEx介绍 [转]
  13. m分别使用ESN网络,ESN+RBF神经网络以及ESN+Volterra网络进行数据预测对比仿真
  14. php工具能自动出代码的,打造自己的PHP半自动化代码审计工具
  15. Udp数据接收和发送代码
  16. 关于iPhone出现白苹果黑屏现象的修复方法
  17. AT1106S(PHS/EN输入接口通道0.8A低压H桥直流刷式电机驱动IC)
  18. 智能枕头方案/案列/APP
  19. 以Fitbit看新智能硬件商业模式
  20. TS7016: Could not find a declaration file for module ‘@/api/checkitem.js‘.解决办法

热门文章

  1. 自制机器人15分钟破解保险箱密码
  2. 基于多源大数据的实时公共交通服务指数研究:以天津市为例
  3. 用计算机算生日的魔术,农历年龄计算器,猜出别人生日的魔术有那些?
  4. python高亮显示输出
  5. 计算机跨应用心理,2017跨专业应用心理学考研难不难
  6. 【问题集锦】【Oracle】ORA-12518 TNS: listener could not hand off client connection
  7. 【idea】Command line is too long. Shorten command line for XXXApplication
  8. PS入门教程:简单实用的PS快捷键教程1
  9. openwrt路由器(RP-LINK)安装python并设置开机启动程序
  10. 【Android】0行代码实现任意形状图片展示--android-anyshape