[ida] 结构偏移

IDA 帮助:移位指针

备忘

方式一:Convert to struct*

image

image


方式二:定义__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宏相比,移位指针是一种改进 因为带有它们的表达式更短且更易于阅读。


posted @ 2024-04-09 14:59  DirWangK  阅读(119)  评论(0编辑  收藏  举报