重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本人小白一枚,最近在做逆向分析题目的时候通过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位的,使用的宏为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))
以上就是本小白的总结,希望可以给各位参考~
如有不当之处,请不吝赐教
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧