Desensamblado
ZinjaI puede obtener, a través de la herramienta objdump, incluida como parte de las utilidades complementarias que usualmente acompañan al compilador (binutils), el desensamblado (código de máquina generado por el compilador) de un ejecutable u objeto (los archivos .o intermedios en un proyecto). Con los comando del submenú "Desensamblar" del menú "Herramientas", puede invocar este procedimiento y observar una parte de los resultados. ZinjaI filtra del resultado (el desensamblado completo de un ejecutable u objeto) el conjunto de instrucciones máquina que se correspondan con un conjunto de lineas determinadas del código funte. Estas líneas pueden ser las asociadas a la fracción del fuente seleccionada, o a la función completa en la cual se encuentra el cursor de texto. El resultado se muestra como texto en un nuevo panel, donde se intercalan las instrucciones de máquina, y las referencias al código fuente que las generó.
Para que el desensamblado sea posible, el programa/proyecto debe estar previamente compilado. ZinjaI invocará a la herramienta objdump (con los argumentos "-d -l -C") sobre el ejecutable o un archivo objeto. Si la porción de código a desensamblar corresponde a parte de un archivo fuente de un proyecto (no cabecera), se desensambla solo el objeto generado a partir de dicho fuente. Si se trata de un archivo de cabecera (no tiene objeto asociado) o un programa simple (no se generan objetos intermedios), se desensambla el ejecutable completo. En algunos proyectos, este último proceso podría tardar varios minutos.
Si obtiene una salida en blanco, o en la salida faltan referencias a algunas líneas del código fuente seleccionado, puede deberse a diferentes motivos. En primer lugar, asegurese de tener el ejecutable y/o los objetos actualizado (menú Ejecución->Compilar para el ejecutable, o click derecho en la pestaña del fuente y seleccionar Recompilar ahora para un objeto). Luego, debe tener en cuenta que hay líneas de código que nunca generan código de máquina al compilarse (como las declaraciones, los comentarios, las directivas de preprocesador, etc). También puede ocurrir si el código, aunque se corresponda efectivamente con un conjunto de instrucciones de máquina, no es efectivamente utilizado nunca en la ejecución del programa. Por ejemplo, una función que se define completamente, pero que nunca es invocada, puede ser omitida por completo por el compilador en el ejecutable que genera. Finalmente, las optimizaciones también puede influir. Si desensambla un ejecutable u objeto compilado con optimizaciones, dado que el compilador puede reordenar o reexpresar las instrucciones, el código generado puede estar en realación directa y evidente con el fuente. Por ejemplo: es común que el compilador evite llamadas a funciones muy simples, y compile el código de la función como si estuviera directamente en el punto de la llama (como si se copiase y pegase el contenido de la función allí). Por esto, en el desensamblado, en lugar de encontrarse referencias a la línea de la llamada, se encuentran referencias a las líneas de la definición de la función. En el desensamblado de líneas seleccionadas, ZinjaI no mostrará el código de máquina para estos casos, pero sí lo hará al desensamblar funciones completas. Entonces, si desensambla código compilado con optimizaciones, debería utilizar el comando para desensamblar funciones completas.
Finalmente, puede que una misma línea de código haya sido compilada e incluida en el ejecutable en reiteradas oportunidades. Esto puede ocurrir con templates (sus diferentes especializaciones), funciones estáticas o inline (podría haber copias en diferentes objetos), o como resultado de optimizaciones tales como las ejemplificadas en el párrafo anterior. Al utilizar el comando para desensamblar las lineas seleccionada, se mostrarán todas las ocurrencias de dichas líneas, separadas en la ventana de resultados por líneas en blanco.