Anzeige:
Ergebnis 1 bis 6 von 6

Thema: String als function pointer verwenden - möglich?

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.06.2005
    Ort
    Balmora
    Beiträge
    6

    String als function pointer verwenden - möglich?

    Hoi Community,

    ich habe ein Programm, das ein Wort aus einer Datei liest und anhand dieses Wortes eine Funktion aufruft. Momentan habe ich ein großes if-else-if um die verschiedenen möglichen Worte auf die einzelnen Funktionen abzubilden.

    Ich könnte das Programm stark vereinfachen, wenn ich einfach direkt die Funktion, die dem Wort entspricht, aufrufen könnte. Mit Function Pointern also.

    Dazu muss ich aber vom dem String irgendwie auf den Function Pointer kommen.
    Oder ich muss direkt einen Namen als Function Pointer aus der Textdatei lesen.

    Ist sowas möglich?
    Vorschläge ...
    C is what I need

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182
    Also so einfach über Funktionspointer geht das nicht, libffi kann sowas.
    Geändert von Lin728 (21-08-2017 um 15:14 Uhr)

  3. #3
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Man könnte die verschiedenen Funktionspointer + die entsprechenden Funktionsnamen in einer Liste ablegen und dann in der Liste einfach nach dem Funktionsnamen suchen. Das Problem ist, dass die aufzurufenden Funktionen alle den gleichen Rückgabewert + die gleichen Parameter (Anzahl + Typ) benötigen.

    Gurß, FLorian
    Ein gebrechlich Wesen ist der X-Server.

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Oder mit einem assoziativen Container (map, hash), der als Key den Namen und als Value den Functionpointer hält

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von anda_skoa Beitrag anzeigen
    Oder mit einem assoziativen Container (map, hash), der als Key den Namen und als Value den Functionpointer hält

    Ciao,
    _
    Alles andere wäre eh zu gefährlich. Wenn man z.B. mit dlopen und dlsym eine Funktion aus einer .so läd und man den Namen aus einer unsicheren Quelle hat, dann könnte da arg was damit angestellt werden. Man glaubt nicht welche Manipulationen Leute schaffen wenn man einen Funktionspointer umbiegen kann.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.06.2005
    Ort
    Balmora
    Beiträge
    6
    Zitat Zitat von ContainerDriver Beitrag anzeigen
    Man könnte die verschiedenen Funktionspointer + die entsprechenden Funktionsnamen in einer Liste ablegen und dann in der Liste einfach nach dem Funktionsnamen suchen.
    keine schlechte Idee

    Das Problem ist, dass die aufzurufenden Funktionen alle den gleichen Rückgabewert + die gleichen Parameter (Anzahl + Typ) benötigen.
    das ist klar, und der Fall.

    Zitat Zitat von anda_skoa Beitrag anzeigen
    Oder mit einem assoziativen Container (map, hash), der als Key den Namen und als Value den Functionpointer hält
    hört sich noch besser an. Bedarf in C wohl Handarbeit, wobei sich das schon machen ließe.

    Zitat Zitat von panzi Beitrag anzeigen
    Alles andere wäre eh zu gefährlich. Wenn man z.B. mit dlopen und dlsym eine Funktion aus einer .so läd und man den Namen aus einer unsicheren Quelle hat, dann könnte da arg was damit angestellt werden. Man glaubt nicht welche Manipulationen Leute schaffen wenn man einen Funktionspointer umbiegen kann.
    Eine Validierung der erlaubten Funktionen war sowieso vorgesehen.


    Die Varianten mit der Liste oder dem assoziativen Array gefällt mir aber ziemlich gut.
    ... dass ich darauf nicht selbst gekommen bin ;-)

    Besten Dank!
    C is what I need

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •