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#includeint 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))

以上就是本小白的总结,希望可以给各位参考~
如有不当之处,请不吝赐教

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:LOWORD和HIWORD函数-创新互联
本文网址:http://scyanting.com/article/ceiigj.html