【问题标题】:ASM , calling functions with asmASM , 用 asm 调用函数
【发布时间】:2012-02-04 13:37:06
【问题描述】:

我想在 C++ 程序中使用 ASM 调用地址 774a7fdch(kernel32.dll 函数) 中的函数

我正在使用 Visual Studio 2010。

我该怎么做?

call 774a7fdch

不行,怎么传调用函数地址?

谢谢!

【问题讨论】:

    标签: function assembly


    【解决方案1】:

    小心 CALL 指令,它取决于位置。编码为:

    E8 XX XX XX XX
    

    X 是从下一条指令的内存地址到您正在调用的函数地址的距离。该距离也称为增量偏移

    如果您不知道代码在内存中的位置以便进行计算,您可以尝试将地址加载到寄存器中:

    mov eax, 774a7fdch
    call eax
    

    不过,这将是 7 个字节而不是 5 个。

    另外,正如另一位用户指出的那样,硬编码函数的地址可能不是一个好主意,因为它们可以四处移动。

    我不知道这是否解决了您的问题,因为我不确定您所说的“不起作用”是什么意思。

    【讨论】:

      【解决方案2】:

      我之前在VS2010中也遇到过同样的问题。 尝试调用 [0x774a7fdc]

      【讨论】:

        【解决方案3】:

        应该使用

        call dword ptr 0x774a7fdc
        

        【讨论】:

        • 它说“操作数类型不正确”...:S
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多