Lista funkcji bibliotek C++

0

Witam.
Chciałbym zapytać Was, bardziej zaawansowanych kolegów, czy da się(a zakładam, że się da) wylistować, zrzucić do tablicy, vectora, czy też innej struktury wszystkie funkcje zawarte w danej bibliotece (C++). Dla przykładu: Jako argument programu podać <iostream>, lub <cmath> i dostać listę dostępnych do użycia funkcji. Podobny program napisałem dla klas Javowych(Nadmienię, że Java jest moim "głównym" językiem). Niestety w C/C++ już nie jestem na tyle biegły by wymyślić coś tak "od ręki". Podsumowując, chodzi mi o jakąś metodę "wyciągania" z bibliotek funkcji. De facto nie musi być to nawet program napisany przeze mnie. Np. może być to jakaś funkcjonalność gcc o której nie wiem. Głównym celem jest pobranie tych funkcji.
Każda pomoc mile widziana. Pozdrawiam.

0

teoretycznie daloby sie to zrobic ale jedno zasadnicze pytanie

po co?

0

Clang udostępnia biblioteki, dzięki którym możesz takie rzeczy wyciągnąć (: gotowego programu nie znam.
https://github.com/eliben/llvm-clang-samples masz nawet repo z przykładami

0

Z dwóch powodów.
a)Chciałbym stworzyć listę funkcji potencjalnie niebezpiecznych(pod względem ingerencji w system użytkownika, np fork() może zaspamić system procesami, forkbomb), przez co łatwiej by mi się je przeglądało.
b)By zrobić pewien moduł, skrypt "podpowiadający" funkcje użytkownikom. Coś jak w popularnych IDE.

0

Parsujesz plik nagłówkowy i wyciągasz funkcje, troche skubania z tym może być.
Ale oznaczanie funkcji jako "potencjalnie niebezpieczna" bez znajomości jej implementacji, czy kontekstu użycia jest raczej kiepskim pomysłem.
Bo przykładowo ktoś używa fork() w serwerze poprawnie i wie że sposób w jaki tej funkcji używa jest dobry, w takim razie oleje warning twojego skryptu, natomiast newbie może zacząć szukać innego wyjscia bo twój skrypt podpowiada że jest źle, a wcale nie jest. Żeby wyniki były miarodajne musiałbyś jak pisałem (Pewnie da się to inaczej zrobić też) przeanalizować przebieg programu, i ogólnie kontekst w jakim została podejrzana funkcja wywołana, sprawa raczej mocno skomplikowana, bez analizy asma sie nie obejdzie imo.

0

Jeżeli wszystko z pkt a) działo by się automatycznie to jak zrobisz to pochwal się rozwiązaniem bo jestem ciekawy ;) co do pkt b) biblioteki clanga będą dobrym wyborem. Wiele "podpowiadaczy" właśnie z nich korzysta

0

@Proxima Masz trochę racji. Tylko nie wiem kto będzie odpalał dany kod na mej maszynie. Zadania byłby czysto algorytmiczne (np. znajdowanie podciągów arytmetycznych w tablicy liczb itp.). Więc nikomu fork raczej do szczęścia niebyły potrzebny (czas rozwiązania nie ma znaczenia, o ile test nie wykonuje się dłużej niż X sekund).
@stryku Nie do końca automatycznie ;). Automatycznie tworzyłaby się lista wszystkich funkcji, a ja ręcznie wybierałbym te potencjalnie niebezpieczne (które mogą np. zawiesić serwer).

0

Hmmm. W takim razie nie jest potrzebne tak skomplikowane rozwiązanie, a wystarczy zablokować wszelkie systemowe funkcje i zostawić te stricte używane w programach spojowych.
// edit
nie wiem jak można funkcje poblokować, ani nie wiem jaki masz kompilator, ale wygooglać to na stacku to żaden problem, najprostszy wariant może być taki że do kodu przysyłanego na twoją maszynę (bo to ma być taka sprawdzarka, tak?) jest includowany plik z przeciążonymi funkcjami które nie są potrzebne w celach algorytmicznych, a funkcje są puste, no i się nie wykonują.
// edit2
są jescze rozwiązania systemowe, gdzie po prostu twój program wykonywał by się z minimalnymi prawami, właściwie sam output na konsole i prawa do wykonania, też powinno działać

1

@Proxima Masz trochę racji. Tylko nie wiem kto będzie odpalał dany kod na mej maszynie. Zadania byłby czysto algorytmiczne (np. znajdowanie podciągów arytmetycznych w tablicy liczb itp.). Więc nikomu fork raczej do szczęścia niebyły potrzebny (czas rozwiązania nie ma znaczenia, o ile test nie wykonuje się dłużej niż X sekund).

Jeśli to robisz z powodów security (żeby program nic nie zepsuł na maszynie) to nie rób tego tak, to zły sposób. Blokowanie funkcji z bibliotek to żadne rozwiązanie, bo jeśli nawet zabronisz wołać fork z glibc, to nic nie stoi na przeszkodzie żeby abuser zreimplementował go sobie za pomocą surowego wołania syscalla (i tak samo z każdą inną funkcją - wszystko można zrobić używając syscalli bezpośrednio).

Hmmm. W takim razie nie jest potrzebne tak skomplikowane rozwiązanie, a wystarczy zablokować wszelkie systemowe funkcje i zostawić te stricte używane w programach spojowych.
// edit
nie wiem jak można funkcje poblokować, ani nie wiem jaki masz kompilator, ale wygooglać to na stacku to żaden problem, najprostszy wariant może być taki że do kodu przysyłanego na twoją maszynę (bo to ma być taka sprawdzarka, tak?) jest includowany plik z przeciążonymi funkcjami które nie są potrzebne w celach algorytmicznych, a funkcje są puste, no i się nie wykonują.

Tak samo, jesli to ma zapewnić bezpieczeństwo to żadne rozwiązanie.

Dobre rozwiązanie to
1)

są jescze rozwiązania systemowe, gdzie po prostu twój program wykonywał by się z minimalnymi prawami, właściwie sam output na konsole i prawa do wykonania, też powinno działać

  1. wirtualizacja
  2. polityka automatycznego wykrywania i radzenia sobie z abuserami DDOSującymi system

1 użytkowników online, w tym zalogowanych: 0, gości: 1