(ASM-LIB) CheckFunction (V1.02)
Verfasst: 26.04.2005 02:46
Und gleich noch eine
Die LIB besteht aus 3 Befehlen (StartCheck(),StopCheck() und ProcessCheck())
Die Procs überprüfen ob die Register zwischen StartCheck() und StopCheck() verändert wurden, dürfte also nur für LIB-Progger oder leute die ASM-Code benutzen interessant sein.
Eigentlich wollte ich mit dieser Lib zuerst nur eine Procedure überprüfen indem ich deren pointer übergebe. (CheckFunction(@Proc(),arg1,arg2,...))
Da aber @Procedure() zwar vom Syntax her vom Compiler akzeptiert wird, aber nicht das macht was es soll (nämlich den pointer zurück geben) funktionierte die ganze Sache nicht. (Ist kein Bug, hab Fred schon gefragt
)
Also kam ich paar Minuten später auf die Idee es mit den 3 Procs zu machen (Eigentlich braucht man nur StartCheck() und StopCheck(), aber ProcessCheck() vereinfacht das auswerten)
Download: http://www.deeem2031.de/CheckFunction.zip
Procs:
StartCheck()
*Result = StopCheck()
Result = ProcessCheck(flags.l)
Beispiel:
Wenn von ProcessCheck() 0 zurückgegeben wird heißt es das keiner der angegebenen Register sich verändert hat, andernfalls ist es die Anzahl der Register die sich geändert haben.
Soll heißen wenn ProcessCheck() Null zurückgibt ist alles ok
Was man mit dem Rückgabewert von StopCheck() anfängt kann man dem Beispiel entnehmen. Die Werte sind die Differenzen zwischen Aufruf von StartCheck() und StopCheck(). Wobei Eax, Ecx und Edx sogut wie keine Rolle spielen.
Ansonsten ist nurnoch zu sagen das man StartCheck() und StopCheck() nicht als Parameter einer Procedure angeben darf, da die Werte dadurch verfälscht werden.
Die LIB besteht aus 3 Befehlen (StartCheck(),StopCheck() und ProcessCheck())
Die Procs überprüfen ob die Register zwischen StartCheck() und StopCheck() verändert wurden, dürfte also nur für LIB-Progger oder leute die ASM-Code benutzen interessant sein.
Eigentlich wollte ich mit dieser Lib zuerst nur eine Procedure überprüfen indem ich deren pointer übergebe. (CheckFunction(@Proc(),arg1,arg2,...))
Da aber @Procedure() zwar vom Syntax her vom Compiler akzeptiert wird, aber nicht das macht was es soll (nämlich den pointer zurück geben) funktionierte die ganze Sache nicht. (Ist kein Bug, hab Fred schon gefragt
Also kam ich paar Minuten später auf die Idee es mit den 3 Procs zu machen (Eigentlich braucht man nur StartCheck() und StopCheck(), aber ProcessCheck() vereinfacht das auswerten)
Download: http://www.deeem2031.de/CheckFunction.zip
Procs:
StartCheck()
*Result = StopCheck()
Result = ProcessCheck(flags.l)
Beispiel:
Code: Alles auswählen
DisableDebugger
ResetCPURegister()
ResetCPUFlags()
StartCheck()
InitNetwork()
*Result.CheckResult = StopCheck()
If ProcessCheck(#CheckFunction_Important) = 0
icon = 0 ; :)
Else
icon = 16 ; :(
EndIf
output.s = "---Register---"+#CRLF$
output + "Esp: "+Str(*Result\Esp)+#CRLF$
output + "Eax: "+Str(*Result\Eax)+#CRLF$
output + "Ebx: "+Str(*Result\Ebx)+#CRLF$
output + "Ecx: "+Str(*Result\Ecx)+#CRLF$
output + "Edx: "+Str(*Result\Edx)+#CRLF$
output + "Esi: "+Str(*Result\Esi)+#CRLF$
output + "Edi: "+Str(*Result\Edi)+#CRLF$
output + "Ebp: "+Str(*Result\Ebp)+#CRLF$
output + #CRLF$
output + "---Flags---"+#CRLF$
output + "CF: "+Str(*Result\flags&#CheckFunction_Flag_CarryFlag)+#CRLF$
output + "PF: "+Str(*Result\flags&#CheckFunction_Flag_ParityFlag)+#CRLF$
output + "AF: "+Str(*Result\flags&#CheckFunction_Flag_AuxiliaryFlag)+#CRLF$
output + "ZF: "+Str(*Result\flags&#CheckFunction_Flag_ZeroFlag)+#CRLF$
output + "SF: "+Str(*Result\flags&#CheckFunction_Flag_SignFlag)+#CRLF$
output + "TF: "+Str(*Result\flags&#CheckFunction_Flag_Trapflag)+#CRLF$
output + "IF: "+Str(*Result\flags&#CheckFunction_Flag_InterruptFlag)+#CRLF$
output + "DF: "+Str(*Result\flags&#CheckFunction_Flag_DirectionFlag)+#CRLF$
output + "OF: "+Str(*Result\flags&#CheckFunction_Flag_OverflowFlag)+#CRLF$
output + "IOPL: "+Str(*Result\flags&#CheckFunction_Flag_IOPrivilegeLevel)+#CRLF$
output + "NT: "+Str(*Result\flags&#CheckFunction_Flag_NestedTaskFlag)+#CRLF$
output + "RF: "+Str(*Result\flags&#CheckFunction_Flag_ResumeFlag)+#CRLF$
output + "VM: "+Str(*Result\flags&#CheckFunction_Flag_VirtualModeFlag)+#CRLF$
MessageRequester("Change",output,icon)Soll heißen wenn ProcessCheck() Null zurückgibt ist alles ok
Was man mit dem Rückgabewert von StopCheck() anfängt kann man dem Beispiel entnehmen. Die Werte sind die Differenzen zwischen Aufruf von StartCheck() und StopCheck(). Wobei Eax, Ecx und Edx sogut wie keine Rolle spielen.
Ansonsten ist nurnoch zu sagen das man StartCheck() und StopCheck() nicht als Parameter einer Procedure angeben darf, da die Werte dadurch verfälscht werden.
oder eine Geschmacksfrage