从 MOV 指令更改为 ADD 或 SUB 指令
Change from MOV instructions to ADD or SUB instructions
我想从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
对于此 self-modifying 代码,您要修改的 machine-code 字节每次都是相同的(假设它只运行一次),所以是的,可以只 add dst, desired - orig_dst
而不是 mov dst, desired
.
首先将 mov
助记符更改为 add
或 sub
,然后 assemble 并查看列表或 hexdump。这为您提供了目的地的起始值,因此您可以计算出要使用的立即数。
在您的 asm 源中进行这些更改并再次重建 + 测试。
您 self-modifying 的字节与 mov / add / sub 的直接操作数是分开的。您更改的一个字节是用 C3 ret
替换 for_leet_hackorz
中第一条指令的操作码(真的吗?),这就是为什么您需要更改助记符以添加或减去 之前 计算开始与期望之间的差异。
我想从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
对于此 self-modifying 代码,您要修改的 machine-code 字节每次都是相同的(假设它只运行一次),所以是的,可以只 add dst, desired - orig_dst
而不是 mov dst, desired
.
首先将 mov
助记符更改为 add
或 sub
,然后 assemble 并查看列表或 hexdump。这为您提供了目的地的起始值,因此您可以计算出要使用的立即数。
在您的 asm 源中进行这些更改并再次重建 + 测试。
您 self-modifying 的字节与 mov / add / sub 的直接操作数是分开的。您更改的一个字节是用 C3 ret
替换 for_leet_hackorz
中第一条指令的操作码(真的吗?),这就是为什么您需要更改助记符以添加或减去 之前 计算开始与期望之间的差异。