J'ai changé un binaire ELF, et maintenant j'essaie de savoir ce que j'ai gâché. Mon binaire instrumenté est appelé mutatee_out
sur le texte collé ci-dessous. Le symbole qu'il dit qui n'est pas défini est en effet dans la table dynamique, j'ai vérifié. Et aussi avec la bonne adresse sur la section .text
. Donc, ma question est: quelles sont les raisons d'un symbole indéfini? (Donc je peux examiner ce qui aurait pu aller mal).Pourquoi un symbole ne serait-il pas recherché sur le binaire lui-même?
Lorsque j'ai couru avec LD_DEBUG=symbols
, j'ai remarqué qu'il ne cherche pas ce symbole dans le fichier lui-même, d'où le symbole indéfini. Les autres symboles sont recherchés sur le fichier comme vous pouvez le voir ci-dessous aussi.
Des idées? Pourquoi ce symbole ne serait-il pas recherché sur le binaire lui-même?
17405: symbol=_ZTVSt11regex_error; lookup in file=mutatee_out [0]
17405: symbol=_ZTVSt11regex_error; lookup in file=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [0]
17405: symbol=__gxx_personality_v0; lookup in file=mutatee_out [0]
17405: symbol=_ZN9__gnu_cxx27__verbose_terminate_handlerEv; lookup in file=mutatee_out [0]
17405: symbol=_ZN9__gnu_cxx27__verbose_terminate_handlerEv; lookup in file=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [0]
17405: symbol=_ZSt9terminatev; lookup in file=mutatee_out [0]
17405: symbol=_ZSt9terminatev; lookup in file=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [0]
17405: symbol=__gmon_start__; lookup in file=mutatee_out [0]
17405: symbol=__gmon_start__; lookup in file=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [0]
17405: symbol=__gmon_start__; lookup in file=/lib/x86_64-linux-gnu/libgcc_s.so.1 [0]
17405: symbol=__gmon_start__; lookup in file=/lib/x86_64-linux-gnu/libc.so.6 [0]
17405: symbol=__gmon_start__; lookup in file=/lib/x86_64-linux-gnu/libm.so.6 [0]
17405: symbol=__gmon_start__; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
17405: symbol=__gmon_start__; lookup in file=/lib/x86_64-linux-gnu/libdl.so.2 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/lib/x86_64-linux-gnu/libgcc_s.so.1 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/lib/x86_64-linux-gnu/libc.so.6 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/lib/x86_64-linux-gnu/libm.so.6 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
17405: symbol=_ZN9decl_test8call_cppEi; lookup in file=/lib/x86_64-linux-gnu/libdl.so.2 [0]
17405: mutatee_out: error: symbol lookup error: undefined symbol: _ZN9decl_test8call_cppEi (fatal)
Est-ce que l'exécutable travaillait _avant_ que vous avez ajouté le code-virus? ... Je veux dire avant que vous n'ayez édité le fichier exécutable binaire? –
Ce n'est pas un code de virus. C'est un projet sérieux, vous pouvez vérifier sur GitHub.com/dyninst. Et oui cela fonctionne, et le but est de le faire fonctionner après aussi. –