Tengo un archivo de objeto compilado usando como (del código del ensamblador).Detalles sobre queja de acceso de memoria gdb
Si vinculo usando ld, cuando intento stepi (o NexTi) GDB se queja de acceso a la memoria en la dirección 0x0. Si lo enlace usando gcc, todo está bien.
estoy adivinando el problema es causado por ld, lo que produce un menor número de secciones cuando se compara con el resultado de la vinculación gcc.
¿Hay alguna manera de configurar gdb para que sea más detallado para que pueda averiguar qué problema hay con el ejecutable?
(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main()
(gdb) x/10i $pc
0x100000f8e <main>: fbld 0x6c(%rip) # 0x100001000 <data1>
0x100000f94 <main+6>: fimul 0x7a(%rip) # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp 0x60(%rip) # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0 $0x2000001,%rax
0x100000fa7 <main+25>: mov $,%rdi
0x100000fae <main+32>: syscall
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main()
PS: El ejecutable en sí funciona como se espera en ambas versiones.
editar posteriores: los comandos que he usado para compilar:
as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
¿Ha intentado vaciar los registros (registros de información) o la pila antes y, si es diferente, después del comando "stepi"? ¿Por qué te importa si el ejecutable funciona bien? – AlastairG
Puedo volcar los registros antes y después del "stepi" pero no veo nada relevante. Me importa porque no me gusta el comportamiento inexplicable. – diciu
¿Cómo llamas 'ld' y 'gcc' (y 'como' por supuesto)? ¿Qué banderas usaste? – Bart