ASM-Funktion debuggen (Win/x64)



  • Hallo,
    ich habe eine sehr rechenintensive Funktion meines Programms in Assembler mit SSE2 neu geschrieben. Wie sollte es auch anders sein, das Ergebnis der Funktion entspricht nicht dem was ich erwarte. Während ich Abstürze relativ einfach durch auskommentieren finden und dann beheben konnte, habe ich große Schwierigkeiten den (oder die) Rechenfehler zu finden.
    Ich benutze MS Visual C++ 2010 Pro. Als Assembler benutze ich YASM (Programm soll später auch auf *nix laufen). Im C Code kann ich Haltepunkte setzen, die Variablen überwachen etc., bei ASM bekomme ich das nicht richtig hin. Wie kann ich Assembler-Code Schritt für Schritt ausführen und dabei alle Register (rax bis r15 und xmm0 bis xmm15) überwachen? Wenn es nicht direkt im Programm geht, mir würde auch ein Simulator helfen, in den ich den Code reinkopiere und der den dann interpretiert mit meinen Startparametern.
    Vielen Dank
    Stefan



  • Du kannst eine breakpoint (= INT 3) auch manuell in den ASM Code einfügen. Die angezeigten Register kann man mit dem Kontextmenü im Reiter "Register" einstellen.



  • Habe INT 3 ausprobiert: Programm stürzt ab. Im Disassebly wird auch noch anderer Code angezeigt:

    000000013FAD14F4  pmovmskb    eax,xmm4  
    000000013FAD14F8  int         3  
    000000013FAD14FA  db          0fh  
    000000013FAD14FB  test        dword ptr [rcx],ebp  
    000000013FAD14FD  add         al,0  
    000000013FAD14FF  add         byte ptr [rcx-7Dh],cl  
    000000013FAD1502  db          eah  
    000000013FAD1503  or          byte ptr [rbp-3Bh],bh
    

    Alles was nach int 3 kommt habe ich nicht geschrieben, bei "test" stürzt er ab (Zugriffsverletzung). Der Code scheint auch nicht eingefügt zu sein, sondern hat den Code der dort vorher stand überschrieben. An den anderen Stellen mit "int 3" ist das nicht, schreibt int 3 den Code um wenn es aufgerufen wird?

    Wo ist das Kontextmenü "Register"? Ich kann bei "Überwachen" zwar die normalen Register überwachen, aber nicht die xmm ("xmm0 CXX0068: Fehler: Der Typ wird nicht unterstützt")

    Vielen Dank
    Stefan


Anmelden zum Antworten