Reuni aqui alguns exemplos de códigos em Assembly, úteis para a compreensão de trechos de binários quando fazemos engenharia reversa.
xor eax, eax
xor ecx, ecx
loop:
inc ecx
cmp ecx, 0xa
jl loop
Outra versão:
mov ecx, 0
loop:
add ecx, 1
cmp ecx, 0x9
jle loop
cmp eax, 0
je destino
Outra versão:
test eax, eax
je destino
Parece bobo, mas "fazer nada" corretamente significa não alterar nenhuma flag, nem nenhum registrador. A instrução em Assembly Intel mais famosa para tal é a NOP (NO Operation):
nop
Mas também é possível atingir o mesmo resultado com instruções como a XCHG (eXCHanGe). Por exemplo, se você trocar o valor do registrador EAX com ele mesmo, acaba por não fazer "nada":
xchg eax, eax
Instruções que não fazem nada também podem ser utilizadas como padding necessário para o correto alinhamento das seções do binário em memória. Já vi o GCC utilizar XCHG AX, AX neste caso.