Обратный инжиниринг — AND 0FF

Я занимаюсь реверс-инжинирингом с помощью простого приложения для взлома и отлаживаю его с помощью OllyDbg.

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

Итак, что смущает:


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

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

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

Кто-нибудь может мне это объяснить?

спасибо за помощь


person user3127031    schedule 17.01.2014    source источник
comment
Почему вы думаете, что ZF должен быть 1 ? Результат И не равен нулю, поэтому ZF будет равен 0.   -  person Paul R    schedule 18.01.2014


Ответы (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
person Theodore Norvell    schedule 17.01.2014