【问题标题】:Change from MOV instructions to ADD or SUB instructions [closed]从 MOV 指令更改为 ADD 或 SUB 指令 [关闭]
【发布时间】:2020-08-07 08:09:58
【问题描述】:

我想从mov指令改成SUB指令(我想,我们也可以改成ADD指令),我想调整数值,使整个程序的功能保持不变。

   for_real_programmers:
     mov dx, 0 ; 
     inc dx ;

   for_leet_hackorz:
     mov word ptr [for_real_programmers], 0d929h ; ?
     mov word ptr [for_real_programmers+2], 0d9f7h ; ?
     mov byte ptr [for_leet_hackorz], 0c3h ; ?
     jmp restart

【问题讨论】:

  • 能否请您重新表述您的问题?是否要将 mov 转换为等效的 addsub 指令?
  • 不要将文本作为图片发布。只需将它们复制并粘贴到此处
  • 请勿发布代码图片。出于这个原因,我对你的问题投了反对票,一旦你edit你的问题并用文字替换图片,我就会收回我的反对票。
  • @fuz ,我觉得这个帖子更好更多:)。谢谢你的建议
  • 您可以通过将变量从自身中减去来将其设置为零。您可以通过减去 -1 将变量增加 1 ...

标签: assembly x86 machine-code self-modifying


【解决方案1】:

对于这个自修改代码,您要修改的机器代码字节每次都相同(假设它只运行一次),所以可以只使用add dst, desired - orig_dst 而不是mov dst, desired

首先将mov 助记符更改为addsub,然后组装并查看列表或hexdump。这为您提供了目的地的起始值,因此您可以计算出要使用的立即数。

在您的 asm 源代码中进行这些更改并再次重建 + 测试。

您要自行修改的字节与 mov / add / sub 的直接操作数是分开的。您更改的一个字节是将for_leet_hackorz(真的吗?)中第一条指令的操作码替换为C3 ret,这就是为什么您需要更改助记符以在计算之前开始与期望之间的区别。

【讨论】:

  • 好的,但是当你说 :add dst,desired - orig_dst 而不是 mov dst,desired.,你的意思到底是什么?我知道 add cx,2ah 我使用汇编器 8086 而不是 asm @peter Cordes
  • 我的意思是内存目标add,而不是内存目标mov。从字面上将源中的mov 更改为add。所以目的地与mov 的目的地相同,但不是在不关心这些字节的旧值的情况下替换它,而是在其中添加或减去它。
  • @RoméoTia:“asm”是“汇编语言”的缩写。我不是在谈论任何特定的工具。这就像说“我去自动取款机取现金,而不是 ATM”。
  • 感谢您的反应。我必须把 c3 ret 准确地放在哪里?我把它像你的通知一样,但它不起作用。我把它放在 For_leet_hackorz 的第一行。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 2011-09-13
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多