我试图用一些其他替换一个unicode字符串(其长度为8)。字符串开头的地址增加0x10并存储在EDI中。我知道字符串值,但其地址正在改变,所以我不能用地址替换它。我在作弊引擎中使用代码注入。 该代码工作:大会 - cmp不工作
alloc(newmem,4096)
label(returnhere)
label(originalcode)
label(exit)
newmem:
repe movsb
cmp edi,0341E340
jne originalcode
mov [edi-10],31
mov [edi-0E],32
mov [edi-0C],33
mov [edi-0A],34
mov [edi-08],35
mov [edi-06],36
mov [edi-04],37
mov [edi-02],38
originalcode:
jmp MSVCR120.memcpy+53
exit:
jmp returnhere
"MSVCR120.dll"+F20C:
jmp newmem
nop
nop
returnhere:
但这并不:
alloc(newmem,8192)
label(returnhere)
label(originalcode)
label(exit)
newmem:
repe movsb
cmp [edi-10],41
jne originalcode
cmp [edi-0E],42
jne originalcode
cmp [edi-0C],43
jne originalcode
cmp [edi-0A],44
jne originalcode
cmp [edi-08],45
jne originalcode
cmp [edi-06],46
jne originalcode
cmp [edi-04],47
jne originalcode
cmp [edi-02],48
jne originalcode
mov [edi-10],31
mov [edi-0E],32
mov [edi-0C],33
mov [edi-0A],34
mov [edi-08],35
mov [edi-06],36
mov [edi-04],37
mov [edi-02],38
originalcode:
jmp MSVCR120.memcpy+53
exit:
jmp returnhere
"MSVCR120.dll"+F20C:
jmp newmem
nop
nop
returnhere:
当然这两个代码可以被组装,但第二个不执行任何操作(它无法通过比较部分) 。 我确定我比较的值是好的,因为当edi是0341E340时,我设置了一个断点。更重要的是,当我执行第一个和第二个代码时(一起确保值是正确的),它也不起作用。 作弊引擎将常量视为十六进制值(正是我想要的),它不理解我是否写入,例如0Ch。那么我应该如何比较这些值呢?
我有点惊讶这个没有投诉的组装,它在这里选择什么作为默认的操作数大小?字节?双字?可能不是单词,这可能很奇怪,但你似乎认为 – harold
这两个代码质量差。添加大小修饰符,你希望它们是怎么样的,比如'cmp [edi-10],byte 41'..你也使用'0C',这不是一个数字,'0x0C'或'0Ch',或者任何你的汇编程序支持,但我没有看到没有任何前缀/后缀的默认六进制数字。你为什么不在这里复制一些可以组装的代码? – Ped7g
我编辑了我的问题,并放置了一些可以组装的代码。 – Enri