PureBasic

Forums PureBasic
Nous sommes le Lun 24/Sep/2018 12:34

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: Asm debugger *version finale
MessagePosté: Mer 10/Jan/2018 19:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
:D hi les natives loll

Alors j ai pas trouver un code qui fait ça !!

debugger les registres :

*mise à jour ajouter le debug de drapeaux !
*correction "flag IOPL 2BIT" merci a @mesa
*version finale

Code:
EnableExplicit

EnableExplicit

CompilerIf #PB_Compiler_Debugger = 1 
  Procedure _Dasm_Debug(__asmDebug, Type,Size)
    Select Type
      Case 1
        Debug __asmDebug
      Case 2
        Debug PeekA(@__asmDebug)
      Case 3
        Debug PeekU(@__asmDebug)
      Case 4
        Debug PeekS(__asmDebug)
      Case 5
        Debug PeekS(__asmDebug,-1,#PB_Ascii)
      Case 6
        ShowMemoryViewer(__asmDebug,Size)
      Case 7
        Protected Flags.s = RSet(Bin(__asmDebug,#PB_Long), 32, "0")
        Protected AllFlags.s = ";;;;;;;;;;ID;VIP;VIF;AC;VM;RF;;NT;IOPL_h;IOPL_l;OF;DF;IF;TF;SF;ZF;;AF;;PF;;CF"
        Protected s,sf.s,rets.s
        For s = 1 To 32
          If Mid(Flags,s,1) = "1"
            sf = StringField(AllFlags,s,";")
            If sf
              rets = "[" + sf + "]"  + " " + rets
            EndIf
          EndIf
        Next
        Debug "Flags : " + rets
      Case 8
       
        EnableASM
        SUB eax, eax
        MOV eax, CS
        MOV dword [p.v___asmDebug] , eax
        Debug "[CS = " + Hex(__asmDebug) + "]"
        MOV eax, DS
        MOV dword [p.v___asmDebug] , eax
        Debug "[DS = " + Hex(__asmDebug) + "]"
        MOV eax, SS
        MOV dword [p.v___asmDebug] , eax
        Debug "[SS = " + Hex(__asmDebug) + "]"
        MOV eax, ES
        MOV dword [p.v___asmDebug] , eax
        Debug "[ES = " + Hex(__asmDebug) + "]"
        MOV eax, FS
        MOV dword [p.v___asmDebug] , eax
        Debug "[FS = " + Hex(__asmDebug) + "]"
        MOV eax, GS
        MOV dword [p.v___asmDebug] , eax
        Debug "[GS = " + Hex(__asmDebug) + "]"
        DisableASM
       
      Case 9
        Debug "Point code : "  + Str(__asmDebug)
    EndSelect
  EndProcedure
 
  Global __Dasm_Debug = @_Dasm_Debug()
CompilerEndIf

Macro Dasm_Save_SFPU_MXCSR_SSE
  PUSH    ebp
  MOV     ebp,esp
  SUB     esp,512
  AND     esp,-16
  !fxsave  [esp] ;saves the current state of the FPU, MXCSR register, and all the FPU AND SSE registers
EndMacro

Macro Dasm_Reload_SFPU_MXCSR_SSE
  !fxrstor [esp]
  MOV     esp,ebp
  POP     ebp
EndMacro

Macro Dasm_Debug(reg,Type,Size=0)
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSHFD
    PUSHA
    MOV eax, reg
    PUSH dword Size
    PUSH dword Type
    PUSH eax
    CALL [v___Dasm_Debug]
    POPA
    POPFD
  CompilerEndIf
EndMacro

Macro Dasm_ShowAssembly()
  CompilerIf #PB_Compiler_Debugger = 1
    PUSHFD
    PUSHA
    EnableDebugger
    ShowAssemblyViewer()
    DisableDebugger
    POPA
    POPFD
  CompilerEndIf
EndMacro   ;call ShowAssembly

Macro Dasm_Pause()
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSHFD
    PUSHA
    EnableDebugger
    CallDebugger
    DisableDebugger
    POPA
    POPFD
  CompilerEndIf
EndMacro  ;CallDebugger

Macro Dasm_Flags()
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSHFD
    PUSHA
    MOV eax,[esp + 4*8]
    PUSH dword 0
    PUSH dword 7
    PUSH eax
    CALL [v___Dasm_Debug]
    POPA
    POPFD
  CompilerEndIf
EndMacro

Macro Dasm_ShowText(Txt)
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSHFD
    PUSHA
    EnableDebugger
    Debug Txt
    DisableDebugger
    POPA
    POPFD
  CompilerEndIf
EndMacro

Macro Dasm_SegmentRegisters()
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSHA
    PUSH dword 0
    PUSH dword 8
    PUSH dword 0
    CALL [v___Dasm_Debug]
    POPA
  CompilerEndIf
EndMacro

Macro Dasm_NextInstructionPointer() ;EIP
  CompilerIf #PB_Compiler_Debugger = 1 
    PUSH eax
    MOV eax , @f
   
    PUSHA
    PUSH dword 0
    PUSH dword 9
    PUSH eax
    CALL [v___Dasm_Debug]
    POPA
   
    POP eax
    !@@:
  CompilerEndIf
EndMacro

Macro Dasm_Byte(reg):Dasm_Debug(reg,2):EndMacro    ;debug byte
Macro Dasm_Word(reg):Dasm_Debug(reg,3):EndMacro    ;debug word
Macro Dasm_long(reg):Dasm_Debug(reg,1):EndMacro    ;debug long
Macro Dasm_StringU(reg):Dasm_Debug(reg,4):EndMacro ;debug string unicode
Macro Dasm_StringA(reg):Dasm_Debug(reg,5):EndMacro ;debug ascii
Macro Dasm_ShowMemory(reg,Size):Dasm_Debug(reg,6,Size):EndMacro   ;call ShowMemory


Procedure __test(par) 
  EnableASM
  DisableDebugger ;Très important
 
  Dasm_ShowText("Asm code debugging started.")
 
  Dasm_ShowText("Asm Segment Registers:")
  Dasm_SegmentRegisters()
 
  MOV ecx, esp
 
  MOV eax ,[ecx + 4]
 
  PUSH eax
  XOR eax,eax
 
  ADD eax,2147483647
 
  Dasm_ShowText("Asm Next Instruction Pointer:")
  Dasm_NextInstructionPointer()
  ADD eax,1
 
  Dasm_ShowText("Asm Show Flags:")
  Dasm_Flags() ;overflow!
 
  Dasm_ShowAssembly()
  Dasm_ShowText(">> (Asm Pause) <<")
  Dasm_Pause()
 
  Dasm_ShowText("Asm Show EAX:")
  Dasm_long(eax)
 
  POP eax
  Dasm_ShowText("Asm Show 'STRING ASCII' EAX:")
  Dasm_StringA(eax) 
 
  Dasm_ShowText("Asm Dump Stack.")
  Dasm_ShowMemory(ecx,16)
 
  DisableASM
  EnableDebugger
EndProcedure

__test(Ascii("celtic"))



corrigez moi si je trompe !

_________________
.....i Love Pb :)


Dernière édition par celtic88 le Mar 16/Jan/2018 17:25, édité 9 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres
MessagePosté: Mer 10/Jan/2018 19:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
uPDATE :)

_________________
.....i Love Pb :)


Dernière édition par celtic88 le Dim 14/Jan/2018 19:06, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Mer 10/Jan/2018 22:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
re-up

_________________
.....i Love Pb :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Jeu 11/Jan/2018 12:22 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 872
Voir ici:
viewtopic.php?f=12&t=16341&start=9
http://www.purebasic.fr/english/viewtop ... 13&t=37083

M.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Jeu 11/Jan/2018 19:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
@mesa ,bonjour

merci pour les liens :roll: , donc mon code est correcte 8)

_________________
.....i Love Pb :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Ven 12/Jan/2018 10:14 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 872
Attention, IOPL prend 2 bits.

M.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Ven 12/Jan/2018 10:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
@mesa merci pour la correction :)

RFLAGS
Bits 63..32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13..12 11 10 9 8 7 6 5 4 3 2 1 0
Drapeaux - - - - - - - - - - - ID VIP VIF AC VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF


https://fr.wikipedia.org/wiki/RFLAGS

_________________
.....i Love Pb :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: utiliser le debugger purebasic avec les registres et fla
MessagePosté: Dim 14/Jan/2018 23:59 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 534
Bonjour celtic88

Voici un prg http://www.purebasic.fr/french/viewtopic.php?f=6&t=16432&p=188999#p188999
ou http://www.purebasic.fr/french/viewtopic.php?f=6&t=16432&start=0 avec une procédure Livide en ASM
Ce prg sert à mesurer le temps de 3 procédures différentes.

La procédure Livide(X,L) appartient à Ollivier.

Et Ollivier me demande pourquoi j’ai modifié sa procédure avec nop

Citation:
Bonjour PAPIPP,

Merci d'avoir testé et comparé. Je n'ai pas compris pourquoi l'ajout d'un NOP dans ma procédure pour mesurer?


Voici ma réponse

Citation:
Bonjour Ollivier

Le nop dans ta procédure m'a servi pour me permettre un arrêt avant l'instruction Lzcnt précédée de !
Or sur les instructions ASM précédés de ! on ne peut avoir d'arrêt.
L'instruction asm lzcnt n'est pas reconnue par PB on ne peut donc pas avoir d'arrêt dessus et pour l'exécuter directement en ASM il faut !
J'ai oublié de la retirer pour la mesure des temps.

J'ai mesuré à nouveau sans le nop et les résultats sont identiques. je pense que nop ne prend aucun cycle machine.


Citation:
@ Ollivier

Pourquoi un arrêt ? Mais tout simplement pour suivre pas à pas l’évolution du prg sous debug.
Or il est impossible de suivre l’évolution d’un prg asm avec l’option !.
Par contre avec enableasm sans ! on peut défiler pas à pas le prg ASM sous l'option compiler avec le Débogueur.

Reprenons le pb d’arrêt sur dec ebx.



En fait lorsque l’on désire déboguer un prg ASM il ne faut pas d’instruction avec ! devant

On retire toutes les instructions avec ! et on encadre la portion que l’on désire déboguer avec
EnableASM
....
....
Disableasm



Ensuite F9 sur l’instruction ASM ou l’on désire s’arrêter lancer l’exécution avec debug
et sur l’arrêt de l’instruction ASM dans l’option debogueur de IDE de PB
on peut voir les registres avec l’option desassembleur.
et ensuite F8 pour faire du pas à pas comme en PB.

A+

_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Asm debugger *version finale
MessagePosté: Mar 16/Jan/2018 17:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 309
Localisation: Alger
merci @PAPIPP


le code est destiné à les débutantes comme moi pour les aider à comprendre l asm.

_________________
.....i Love Pb :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye