O que significa “-0x1 (%edx,%ecx, 1)” na saída do objdump?
Pergunta
Usando o Objdump para entender um binário e percebo que não sou fluente o suficiente na sintaxe do ASM. O que significa a seguinte noção?
xor %al,-0x1(%edx,%ecx,1)
E enquanto você está nisso - o que devo procurar para encontrar documentos sobre essas noções?
Solução
Os parênteses são compensações de memória:
-0x1(%edx,%ecx,1)
(Sintaxe AT&T) é igual a [edx+ecx*1-1]
(Sintaxe Intel)
Guia rápido para Sintaxe da Assembléia AT&T (conforme seu pedido).
Outras dicas
Este é um exclusivo ou com conteúdo do byte baixo (%Al) do registro 'A' e o conteúdo da memória no endereço, que é a soma dos registros de 32 bits 'D' (%EDX), 'C 'Multiplicado por 1 (%Ecx, 1) e -1. O resultado é escrito de volta para %Al. Em c
al ^= (char*)(edx+ecx*1 - 1);
Você pode procurar coisas assim em Sandpile ou na documentação Intel/AMD.