sub eax, 0 - это что-нибудь делает? - PullRequest
6 голосов
/ 20 марта 2012

Я только что открыл файл в IDA Pro и нашел код, который выглядит совершенно бесполезным.Тем не менее, я подумал, что это может быть полезным.Разве sub eax,0 не вычитает 0 из eax?

Код:

hinstDLL= dword ptr  4  
fdwReason= dword ptr  8  
lpReserved= dword ptr  0Ch  

mov     eax, [esp+fdwReason]  
sub     eax, 0  
jz      short loc_10001038  

Ответы [ 2 ]

13 голосов
/ 20 марта 2012

Команда sub устанавливает флаги (OF, SF, ZF, AF, PF и CF, согласно документации ) - mov инструкции нет. jz будет прыгать, только если установлен нулевой флаг (ZF), поэтому, если вы хотите перейти на основе значения в eax, этот флаг должен быть установлен соответствующим образом.

6 голосов
/ 20 марта 2012

Инструкция sub установит нулевой флаг, если его результат равен нулю. В этом случае это означает, что нулевой флаг будет установлен, если eax равен нулю.

Итак, эти три инструкции проверяют, равен ли [esp+fdwReason] ноль, и в этом случае переходят к loc_10001038.

...