fb:porticula NoPaste
einfacher Maschinencodebetracher
Uploader: | theta |
Datum/Zeit: | 20.02.2012 11:28:13 |
'einfacher Maschinencodebetracher (FB 0.23)
'Der zu untersuchende Code wird in die Sub theCode eingetragen. Bei der Ausführung wird der Maschinencode, der
'in zwischen beiden Labels steht in hexadezimaler Form ausgegeben. Der betrachtete Maschinencode wird aber nicht ausgeführt.
'Funktionsweise:
'Ein Pointer(der Ubyte ptr code) zeigt auf das Offset eines Labels (hier:start), also der tatsächlichen Adresse im Speicher.
'Die Länge des ausführbaren Codes ermittelt sich als die Differenz zwischen Startadresse (start) und Endadresse (ende).
'Der Pointer wird wie ein dynamisch reservierter Speicherbereich behandelt und in Byteschritten durchgegangen und ausgegeben.
#Include "crt/stdio.bi"
Sub printHEX(p As UByte ptr,length As UInteger)
For i As Integer=0 To length-1
printf(Hex(p[i]))
printf(" ")
Next
End Sub
Sub theCode()
Asm start:
'hier den Code eintragen.
'z.B: print "Hallo Welt !"
'oder asm mov eax,42
Asm ende:
End Sub
Dim As UByte Ptr code
Dim As Integer length
Asm
mov dword Ptr [code],Offset start
mov dword Ptr [length],offset ende
Sub dword Ptr [length],offset start
End Asm
printHEX(code,length)
#If Defined(__FB_WIN32__) 'nur eine Schönheitskorrektur
GetKey
#EndIf