string aus memory DLL



  • hallooo

    versuche grade einen string aus einer memory auszulesen ( DLL ).

    der string wird korrekt ausgelesen, jedoch bekomme ich ab dem substr einen programmabsturz ( der string ist genau 9 zeichen lang)

    DWORD address = 0xB555A0;
    std::string *titel = *(std::string*)(address);
    titel->substr(3, 6); // nehme nur die letzten 6 Zeichen.
    

    weiss jemand, an was das liegen könnte?

    Lg Tom.



  • Ein std::string ist etwas mehr, als nur aufeinanderfolgende Zeichen im Speicher.

    Bei deiner "Zuweisung" ist auch ein * zuviel

    uholda schrieb:

    der string wird korrekt ausgelesen,

    Wie kommst du darauf?



  • Sorry das * war ein kopierfehler von mir.
    Die Frage ist warum substr trotzdem einen programmabsturz verursacht


  • Mod

    uholda schrieb:

    Sorry das * war ein kopierfehler von mir.

    Auf solche Details kommt's aber an. Wie kann eine Kopie fehlerhaft sein? Es ist keine Kopie. Du hast den Code abgetippt, mit wer weiß welchen Freiheiten und Fehlern. Das heißt, wir suchen jetzt Fehler in einem Code, der vielleicht irgendwie so ähnlich aussieht, wie der Code, der tatsächlich den Fehler verursacht. Das ist nicht sinnvoll.

    Wie man Probleme nachstellbar und nachvollziehbar macht



  • uholda schrieb:

    Die Frage ist warum substr trotzdem einen programmabsturz verursacht

    C++Unwissender schrieb:

    uholda schrieb:

    der string wird korrekt ausgelesen,

    Wie kommst du darauf?

    Du behauptest, die Adresse sei en string*. Die Strafe folgt dann wohl auf dem Fuß...



  • aber wie soll ich dann den string auslesen?
    (kein readmemory)



  • Da ist kein String oder die DLL wurde nicht mit dem gleichen Compiler und den gleichen Compileschaltern übersetzt => geht nicht gibt’s.



  • Wie kommst du überhaupt darauf, an einer konkreten Adresse (0xB555A0) nach einem String zu suchen? Wie bist du auf diese Adresse gekommen?



  • weil ich weiss, dass sich dort einer befindet.

    als char* klappts natürlich. sprich so:

    char * titel= (char*)((char*)address);
    

    welche funktionen kann ich jetzt benutzen, damit ich die länge des char arrays bestimmen kann? bzw prüfen ob bestimmte zeichen wie z.b "$" / ganze Wörter/Sätze o.ä sich darin befinden?

    habe schon mal bisschen drüber nachgedacht, und zwar einfach mit nem forloop drüber zu gehen, aber finde das ziemlich unsauber..

    hat jemand funktionen im kopf die schon standartmäßig implementiert sind?
    Lg.



  • uholda schrieb:

    weil ich weiss, dass sich dort einer befindet.

    als char* klappts natürlich. sprich so:

    char * titel= (char*)((char*)address);
    

    Tataaah.



  • uholda schrieb:

    weil ich weiss, dass sich dort einer befindet.

    als char* klappts natürlich. sprich so:

    char * titel= (char*)((char*)address);
    

    ein char-Array (oder auch ein Zeiger auf char) ist auch etwas komplett anderes als ein std::string, bzw. ein Zeiger darauf.

    uholda schrieb:

    welche funktionen kann ich jetzt benutzen, damit ich die länge des char arrays bestimmen kann? bzw prüfen ob bestimmte zeichen wie z.b "$" / ganze Wörter/Sätze o.ä sich darin befinden?

    habe schon mal bisschen drüber nachgedacht, und zwar einfach mit nem forloop drüber zu gehen, aber finde das ziemlich unsauber..

    hat jemand funktionen im kopf die schon standartmäßig implementiert sind?
    Lg.

    Wenn es ein C-String ist, gibt es reichlich Funktionen. Sind in cstring deklariert.
    http://www.cplusplus.com/reference/cstring/



  • uholda schrieb:

    welche funktionen kann ich jetzt benutzen, damit ich die länge des char arrays bestimmen kann?

    uholda schrieb:

    ( der string ist genau 9 zeichen lang)

    💡


Log in to reply