在C ++中调用ASM函数

时间:2011-09-13 23:21:28

标签: c++ assembly hook

我昨天问了一个问题,如何调用__fastcall函数,它运行得很好。

现在我接到电话的最后一项功能是遇到了一些困难。

这是ASM功能。

seg000:0043671F                 push    0AA2BAD1Bh
seg000:00436724                 lea     ecx, [ebp+var_14]
seg000:00436727                 call    sub_458E90

IDA PRO将其标记为。

int __thiscall sub_458E90(void *this, int a2)

它被称为这样

sub_458E90(&v9, -1439978213);

现在这里是我尝试的代码,它只是在运行时给我一个异常

   int addr = 0x458E90;

    __declspec(naked) void sub_458E90(int buffer, int key)
    {
        __asm{
            push key
            mov ecx, buffer
            call [addr]
             retn
        }
    }

也试过

__declspec(naked) void sub_458E90_1(int buffer, int key)
{
    __asm{
        push key
        mov ecx, buffer
        jmp [addr]
    }
}

两个都给我

应用程序错误 “0x00458e93”处的指令在“0x00000000”处重新激活存储器。内存无法“读取”。

1 个答案:

答案 0 :(得分:1)

解决ebx必须用于密钥。就这么简单。

void也必须更改为int忘记了这一点。 (很可能不重要)