O que é um descompilador, como ele funciona?

Então, um decompilador é realmente algo que fornece a origem de um trecho de código compilado / interpretado? Porque para mim isso parece impossível. Como você obteria os nomes das funções, variáveis, classes, etc., se forem compilados. Ou estou interpretando mal a definição? Como funciona? E qual é o diretor geral por trás de fazer um?

questionAnswers(4)

yourAnswerToTheQuestion