Como posso ver o código de montagem para um programa C ++?
Quais são as ferramentas populares para fazer isso?
Como posso ver o código de montagem para um programa C ++?
Quais são as ferramentas populares para fazer isso?
Respostas:
Se você estiver criando o programa você mesmo, poderá solicitar ao seu compilador para emitir a fonte do assembly. Para a maioria dos compiladores UNIX, use o -S
comutador.
Se você estiver usando o GNU assembler, a compilação -g -Wa,-alh
fornecerá origem e montagem misturadas no stdout ( -Wa
solicita ao driver do compilador que passe opções ao assembler, -al
ativa a listagem de montagens e -ah
adiciona a lista de "fontes de alto nível"):
g++ -g -c -Wa,-alh foo.cc
Para o Visual Studio, use /FAsc
.
Se você compilou binário,
objdump -d a.out
no UNIX (também funciona para cygwin),dumpbin /DISASM foo.exe
no Windows.Depuradores também podem aparecer desassociados.
disas
comando no GDB,No GCC / G ++, compile com -S
. Isso produzirá um something.s
arquivo com o código de montagem.
Editar: se você deseja que a saída esteja na sintaxe da Intel (que é IMO, muito mais legível e a maioria dos tutoriais de montagem a utiliza), compile com -masm=intel
.
-fverbose-asm
opção
No Visual Studio ;
Este site está atualmente trabalhando para mim (2017): https://godbolt.org/
Muitas pessoas já disseram como emitir código de montagem com um determinado compilador. Outra solução é compilar um arquivo de objeto e despejá-lo com uma ferramenta como objdump , readelf (no Unix) ou DUMPBIN ( link ) (no Windows). Você também pode despejar um executável, mas será mais difícil ler a saída.
Isso tem a vantagem de trabalhar da mesma maneira com qualquer compilador.
Qualquer depurador que você estiver usando deve ter uma exibição de montagem (Visual Studio, Borland IDE, gdb, etc.). Se você não estiver usando um depurador e quiser apenas ver qual montagem está em um programa, poderá usar um desmontador ou, alternativamente, executar o programa e anexá-lo a um depurador e fazer o despejo a partir daí. Consulte as referências aos desmontadores para obter informações sobre as opções.
Como outra pessoa mencionou, o depurador da sua plataforma é um bom ponto de partida. Para a britadeira de todos os depuradores e desmontadores, dê uma olhada IDA Pro.
Nas plataformas Unix / Linux (incluindo Cygwin), você pode usar objdump --disassemble <executable>
.
A maioria dos compiladores tem uma opção para gerar uma listagem de montagem. Por exemplo, com o VisualStudio você pode usar algo como:
cl.exe /FAfile.asm file.c
Para melhor legibilidade, porém, a maioria dos depuradores oferecerá uma visão que intercala a desmontagem com a fonte original, para que você possa comparar seu código com a linha de saída do compilador por linha.
Desmontador do PE Explorer para arquivos PE de 32 bits. IDA para outros.
Você também pode tentar este site: http://assembly.ynh.io/
Lá, você pode colar seu código C ou C ++ e pressionar um botão azul para ver a versão equivalente à montagem.
No Visual Studio, você pode gerar a listagem do assembler para um projeto C ++.
Vá para as propriedades do projeto, depois para C ++ / Output Files e defina a configuração de saída do assembler e o local da lista ASM como um nome de arquivo.
Se você é um usuário do Eclipse, pode usar a visualização Desmontagem .
A visualização Desmontagem mostra o programa carregado como instruções do assembler combinadas com o código fonte para comparação. A linha atualmente em execução é indicada por um marcador de seta e destacada na exibição. Você pode executar as seguintes tarefas na exibição Desmontagem:
- Defina pontos de interrupção no início de qualquer instrução do assembler
- Habilitar e desabilitar pontos de interrupção e definir suas propriedades
- Siga as instruções de desmontagem do seu programa
- Ir para instruções específicas no programa
Alt +8