¿Qué herramientas se utilizan para depurar nasm en Linux? ¿O hay alguna forma de depurarlo? No soy bueno usando gdb. Quiero depurar un archivo com que escribí.
Desde una perspectiva de depuración, la ventaja de usar GAS es que se puede incluir una tabla de símbolos en el código de destino generado, de modo que GDB y DDD se pueden usar para la depuración a nivel de código fuente. Para incluir una tabla de símbolos en el programa ejecutable generado, puede compilar y vincular con:
[código xiaowp @Gary]$ as-gstabs-o hola o hola s
. [Pequeño código p@gary]$ ld -o hello hello.o
Al ejecutar el comando as con parámetros, gstabs puede decirle al ensamblador que agregue una tabla de símbolos al código de destino generado, y también requerido Tenga en cuenta que el parámetro -s no se puede agregar al vincular con el comando ld; de lo contrario, la tabla de símbolos en el código de destino se eliminará durante la vinculación.
Los programadores ensambladores generalmente enfrentan algunos entornos de software y hardware hostiles. El ALD corto puede estar más en línea con las necesidades reales, por lo que a continuación se presenta principalmente cómo usar ALD para depurar programas ensambladores. Primero, ejecute el comando ald en modo de línea de comando para iniciar el depurador. El parámetro de este comando es el programa ejecutable que se va a depurar:
[xiaowp@gary doc]$ ald Hola
Assembly Language Debugger 0.1.3 Todos los derechos reservados
Hell Elf Intel 80386 (32 bits), LSB, ejecutable, versión 1 (actual)
Cargando símbolos de depuración... (15 símbolos cargados)
ald gt p>
Cuando aparezca el mensaje ALD, use el comando de desensamblado para desensamblar el segmento de código:
ald gt disassembly -s .text
Desensamble la sección. Texto (0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx, 0xf
08048079 B998900408 mov ecx, 0x8049098
0804807E BB01000000 mov ,0x1
08048083 B804000000 mov eax, 0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx, 0x0
0804808 f b 80100000 mov eax, 0x1
08048094 CD80 int 0x80
La primera columna de la información de salida anterior es el código de dirección correspondiente a la instrucción, que se puede utilizar para establecer un punto de interrupción durante la ejecución del programa:
ald gt interrupt 0x08048088
El punto de interrupción 1 está configurado para 0x08048088
Después de configurar el punto de interrupción, use el comando ejecutar para comenzar a ejecutar el programa.
ALD pausará automáticamente el programa cuando se encuentre un punto de interrupción y mostrará los valores actuales de todos los registros:
ald gt run
Inicia el programa: Hola
En el punto de interrupción 1 encontrado en 0x08048088
eax = 0x 000000004 ebx = 0x 00000001 ecx = 0x 08049098 EDX = 0x 0000000 fesp = 0x bffff 6 c 0 ebp = 0x 00000000 ESI = 000 00000 EDI = 0x 0000000
ds = 0x 00000002 b es = 0x 00000002 b fs = 0x 00000000 GS = 0x 00000000
ss = 0x 00000002 b cs = 0x 00000023 EIP = 0x 08048088 e flags = 0 x 00000246
Bandera: PF ZF IF
08048088 CD80 int 0x80
Si necesita recorrer el código ensamblador, puede usar el siguiente comando:
ald gtthen
¡Hola mundo!
eax = 0x 00000000 f ebx = 0x 00000000 ecx = 0x 08049098 EDX = 0x 0000000 fesp = 0x bffff 6 c 0 ebp = 0x 00000000 ESI = 0x 00000000 EDI = 00 0 0000
ds = 0x 00000002 b es = 0x 00000002 b fs = 0x 00000000 GS = 0x 00000000
ss = 0x 00000002 b cs = 0x 00000023 EIP = 0x 0804808 f e flags = 000 00346
Banderas: PF ZF TF IF
0804808 f b 80100000 mov eax, 0x1
Para obtener una lista detallada de todos los comandos de depuración admitidos por ALD, puede utilizar el comando de ayuda:
ald gt help
Los comandos se pueden abreviar.
Si se ingresa un comando en blanco, se repite el último comando.
Escriba 'help ltcommand gt' para obtener información sobre ltcommand gt.
Comandos comunes
Conexión clara continuar desconexión
Ingrese a Comprobar archivo de ayuda cargando
Siguiente salida registro ejecutar configuración
Desinstalar ventana escribiendo paso a paso
Comandos relacionados con puntos de interrupción
Interrumpir eliminación Deshabilitar Habilitar Ignorar p>
l disyuntor t disyuntor