Gezielter Programmabsturz durch falsche Konvertierung



  • Guten Tag,
    ich versuche derzeit einen Programmabsturz herbei zu führen durch eine falsche Datentypkonvertierung.

    Jeder user hat ein fest zugeschriebenen namen, welchen ich als hash ausgeben lassen kann. Nehmen wir mal an ich habe folgenden hash: 2192827378.
    Nun möchte ich diesen hash einem Integer zuweisen und gleichzeitig noch durch eine voher festgelegte Zahl dividieren. In diesem Falle die Zahl 2 oder 7 oder 14.
    Ist diese division ein integer ist der user authorisiert und das Programm soll weiter laufen, ist jedoch das ergebnis ein float möchte ich, dass es abstürtzt.
    Das sieht dann bei mir wie folgt aus:
    int SecureTag = (GET_HASH_KEY(GET_PLAYER_NAME()) / 2);

    Das heißt wenn bei dir Division mit 2 ein float wird(somit liegt eine unauthorisierte Anmeldung vor), dann möchte ich dass durch diese Speicherung von float auf int das Programm abstürtzt.

    Auf wikipedia habe ich bei dem Artikel "Typ Konvertierung" gelesen, dass man durch 2.0 teilen muss anstatt durch 2, jedoch stürtzt das Programm weder durch 2 noch durch 2.0 ab.

    Ich würde mich sehr über eine Antwort freuen,
    lg xStormsnoutx.


  • Mod

    Wieso sollte da irgendetwas abstürzen?

    Wenn du durch 2 teilst, dann machst du eine Integerdivision und das Ergebnis ist stets wohldefiniert. Teilst du durch 2.0 ist das eine Fließkommadivision und das Ergebnis ist stets wohl definiert. Selbst wenn das irgendwie nicht der Fall wäre, ist mir der ganze Gedankengang rätselhaft, was du dir hier als Grund für einen Absturz erhoffst.



  • SeppJ schrieb:

    Wieso sollte da irgendetwas abstürzen?

    Wenn du durch 2 teilst, dann machst du eine Integerdivision und das Ergebnis ist stets wohldefiniert. Teilst du durch 2.0 ist das eine Fließkommadivision und das Ergebnis ist stets wohl definiert. Selbst wenn das irgendwie nicht der Fall wäre, ist mir der ganze Gedankengang rätselhaft, was du dir hier als Grund für einen Absturz erhoffst.

    Tut mir leid, habe es falsch beschrieben.
    Also wenn ich durch 2 teile und dabei ein integer rauskommt, soll das programm weiterlaufen und die anmeldung ist authorisiert. Wenn jedoch das ergebnis ein float ist(ein anderer user mit nem anderen hash meldet sich an), dann soll das programm abstürzen.



  • Teste vor der Division, ob die Zahlen überhaupt durcheinander teilbar sind. Wenn nicht, dann lass das Programm abstürzen (was auch immer das heissen soll).



  • Es würde ein "float", wenn die Ganzzahldivision einen Rest ungeleich 0 hat.
    Für den Rest einer Ganzzahldivision gibt es einen eigenen Operator.

    Für einen Programmabsturz gibt es aber nichts im Standard.


  • Mod

    if(eine_zahl%teiler) absturz();
    


  • DirkB schrieb:

    Für einen Programmabsturz gibt es aber nichts im Standard.

    was sagt der standard zu division durch 0?
    vermutlich nix. 😞



  • divbyzero schrieb:

    DirkB schrieb:

    Für einen Programmabsturz gibt es aber nichts im Standard.

    was sagt der standard zu division durch 0?
    vermutlich nix. 😞

    Schaun wir mal. Links zum Standard findet man im zweiten festen Thread hier im Unterforum.
    Linkliste für Neulinge https://www.c-plusplus.net/forum/300567 (ist sogar als wichtig markiert)

    C Standard schrieb:

    6.5.5 Multiplicative operators

    5 The result of the / operator is the quotient from the division of the first operand by the
    second; the result of the % operator is the remainder. In both operations, if the value of
    the second operand is zero, the behavior is undefined.

    UB kann zum Absturz führen, muss es aber nicht.



  • Um das Programm gezielt abstürzen zu lassen, kannst du abort() aus stdlib.h verwenden.


  • Mod

    Biolunar schrieb:

    Um das Programm gezielt abstürzen zu lassen, kannst du abort() aus stdlib.h verwenden.

    Das hier. Wenn man so etwas wie

    1/0;
    

    als "Absturzanweisung" ins Programm schreibt, wird der Compiler dies höchstwahrscheinlich einfach entfernen, da undefiniertes Verhalten. Ebenso gezielte Nullpointerdereferenzierungen und so weiter. Ich vermute aber mal, dass der Threadersteller sich einfach nur ungeschickt ausdrückt, wenn er das Wort "Absturz" benutzt.



  • SeppJ schrieb:

    1/0;
    

    als "Absturzanweisung" ins Programm schreibt, wird der Compiler dies höchstwahrscheinlich einfach entfernen, da undefiniertes Verhalten.

    einen compiler der sowas macht, würde ich auch einfach entfernen.


Log in to reply