Resposta curta:
Converter em C código binário gravado no Arduino não é possível.
Resposta longa:
C é uma linguagem de alto nível e o resultado final (binário) pode ter como origem (fonte) infinitas possibilidades e fazer o caminho inverso à partir de código assembly simplesmente não é possível de forma automatizada. Até poderia fazer algo próximo, mas usando referências conhecidas, precisaria ter uma base de conhecimento muito complexa para fazer isso de forma automatizada, então em termos práticos não é possível.
Um exemplo: eu digo que 1, 2 e 3 (fonte) viram A (binário), 4, 5 e 6 viram B (binário), logo à partir de A e B não tenho como determinar se a origem era 1, 2, 3, 4….
Tentando explicar de uma forma lúdica:
Neste exemplo simples acho que é possível entender o motivo do problema:
Tenho um texto escrito em três idiomas diferentes, poderiam ser frases diferentes, mas para o exemplo é a mesma:
Português: Arduino é uma plataforma que facilita a criação de protótipos
Espanhol: Arduino es una plataforma que facilita la creación de prototipos
Italiano: Arduino è una piattaforma che facilita la prototipazione
E traduzo os três textos para o Inglês:
Arduino is a platform that facilitates the prototyping
Arduino is a platform that facilitates the prototyping
Arduino is a platform that facilitates the prototyping
Neste exemplo os três textos são os fontes (linguagem de alto nível, classes, etc…) e a tradução, texto em inglês, é o binário compilado e "linkado" para o Arduino.
É fácil notar que usando o texto traduzido (binário) não é possível determinar o texto original (fonte).
Este exemplo não reflete nem de longe o que acontece na realidade, mas para este tipo de dúvida, muito técnica, se não falar de outra forma acho que não ajudaria.
[]s
Rogério Lucas.