所以大概,你有一些这样的功能:
void func(...)
{
asm {
...
mov [edi+0xc], eax
...
}
}
现在,要从函数中获取 eax 的值,您需要传入一个指针
void func(..., int *ptr)
{
asm {
...
mov [edi+oxc], eax
mov [ptr], eax
...
}
}
或者您可以将其用作返回值:
int func(...)
{
int ret;
asm {
...
mov [edi+oxc], eax
mov [ret], eax
...
}
return ret;
}
可能还有其他选择,但这些是最简单的。
如果你真的想得到一个指向 edi 的指针,你会使用指向指针的指针作为参数 [或作为返回值的指针 - 所以我只会向你展示指向指针的指针,因为返回值完全遵循与上述相同的模式]
void func(..., int **ptr)
{
asm {
...
// Assumes eax isn't used elsewhere below!
// Otherwise, find another free register.
mov [edi+oxc], eax
lea [edi+0xc], eax // LEA = load effective address.
mov [ptr], eax
...
}
}