2014-01-17 6 views
1

Я делаю некоторые обратные инжиниринг с простым приложением crackme, и я отлаживаю его с помощью OllyDbg.Обратное проектирование - И 0FF

Я зациклился на поведении инструкции AND с операндом 0x0FF. Я имею в виду, что он эквивалентен в C++ if (... = true).

Так что толку в том, что:

 

    ECX = CCCCCC01 
    ZF = 1 
    AND ECX, 0FF 
    ### After instruction 
    ECX = 00000001 
    ZF = 0 
    ZF - Should be active 

Я не знаю, почему результат ECX регистр 1 и ZF не активен.

И => 1, 1 = 1 (Те же операнды) В противном случае = 0

Может кто-нибудь объяснить мне, что?

Thankx помощи

+1

Почему вы думаете, что ZF должен быть 1? Результат AND не равен нулю, поэтому ZF будет 0. –

ответ

1

Это побитовое И, поэтому в двоичном у вас есть

1100 1100 1100 1100 1100 1100 0000 0001 
AND 0000 0000 0000 0000 0000 0000 1111 1111 
    ---------------------------------------- 
    0000 0000 0000 0000 0000 0000 0000 0001