【问题标题】:VC++ equivalent for asm jmpasm jmp 的 VC++ 等价物
【发布时间】:2017-04-24 01:36:33
【问题描述】:

表单中有很多旧代码:

FARPROC p[1024];

...


__asm {
   jmp p[128];
}

这适用于 32 位应用程序,但升级到不再支持内联 asm 的 64 位。

C++ 中是否有等效的jmp 函数?

【问题讨论】:

  • FARPROC?我很高兴我不在你的鞋子里。
  • 可能转到(at least with gcc)
  • 让它摆脱痛苦。
  • 您可能需要编辑问题以指定编译器。我假设它的 MSVC 的 64 位 ASM 限制..
  • 这个问题听起来和this one差不多。那里有一些想法(包括对threaded code 的引用,但没有灵丹妙药。

标签: assembly visual-c++ x86


【解决方案1】:

虽然 MSVC 不允许您编译 ASM,但您可以改为使用 MASM 编译 ASM,然后链接它。有一个相当全面的示例说明如何进行完整的设置here

据我所知,您只是在尝试调用一个函数,在这种情况下,使用实际语言调用函数可能是一个更好的考虑途径。

【讨论】:

  • IIRC call 会将返回地址推入堆栈,而 jmp 不会,所以我认为您不能简单地将其视为函数。
  • @MegaStupidMonkeys 你是对的,跳转与函数调用不同(除非该调用被内联......),但基本上这家伙是在跳代码,这是传统的目的功能!
【解决方案2】:

我从来没有使用过它,但仍然有 goto 功能。

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多