Вы никогда не сможете вернуться к тому же самому источнику, так как нет метаданных об этом, сохраненном в скомпилированном коде.
Но вы можете заново создать код из ассемблерного кода.
Посмотрите эту книгу, если вас интересуют следующие вещи: Реверс: Секреты обратного инжиниринга .
Редактировать
Некоторые компиляторы-101 здесь, если бы вы определяли компилятор другим словом, а не таким техническим, как «компилятор», что бы это было?
Ответ: Переводчик
Компилятор переводит написанные вами синтаксис / фразы на другой язык, который компилятор C переводит на ассемблер или даже машинный код. Код C # переводится в IL и пр.
Исполняемый файл, который у вас есть, является просто переводом вашего исходного текста / синтаксиса, и если вы хотите «перевернуть его» и, следовательно, «перевести обратно», вы, скорее всего, не получите ту же структуру, что и в начале.
Более реальным примером будет то, что если вы переводите с английского на немецкий и с немецкого обратно на английский, структура пересылки, скорее всего, будет другой, могут использоваться другие слова, но значение, контекст, скорее всего, не будут изменились.
То же самое относится и к компилятору / транслятору, если вы переходите с C на ASM, логика та же, это просто другой способ чтения (и, конечно, его оптимизированный).