(derleyici kodundan) kullanılarak derlenmiş bir nesne dosyasına sahibim.gdb bellek erişimi şikayeti hakkında ayrıntılar
ben stepi (veya nexti) gdb adresi 0x0 en bellek erişimi şikayetçi çalıştığımda o ld kullanarak bağlantı varsa. gcc kullanarak bağlantı kurarsam, her şey yolunda. Sorunu tahmin ediyorum
gcc bağlanması sonucu ile karşılaştırıldığında daha az bölümleri üretir ld, kaynaklanır.
Gdb'yi daha ayrıntılı olacak şekilde yapılandırmanın bir yolu var mı? Bu nedenle, yürütülebilir dosyada neyin yanlış olduğunu anlayabiliyorum.
(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()
Not: her iki versiyonda da beklendiği gibi çalıştırılabilir kendisi çalışır.
Sonra düzenleme: komutlar i derlemek için kullandım:
as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
Kayıtları (bilgi yazmaçları) veya yığmayı daha önce ve "stepi" komutundan sonra farklı olarak atmayı denediniz mi? Yürütülebilirlik düzgün çalışıyorsa neden umurundasınız? – AlastairG
Kayıtları "stepi" nin öncesine ve sonrasına dökebilirim ama ilgili hiçbir şey göremiyorum. Umrumda değil çünkü açıklanamayan davranışlardan hoşlanmıyorum. – diciu
'ld' ve 'gcc' (ve elbette 'olarak') nasıl çağırdınız? Hangi bayrakları kullandın? – Bart