该寄存器包含什么?

时间:2010-07-19 08:09:13

标签: assembly reverse-engineering

在这段装配之后,我似乎无法弄清eax包含的内容:

mov     edi, [edi+4]
lea     eax, [edi+88h]

edi指向一个类

4 个答案:

答案 0 :(得分:2)

Load Effective Address获取引用的实际地址。出于一些神秘的原因,符号汇编被编写为好像它引用了edi + 88h的内容,但是指令实际上做的是加载edi寄存器的加上常量088h(相当于{ {1}})。我怀疑edi + 4是一个函数指针:更可能的是,它是一个vtbl指针或一个数组。

答案 1 :(得分:0)

一个很长的镜头,因为我对你的课程一无所知,但无论如何都要去。

你有多重继承吗?也许edi+4是第二个虚拟表,而[edi+4]+88h是你想要调用的函数指针?或者,根据您的编译器,可能是虚拟表位于+4,在任何一种情况下eax都包含要调用的虚函数的地址。

答案 2 :(得分:0)

根据edi的使用情况,它可能最终指向内存位置,但lea并非总是如此使用:http://en.wikipedia.org/wiki/Addressing_mode#Useful_side_effect

答案 3 :(得分:0)

mov     edi, [edi+4]
lea     eax, [edi+88h]

    edi points here after 'mov'
    .
    xxxx....................
    |                      ^
xxxx....                   eax points here after 'lea'
^
edi pointed here before 'mov'

char* edi;
void* eax;

edi = *(char**)(edi+4);
eax = edi+0x88;

看起来有些记录只是在那里访问了。