在C++中调用ASM函数

发布于 2024-12-04 10:57:22 字数 991 浏览 1 评论 0原文

我昨天问了一个问题,如何调用 __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”处的内存。无法“读取”内存。

I asked a question yesterday, how to call a __fastcall function, it worked great.

Now my final function i got to call is having some difficulties.

Here is the ASM function.

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

IDA PRO labels it as.

int __thiscall sub_458E90(void *this, int a2)

It's called like this

sub_458E90(&v9, -1439978213);

Now here is the code I tried and it just gives me a Exception at runtime

   int addr = 0x458E90;

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

Also tried

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

Both give me

Application Error
The instruction at "0x00458e93" refenced memory at "0x00000000". The memory could not be "read".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼眸印温柔 2024-12-11 10:57:22

解决了 ebx 必须用于密钥的问题。就这么简单。

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

Solved ebx must of been used for key. Simple as that.

void also must of been changed to int forgot about that. (most likely not to important)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文