【问题标题】:What happens when you are missing an 8086 missing jump operand?当您缺少 8086 缺少跳转操作数时会发生什么?
【发布时间】:2018-10-11 23:44:33
【问题描述】:

我正在努力将一些旧的 8086 汇编代码更新为更现代的系统。在我的逆向工程中,我遇到了这个:

LINADJ: MOV AX,ENRMAX
SUB AX,LINBND       ;Is energy high enough to decrease power limit?
JLE ENDCYC          ;If not, don't change power limit

问题是这个文件中没有ENDCYC标签可以跳转。当跳转命令没有可跳转到的有效标签时会发生什么?

对不起,我的新手组装技能,但这个标签出现在其他密切相关的文件中,但据我了解,你不能从一个文件跳转到另一个文件。所以我假设这个跳转要么变成空操作,要么抛出某种错误。

【问题讨论】:

  • 你当然可以跳转到另一个文件。更新地址是链接器的工作。根据您的汇编程序,您可能必须在调用模块中将目标标签声明为extern 或类似名称,在导出模块中声明为global。如果出现问题,您将从汇编器或链接器中收到错误消息。它永远不会成为空操作(除非你的工具链已经脑死)。
  • 我应该寻找什么来判断它是否跳出了这个文件?似乎此代码中的大多数外部引用都被调用或包含在内。 $INCLUDE(:@ARCS:MEMSLV.A86)CALL AUDIT
  • CALLJLE 对标签可见性没有影响。如果它不在当前文件中并且已知代码可以工作,那么它将转到另一个文件。在你的汇编器中寻找 globalextern 指令或任何等效的指令。
  • 我们无法从您提供的信息中得知更多信息。不过,代码可以在处理器之间共享。
  • 不,几乎所有可能它都无法与未定义的标签进行组装/链接。实际上,只需将 ENDCYC 重命名为 ENDCYC1234 或其他一些已知不存在的标签,然后看看构建过程会发生什么。

标签: assembly reverse-engineering x86-16


【解决方案1】:

如上面的 cmets 中所述。似乎最终的解决方案是 ENDCYC 存在于另一段代码中,该代码链接到我正在逆向工程的代码。完成 ENDCYC 标签下的代码后,它会跳回原始代码段。因此,要回答我自己的问题,是的,如果它们链接在一起,您可以从一段代码跳转到另一段代码。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多