簡體   English   中英

組裝-Cmp不起作用

[英]Assembly - cmp doesn't work

我正在嘗試將匯編中的Unicode字符串(長度為8)替換為其他字符串。 字符串的地址開始以0x10遞增,並存儲在EDI中。 我知道字符串值,但是它的地址正在更改,所以我不能用地址替換它。 我在作弊引擎中使用代碼注入。 該代碼有效:

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時我已經設置了一個斷點。 而且,當我執行第一個和第二個代碼(以確保值正確)時,它也不起作用。 Cheat Engine將常量視為十六進制值(正是我想要的值),並且不了解我是否編寫例如0Ch。 那么我應該如何比較這些值?

cmp edi,0341E340將edi( 無內存訪問 )中的值與某些東西進行比較,我猜這應該是十六進制常數。

cmp [edi-10],41將地址edi-10( 存儲器的內容 )上的值與cmp [edi-10],41進行比較。從這種指令格式來看,不清楚是比較字節還是dword值。

但是無論如何,兩者所做的事情完全不同。

例如,如果這樣做:

; preparing test values + memory content for examples
mov edi,bufferAddress ; pointer to some writeable free memory
mov [edi],byte 41     ; all values are decimal
mov [edi+1],byte 1
; then these will evaluate as "equal" (ZF=1)
cmp edi,bufferAddress
cmp [edi],byte 41
cmp [edi],word 256+41  ; x86 little-endian
; these will evaluate as "not equal" (ZF=0)
cmp edi,bufferAddress+1
cmp [edi],word 41  ; on [edi+1] is "1" instead of 0

所以這完全令人困惑,為什么還要將這兩個示例混合在一起。

第二種情況是否有效取決於存儲器的內容。 第一個是否起作用取決於edi的值(可能是某些緩沖區地址)。

問題是作弊引擎將常量視為4個字節,而不是1個字節。 我不得不這樣寫:

cmp [edi-10],00320031
jne originalcode
cmp [edi-0C],00340033
jne originalcode
cmp [edi-08],00360035
jne originalcode
cmp [edi-04],00380037
jne originalcode

現在可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM