在这段装配之后,我似乎无法弄清eax
包含的内容:
mov edi, [edi+4]
lea eax, [edi+88h]
edi
指向一个类
答案 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;
看起来有些记录只是在那里访问了。