J'ai été faite test_program
cela en utilisant la bibliothèque dynamique et fonctionnant en tant que démon de Linux. Le test_program
contient un processus d'initialisation de code.Est-il possible de provoquer une erreur de segmentation en modifiant le fichier de bibliothèque lors de l'utilisation de la bibliothèque dynamique (dlopen)?
dlopen(libtest.so);
Normalement, se termine test_program
avec sigkill ne provoque pas une erreur de segmentation (I revérifié !!)
Mais quand terminé par écrasement fichier libtest.so
(par exemple. cp libtest.so /lib64/libtest.so
) de segmentation de la cause défaut.
le fichier de bibliothèque accidentellement écrasé et le fichier est en fait le même libtest.so
(j'ai été différé).
Je serais très reconnaissant de savoir pourquoi une erreur de segmentation se produit lorsque le fichier de bibliothèque est écrasé. Merci d'avoir lu et j'ai attaché Backtrace de corefile généré et dmesg alors s'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations.
trace (séparés):
#0 0x00007fd2c7668118 in ??() from /lib64/libgcc_s.so.1
#1 0x00007fd2c7669019 in _Unwind_Backtrace() from /lib64/libgcc_s.so.1
#2 0x00007fd2c73a2186 in backtrace() from /lib64/libc.so.6
#3 0x000000000050fda8 in print_trace (sig=11, siginfo=0x7fff87da5770, context=<optimized out>) at sighandler.c:239
#4 <signal handler called>
#5 0x0000000000018219 in ??()
#6 0x00007fd2c9c47a1a in _dl_fini() from /lib64/ld-linux-x86-64.so.2
#7 0x00007fd2c72d0e69 in __run_exit_handlers() from /lib64/libc.so.6
#8 0x00007fd2c72d0eb5 in exit() from /lib64/libc.so.6
#9 0x000000000050d655 in end_signal (signo=<optimized out>) at
#10 <signal handler called>test_program.c:103
dmesg:
test_program[11817]: segfault at 18219 ip 00007fd2c7668118 sp 00007fff87da4f40 error 4 in libgcc_s-4.8.5-20150702.so.1[7fd2c7659000+15000]
'man dlclose' "* Les erreurs de ces fonctions peuvent être diagnostiquées à l'aide dlerror (3) *" - spécifique à votre question, ce qui se passe quand' dlcose' est appelé (peut-être implicitement) et le fichier n'est plus là? –
@ DavidC.Rankin J'ai essayé de mettre dlerror mais il segfault quand dlclose a appelé, Et l'emplacement du fichier n'est pas changé. –