PureBasic Forum
http://forums.purebasic.com/english/

*Pb assembly debugger..
http://forums.purebasic.com/english/viewtopic.php?f=35&t=69928
Page 1 of 1

Author:  CELTIC88 [ Wed Jan 10, 2018 10:58 pm ]
Post subject:  *Pb assembly debugger..

hi all

I am a beginner in assembly and I created a debugger for assembly in pb

correct me if I'm wrong!

*Update
Code:
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"))


Author:  Fred [ Thu Jan 11, 2018 9:17 am ]
Post subject:  Re: Pb assembly debugger..

You can also use the 'assembler' debug window in the debug IDE menu, when you are breaked, it should show all register content and flags

Author:  CELTIC88 [ Sun Jan 14, 2018 7:04 pm ]
Post subject:  Re: Pb assembly debugger..

thank you @Fred :)

Author:  CELTIC88 [ Tue Jan 16, 2018 5:38 pm ]
Post subject:  Re: *Pb assembly debugger..

update.

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/