2016-05-09 8 views
0

Situation: Ich benutze Python Ctypes-Modul, um eine c freigegebene Lib laden, die in der Tat ctypes Modul verwenden dlopen mit RTLD_NOW, um die freigegebene Lib zu laden. Wenn ich die shared lib verwende, stürzte sie ab, wenn sie als sehr seltsame Funktionsadresse bezeichnet wurde.dlopen mit RTLD_NOW führt zu einem Absturz

Kernstapel wie folgt:

(gdb) bt 
#0 **0x00000000001723f6** in ??() 
#1 0x00007f39a9d1b506 in do_io() 
    from /home/z/libgshared.so 
#2 0x00007f39b84dddf5 in start_thread (arg=0x7f39a9101700) 
    at pthread_create.c:308 
#3 0x00007f39b7b021ad in clone() 
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113 

dann ging ich tiefer und finden die seltsame Adresse von ist GOT, was bedeutet, die dlopen nicht die tatsächlichen Adressen in einigen Funktionen berechnen.

(gdb) disas 0x7f39a9ba63f0 
Dump of assembler code for function [email protected]: 
    0x00007f39a9ba63f0 <+0>: jmpq *0x42d452(%rip)  # 0x7f39a9fd3848 
    0x00007f39a9ba63f6 <+6>: pushq $0xf06 
    0x00007f39a9ba63fb <+11>: jmpq 0x7f39a9b97380 
End of assembler dump. 
(gdb) x/2a 0x7f39a9fd3848 
0x7f39a9fd3848: **0x1723f6** 0x172406 
(gdb) 

sehen die Adresse 0x1723f6 in Rahmen genau die entkernten Adresse ist 0.

Ich frage mich, warum dies geschehen ist, und wie kann ich es umgehen, oder es beheben?

Antwort

0

0x7f39a9fd3848: 0x1723f6 0x172406

Dies sind unrelocatedGOT Einträge innerhalb welcher Bibliothek enthält 0x7f39a9ba63f0 (und 0x7f39a9fd3848), wahrscheinlich libgshared.so.

Sie möglicherweise in diesem GLIBC bug.

+0

Vielen Dank für die Anwendung der Informationen. Ich überprüfe die glibc Version auf meinem centos7 vm, die Version von glibc ist 2.17, die die Behebung dieses Fehlers enthält. Gibt es andere Möglichkeiten, die zu diesem Ergebnis führen können? Was ist mit der Shared-Lib-Abhängigkeit? – zuanyg