1. Formato de archivo básico
Blog de referencia: diagrama de conversión de archivos llvm
.c
archivo, código fuente en lenguaje C..bc
Archivo, la forma binaria del bytecode llvm (código binario)..ll
archivo, la forma textual del código de bytes llvm..s
archivo, código de ensamblaje de máquina..out
archivos, binarios ejecutables.
Generalmente, el compilador del lenguaje C (gcc o clang) convierte directamente el código fuente .c
en un archivo binario ejecutable después de la ejecución .out
.
clang es la interfaz de llvm, si necesitamos obtener el código de bytes de llvm y luego realizar algunas operaciones en el código de bytes, podemos usar el clang -emit-llvm -c
comando para obtener .bc
el archivo.
Si necesita convertir bytecode a texto, use llvm-dis
convert .bc
to .ll
; la operación opuesta es llvm-as
.
llc
Las instrucciones convierten el código de bytes en código ensamblador, llc es el backend de llvm, el llamado backend se refiere a la parte relacionada con un determinado conjunto de instrucciones, como ARM, x86, etc.
2. Generar CFG
método uno
clang -c -emit-llvm xxx.c -o xxx.bc
opt --view-cfg xxx.bc
Los archivos de puntos generados de esta manera están en la carpeta /tmp/…dot.
Método dos
llvm-dis xxx.bc
opt -dot-cfg xxx.ll
El archivo de puntos generado de esta manera está en el directorio actual, pero es un archivo oculto y debe mostrarse ls -a
, por ejemplo .main.dot
, .
Los métodos anteriores generan CFG interno (intra CFG).
3. Generar png
dot cfg.dot -Tpng -o cfg.png