BYTE3,是int 的第三个还是第四个字节?已提供的 IDB 文件

逆向工程 拆卸 艾达 C C++
2021-06-30 07:55:15

我有一个程序,我试图通过尝试理解一两个函数来调试它,我已经通过 idb 文件下载了一些信息,它帮助我找到了某个地方。但我有点卡在我有这样的地方:

BYTE3(v1) = 0;

这是来自 ida hex-rays 插件,它为我制作了一些不错的 c 伪代码。我无法双击该函数并以某种方式对其进行翻译,所以我真的不知道如何理解它的作用,我的猜测是它需要一个 int 的第三个或第四个字节。所以我的问题是,如果它不能被十六进制射线翻译,我怎么能找到这个函数并至少查看它的反汇编?根据ida,如果有帮助的话,签名看起来像这样:_BYTE __fastcall(int)

1个回答

所有 Hex-Rays 宏都在<IDA directory>\plugins\defs.h 中定义它也可以在https://github.com/nihilus/hexrays_tools/blob/master/code/defs.h 获得

对于BYTE3(x)

...
#define BYTEn(x, n)   (*((_BYTE*)&(x)+n))
...
#define BYTE3(x)   BYTEn(x,  3)
...

所以BYTE3(x)yields (*((_BYTE*)&(x)+3)),这实际上意味着该值的第四个字节x