Pergunta

Existe uma maneira de gerar um arquivo de cabeçalho c++ para um arquivo .obj?Ou talvez exista um utilitário que possa visualizar arquivos .obj.Já encontrei objconv que converte entre formatos, mas não consigo encontrar nenhum gerador/visualizador .h.

Foi útil?

Solução

Dada a tag C ++, a situação não é tão sem esperança quanto algumas das outras respostas.

Em particular, pelo menos com a maioria dos compiladores C ++, o nome de uma função será mutilado (a Microsoft a chama de "decorada") para indicar os parâmetros adotados por essa função. O esquema de alvo varia de um compilador para outro, mas essencialmente qualquer um deles codifica informações suficientes para você recriar uma declaração para a função-o tipo de retorno, o nome da própria função, o nome da classe se for uma função de membro e o número exato e o tipo de parâmetros que a função espera.

Embora não precisasse ser feito consumindo o nome, um sistema C ++ não tem escolha real a não ser incluir informações de parâmetros no arquivo de objeto. Quando você sobrecarrega as funções, o vinculador precisa de alguma maneira de resolver qual sobrecarga para vincular uma chamada específica.

Devo acrescentar que classificar tudo isso pode ser um pouco de trabalho - apenas por exemplo, se o código incluir modelos, o nome do símbolo no arquivo de objeto se expandirá tudo os parâmetros do modelo (incluindo parâmetros padrão). Apenas por exemplo, considere um bit trivial de código como este:

#include <vector>
#include <string>

std::vector<std::string> x;

Quando eu compilar isso com VC ++, e então faça dumpbin /symbols foo.obj, a saída é de cerca de 75 kilobytes. Embora meu código -fonte pareça definir apenas um símbolo, o arquivo de objeto contém definições para cerca de 180 símbolos, muitos deles quase completamente não relacionados a qualquer coisa que eu escrevi.

Também vale a pena mencionar que, se o arquivo de objeto foi compilado com informações de depuração, isso (normalmente) produzirá substancialmente mais informações de tipo (e outras) no arquivo de objeto.

Outras dicas

Sua pergunta está marcada com visual-c++ então presumo que você esteja no Windows.

Não é possível gerar os arquivos de cabeçalho originais a partir de arquivos de objeto, uma vez que muitas (provavelmente a maioria) das informações nos arquivos de cabeçalho são descartadas durante a compilação do código-fonte em arquivos de objeto.

No entanto, você pode usar o dumpbin utilitário para inspecionar arquivos de objetos em um nível muito baixo.A única informação presente em um arquivo objeto que pode ser interessante para você é a lista de nomes de símbolos definidos no arquivo objeto fornecido.Você não pode obter nenhuma informação de tipo do arquivo objeto.Portanto, você não pode dizer que tipo de valor uma determinada função assume ou espera.

Em alguma situação (quando todos os argumentos são passados ​​para a função através da pilha), você poderia dizer o número de argumentos que uma função espera (desmontando o início do código da função e contando quantos valores são retirados da pilha).Porém, isso não funcionará na grande maioria dos casos.

Não pode haver um gerador de cabeçalho, pois o arquivo .OBJ não contém todas as informações necessárias em um arquivo de cabeçalho. Quanto ao despejo do .OBJ, as ferramentas para fazer isso serão dependentes do compilador. A ferramenta relacionada ao GCC para fazer isso é objdump.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top