Was macht "__ftol2_sse"



  • Hi.
    Ich war eben dabei ein Windows-Programm etwas zu reversen bis ich auf diese Funktion gestoßen bin. Da IDA so nett war ihr einen Namen zu geben hab ich ihn gleich mal bei Google eingegeben und habe auf den ersten 3 Seiten nur Leute mit Linkerfehlern gefunden.

    Wäre über eine kurze Erläuterung oder einen Link froh 😉

    So weit ich es verstanden habe, hat es etwas mit dem Verhalten der FPU verschiedener CPUs zu tun...

    Ist es hier falsch? Dachte mir wenn es sich um eine CRT-Funktion handelt, dann sollte das schon irgendwie passen ;>



  • mal nur vom Namen:

    SSE = Streaming SIMD extensions,
    SIMD = Single Instruction Multiple Data
    ftol = float to long

    konvertiert wahrscheinlich zwei oder mehr floatwerte in longs.



  • Wofür die Frage, wenn du schon einen Debugger/Disassembler benutzt? 😉

    die Funktion konvertiert floats (real8 oder real10 würde auch gehen) zu einem integer (wie schon gesagt wurde) - Übergabe durch st(0) - Rückgabe über eax. Wenn SEE2 verfügbar ist, wird das mittels CVTTSD2SI bewerkstelligt.



  • PS: Nachkommastellen werden nicht gerundet, sondern abgeschnitten.



  • __asm{} schrieb:

    PS: Nachkommastellen werden nicht gerundet, sondern abgeschnitten.

    Damit könntest Du im Hessichen Kultusministerium arbeiten.
    Am Freitag recherchierte ich in den einschlägigen Verordnungen, wie die Gesamtnote des Hauptschulabschlusses berechnet wird. Und wird das Ergebnis dann auf- oder abgerundet? Und was müssen meine armen Augen lesen? Es wird das Ergebnis auf eine Stelle berechnet und nicht gerundet. Hä???



  • volkard schrieb:

    __asm{} schrieb:

    PS: Nachkommastellen werden nicht gerundet, sondern abgeschnitten.

    Damit könntest Du im Hessichen Kultusministerium arbeiten.
    Am Freitag recherchierte ich in den einschlägigen Verordnungen, wie die Gesamtnote des Hauptschulabschlusses berechnet wird. Und wird das Ergebnis dann auf- oder abgerundet? Und was müssen meine armen Augen lesen? Es wird das Ergebnis auf eine Stelle berechnet und nicht gerundet. Hä???

    Ist doch toll 😉
    1,9 und man hat ne Eins dastehen.

    Wofür die Frage, wenn du schon einen Debugger/Disassembler benutzt?

    Naja, bin noch relativ frisch im Reverse Engineering und wenn ich über eine Funktion stoplere die Argumente nicht über den Stack empfängt (Naja, mit fastcall komme ich klar 😉 ), garniert mit arithmetischen Compileroptimierungen, dann wirds unbequem für mich.



  • Icematix schrieb:

    Ist doch toll 😉
    1,9 und man hat ne Eins dastehen.

    Also wird abgerundet. Aber doch nicht nicht gerundet.



  • volkard schrieb:

    Also wird abgerundet. Aber doch nicht nicht gerundet.

    ... da hab ich mich wohl vom Mnemonic CVTTSD2SI, in dem das Wort "Truncated" steckt, zu dieser Behauptung verleiten lassen 😮


Log in to reply