Como posso ver o código de montagem para um programa C ++?
Quais são as ferramentas populares para fazer isso?
c++
assembly
disassembly
Nerd
fonte
fonte
Alt +8
Respostas:
Pergunte ao compilador
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
.Espreitar o binário
Se você compilou binário,
objdump -d a.out
no UNIX (também funciona para cygwin),dumpbin /DISASM foo.exe
no Windows.Use seu depurador
Depuradores também podem aparecer desassociados.
disas
comando no GDB,fonte
No GCC / G ++, compile com
-S
. Isso produzirá umsomething.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
.fonte
-fverbose-asm
opçãoNo Visual Studio ;
fonte
Para gcc / g ++
Isso irá gerar prog.s com alguns comentários sobre variáveis usadas em cada linha do asm:
fonte
Este site está atualmente trabalhando para mim (2017): https://godbolt.org/
fonte
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.
fonte
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.
fonte
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>
.fonte
A maioria dos compiladores tem uma opção para gerar uma listagem de montagem. Por exemplo, com o VisualStudio você pode usar algo como:
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.
fonte
Desmontador do PE Explorer para arquivos PE de 32 bits. IDA para outros.
fonte
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.
fonte
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.
fonte
Em um Intel Mac OS X 10.8 (Mountain Lion), a
-masm=intel
diretiva não funcionou. No entanto, se você tiver o Xcode instalado, ele deverá ter instalado a ferramenta denominada 'otool':Você deve fornecer o código do objeto compilado como um parâmetro.
fonte
Se você é um usuário do Eclipse, pode usar a visualização Desmontagem .
fonte