备忘
定义__shifted() 指针
有时在二进制代码中,我们会遇到指向结构中间的指针。 这样的指针通常不存在于源代码中,而是一个优化 编译器可能会引入它们以使代码更短或更快。
可以使用移位指针来描述此类指针。移位的指针 是一个常规指针,其中包含有关名称的其他信息。 父结构及其开头的偏移量。例如:
struct mystruct
{
char buf[16];
int dummy;
int value; // <- myptr points here
double fval;
};
定义偏移指针:
int *__shifted(mystruct,20) myptr;
上面的声明意味着 myptr 是指向“int”的指针,如果我们 将其减少 20 个字节,我们将以“mystruct”的开头结束。
请注意,IDA 不会将移位指针的父项限制为结构。 调整后移动的指针可以指向除“void”之外的任何类型。
此外,还支持负偏移量。它们意味着指针指向 到结构之前的记忆。
当移位指针与调整一起使用时,它将显示为 'ADJ' 帮助程序函数。例如,如果我们进一步引用内存 4 个字节, 它可以这样表示:
ADJ(myptr)->fval
与CONTAINING_RECORD宏相比,移位指针是一种改进 因为带有它们的表达式更短且更易于阅读。
标签:int,ida,mystruct,偏移,myptr,指针,移位,结构 From: https://www.cnblogs.com/DirWang/p/18124003