Administradores Fernando Mercês Postado Outubro 2, 2017 Administradores Postado Outubro 2, 2017 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): 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! Citar
Ygor Da Rocha Parreira Postado Outubro 7, 2017 Postado Outubro 7, 2017 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, Citar
Administradores Fernando Mercês Postado Outubro 7, 2017 Autor Administradores Postado Outubro 7, 2017 Então nego, mas como é AND com ele mesmo, só vai dar zero se já for zero. É que falei especificamente sobre TEST EAX, EAX sacou? Abraço! Citar
Posts Recomendados
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.