std::function verursacht komischerweise eine Endlosschleife



  • Sehr geehrte Community,

    ich nutze das Disorm Library (GNU GPL)

    Das Programm nutzt GTKmm als GUI, aber das ist hier nicht das Problem.

    Ich habe erstmal als Konsolenprogramm disstorm bearbeitet bis es geklappt hat.

    mainwindow.hpp und cpp
    http://nopaste.info/316ffff792.html

    dies hat die Funktion insert, welches die Assembler code in den ListView einfügt. Diese wird mit std::bind in ein std::function gebunden und dann an die klasse DASM übergeben samt Dateipfad+name.

    dasm.hpp und cpp
    http://nopaste.info/4b01e6fb4d.html
    der Typ hier heißt insf. Wenn ich insf auskommentiere, verschwindet die Endlosschleife.

    Im Pseudocode habe ich mir das so gedacht

    MainWindow OpenDialog öffnet eine dll oder exe
    ->
    MainWindow open_this_file Funktion startet einen neuen Thread, der ein Objekt von DASM macht.
    -> DASM disassemblert die Datei in einer Schleife
    von line 0 bis ende der Datei
    --> Ausgabe auf Konsole (für mich zur Kontrolle, wird später auskommentiert)
    --> gibt die Assembler Line zur Funktion insert (per std::function)
    ---------------

    Künstliche Aussprungcode hat im Moment nicht wirklich geklappt, er hat dann stets zu früh rausgesprungen.

    Danke nochmal.

    MfG
    Sepultura

    P.S. Warum wird das Wort V O R A U S von der Forensoftware zensiert?



  • Könntest du versuchen irgendein kompilierbares Minimalbeispiel zu liefern ohne GUI und Disassembler?
    Siehe angepinnten Thread.
    Und Voraus wird nicht zensiert VOR RAUS wird zensiert, weil das falsch ist.



  • Voraus funktioniert wunderbar.

    Benutze eine Debugger, wenn du zu faul bist, das Problem mit einem kurzen Testbeispiel zu reproduzieren.



  • Nathan schrieb:

    Könntest du versuchen irgendein kompilierbares Minimalbeispiel zu liefern ohne GUI und Disassembler?
    Siehe angepinnten Thread.
    Und Voraus wird nicht zensiert VOR RAUS wird zensiert, weil das falsch ist.

    ich versuche DASM in eine kleinen Konsolenprogramm zu kopieren.

    bis gleich.



  • OK,

    neues Problem,

    habe jetzt 30 min gewartet, es ist keine Endlosschleife, sondern ein Übertragungsproblem:
    Die Addresse wird komischerweise zur ListView falsch übertragen, dadurch kam ich darauf, dass es eine Endlosschleife sei, aber tatsächlich beendet er die arbeit richtig, nur die Adresse zur inf wird falsch übertragen.

    Hier ein KonsolenProgramm
    http://www31.zippyshare.com/v/37576597/file.html

    cpp_klein.7z

    Lizenz: GNU GPL
    Visual Studio 2012 Express Project.

    in der txt Datei findet ihr die Quelle, wo ihr Pthreads für Windows findet. Das PRogramm disassemblert die pthreads dll.

    Mfg
    Sepultura



  • Wir wollen Code den wir einfach nur Copy&Pasten möchten, ohne externe Bibliotheken und dann einfach compilieren:
    http://www.c-plusplus.net/forum/304133
    (Den Code reduzieren)



  • Nathan schrieb:

    Wir wollen Code den wir einfach nur Copy&Pasten möchten, ohne externe Bibliotheken und dann einfach compilieren:
    http://www.c-plusplus.net/forum/304133
    (Den Code reduzieren)

    achso, also auch distorm und pthreads raus?



  • Sepultura schrieb:

    Nathan schrieb:

    Wir wollen Code den wir einfach nur Copy&Pasten möchten, ohne externe Bibliotheken und dann einfach compilieren:
    http://www.c-plusplus.net/forum/304133
    (Den Code reduzieren)

    achso, also auch distorm und pthreads raus?

    Jup, unnötige Funktionen entfernen, Zahlen bei Funktionsaufrufen durch Dummys ersetzen etc. Nach jedem Schritt kompilieren und gucken, ob der noch da ist.
    Meistens findest du dabei auch selber den Fehler.


Anmelden zum Antworten