В .net у меня есть два класса, например:
class A
{
public int a;
public float b;
public float foo()
{
return a + b;
}
}
class B
{
public static void Foo(A a)
{
Console.WriteLine(a.foo());
}
}
Код ассемблера функции B.Foo в памяти выглядит следующим образом:
_asm
{
push ebp;
mov ebp, esp;
push edi;
sub esp, 4;
mov edi, [ebp + 8]; /// eid is Class A
cmp [edi], edi;
mov eax, [edi + 8];
push eax;
xxxxxx
xxxxxx
xxxxxx
}
Asмы можем видеть, что edi указывает на класс A. В некотором смысле, я получил значение edi, которое является ptr класса A. Теперь я хочу преобразовать edi в класс A. Если это c ++, я могу сделать так:B * b = reinterpret_cast (edi);