我剛剛在IDA Pro中打開了一個文件,發現一些看起來完全沒用的代碼。但是,我認爲它可能有一些用處。 sub eax,0
只是從eax中減去0?sub eax,0 - 它執行任何操作嗎?
的代碼:
hinstDLL= dword ptr 4
fdwReason= dword ptr 8
lpReserved= dword ptr 0Ch
mov eax, [esp+fdwReason]
sub eax, 0
jz short loc_10001038
我剛剛在IDA Pro中打開了一個文件,發現一些看起來完全沒用的代碼。但是,我認爲它可能有一些用處。 sub eax,0
只是從eax中減去0?sub eax,0 - 它執行任何操作嗎?
的代碼:
hinstDLL= dword ptr 4
fdwReason= dword ptr 8
lpReserved= dword ptr 0Ch
mov eax, [esp+fdwReason]
sub eax, 0
jz short loc_10001038
sub
指令設置標誌(OF
,SF
,ZF
,AF
,PF
,和CF
,根據documentation) - 的指令mov
沒有。只有零標誌(ZF
)被設置時,jz
纔會跳轉,所以如果你想根據eax
中的值跳轉,那麼必須正確設置標誌。
我以爲你需要使用TEST指令。謝謝! – 2012-03-20 17:16:13
'test'確實按位進行隱式AND,但不會影響所有相同的標誌。從'test'文件中:'OF'和'CF'標誌設置爲'0'。'SF','ZF'和'PF'標誌根據結果設置。 'AF'標誌未定義。「 – 2012-03-20 17:17:17
sub
指令將設置零標誌,如果其結果爲零。在這種情況下,這意味着如果eax爲零,則將設置零標誌。
因此,這三條指令檢查[esp+fdwReason]
是否爲零,並在該情況下跳轉到loc_10001038
。
是的,它從eax中減去零。但那*做了一些事情,它設置了標誌。例如,它將導致零的唯一方法是,如果eax是零開始的。 – harold 2012-03-20 17:08:13