-1
我已經反彙編了我的測試C程序,這是代碼的一部分,我不確定我是否理解正確。ASM和重複條件檢查,爲什麼?
00401143: 83 F8 01 cmp eax,1
00401146: 0F 84 F4 00 00 00 je 00401240
0040114C: 85 C0 test eax,eax
0040114E: 0F 85 A0 00 00 00 jne 004011F4
00401154: 31 C0 xor eax,eax
所以基本上,這是我的理解:
- 檢查
eax
等於1
,如果是返回0
- 如果
0
,跳到00401240
,如果沒有,繼續 - 測試==因此我已經知道它會返回
1
,因爲沒有辦法eax可以等於0
,因爲它會跳到00401146
。 我想知道爲什麼我應該叫這個test
。爲什麼我不能簡單地將test
和jne
替換爲單個jmp
(無條件跳轉),我們只有在eax
等於1
的情況下才能達到。 - 如果沒有
0
(因此1
),跳轉到004011F4
- 這總是會發生 - 我們絕不會從這個角度達到
00401154
(我們可以假設那麼就一定要調用/跳轉)代碼這將某處導航我們到00401154
這是正確的還是有東西,我沒有正確理解?
'je'會如果'EAX告吹!= 1',然後'test'會給你一個'EAX> 1' true或'EAX == 0'false,然後將它用於'jne'或者通過......這個反彙編的C代碼是什麼樣子的? – abiessu
序列cmp eax,1 |如果eax == 1,je 401240會跳轉。除非代碼中的其他地方跳轉到401154,否則不需要xor eax,eax,因爲只有在文本中eax == 0才能到達那裏eax,eax | jne 4011F4序列。 – rcgldr