Red de conocimiento informático - Aprendizaje de programación - ¿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í.

¿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í.

Para depurar código ensamblador en Linux, puede usar depuradores generales como GDB y DDD, o puede usar ALD (depurador de lenguaje ensamblador) usado específicamente para depurar código ensamblador.

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

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

l disyuntor t disyuntor