Opublikowano: 08-02-2017



"Function not defined." - taki komunikat zobaczysz, gdy spróbujesz ustawić pułapkę na funkcję w anonimowej przestrzeni nazw.

Wykorzystując instrukcję break możemy ustawić pułapkę na daną funkcję. Na ogół nie sprawia trudności ustawienie jej na funkcję globalną, metodę klasy, czy funkcję w nazwanej przestrzeni nazw (za pomocą ::).

W przypadku anonimowej przestrzeni nazw przed :: zamiast nazwy przestrzeni, czy klasy powinniśmy dopisać (anonymous namespace), jak w poniższym przykładzie:

Jest to oczywiście jedno rozwiązanie. Inną metodą jest znalezienie nazwy funkcji w stylu C (udekorowanej - name mangling) i na niej ustawienie pułapki. Nazwę funkcji możemy poznać za pomocą polecenia nm (linia 39) lub objdump.

Powyżej widać, że szukaną nazwą jest _ZN12_GLOBAL__N_17funkcjaEv. W przykładzie poniżej możemy zaobserwować, że pułapka została ustawiona (linia 18), a GDB poprawnie zinterpretowało jej nazwę (linia 23).



Comments powered by Disqus