在较早的版本中:
#define HIBYTE(x) (*((_BYTE*)&(x)+1))
或者是:
#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))
在最近的版本中:
#define HIBYTE(x) BYTEn(x,HIGH_IND(x,_BYTE))
这两种不同的定义产生不同的结果。例如:
__int32 x = 0x11223344;
/*根据前一种定义,HIBYTE(x)是0x33。但根据后一种定义,HIBYTE(x)是0x11。*/
在使用后一种定义时,类型为__int32的数据的HIBYTE实际是BYTE3,类型为__int64的数据的HIBYTE实际是BYTE7。
因此,必须查看IDA中的文件defs.h中的HIBYTE的定义,以免误解。