Ir para conteúdo

Posts Recomendados

  • Administradores
Postado

Fala galera!

Estamos no meio do curso de Eng. Reversa II, que tá rolando em São Paulo. Numa das análises de um binário de 32-bits surgiu novamente uma "comparação" com a instrução TEST, ao invés da CMP e novamente esqueci da diferença, mas achei um tópico num outro fórum que deixou claro e decidi escrever aqui pra nunca mais esquecer. rs

Acontece que a TEST faz um E bit-a-bit (bitwise AND) entre os operandos, o que é completamente da CMP que compara subtraindo-os. Pra entender melhor, suponha que EAX = 3 (11 em binário). Se fizermos:

TEST EAX, 3

O cálculo feito é um AND de 11 com 11, resultando em 11, mas este resultado é descartado. No entanto, as flags ZF, PF e SF são afetadas de acordo com o seguinte pseudo-código (retirei do manual da Intel):

59d1bf1ceeaaa_ScreenShot2017-10-02at01_21_38.png.e15619850ac0ac8b6996bdab636b93ae.png

A instrução que vimos estava assim:

TEST EAX, EAX

Como isso vai fazer um AND do valor de EAX com ele mesmo, a ZF vai ser setada somente se o valor de EAX for zero (todos os seus bits zerados). Então isso "dá no mesmo" que fazer:

CMP EAX, 0

É isso. Quis registrar aqui para usar como referência futura. Abraços e bons estudos!

Postado

Fala pakito,

Vc mandou muito bem, só rolou um typo aqui:

"a ZF vai ser setada somente se o valor de EAX for zero (todos os seus bits zerados)"

Na verdade eh o resultado da operação de bitwise (que ele chamou de TEMP) que deve ser zero, e não o conteúdo do registrador EAX.

Abs,

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...