OnError Lib liefert nicht Orginal ASM Code zurück !
Verfasst: 31.10.2004 18:17
Hallo !
Ich arbeite grade aus Fun an einem Programm, das einen Prozessor (irgendwann voll) emulieren soll. Bis jetzt hab ich auch so viel zustande gebracht, dass es eine Binärdatei läd und dessen Code (mit hilfe der OnError Lib) aus gibt. Der Emulator sieht so aus:
und das Beispiel programm wurde in ASM geschrieben:
Compilert wurde das Beispiel Programm mit FASM 1.56.
Nur hab ich jetzt das Problem, dass [c]GetDisASMString()[/c] überhaupt nicht das zurück gibt, was wirklich im ASM Code steht. Kann mir jemand sagen warum das so ist ?.
Hier ist nochmal der Output in der Konsole:
das was unten steht ist das Programm in HexCode.
Ich arbeite grade aus Fun an einem Programm, das einen Prozessor (irgendwann voll) emulieren soll. Bis jetzt hab ich auch so viel zustande gebracht, dass es eine Binärdatei läd und dessen Code (mit hilfe der OnError Lib) aus gibt. Der Emulator sieht so aus:
Code: Alles auswählen
Enumeration
#filBinary
EndEnumeration
Global Datei.s
Global *APPBuffer.l
Global *MEMBuffer.l
Global Signatur.s
Global NeedMemory.l
Global StartCode.l
Global EndCode.l
Global Pointer.l
Global Position.l
Datei = OpenFileRequester("Binary", "", "*.bin (Binary)|*.bin", 0)
If Datei <> "" And OpenConsole() <> 0
OpenFile(#filBinary, Datei)
*APPBuffer = AllocateMemory(Lof() + 1)
ReadData(*APPBuffer, Lof())
Signatur = PeekS(*APPBuffer, 7)
NeedMemory = PeekL(*APPBuffer + 7)
StartCode = PeekL(*APPBuffer + 11)
EndCode = PeekL(*APPBuffer + 15)
*MEMBuffer = AllocateMemory(NeedMemory)
Debug "Signatur " + Signatur
Debug "Memory " + Str(NeedMemory)
Debug "StartCode " + Hex(StartCode)
Debug "EndCode " + Hex(EndCode)
Pointer = *APPBuffer + StartCode
Repeat
Position = Pointer
Pointer = DisASMCommand(Pointer)
PrintN(Hex(Position)+" - " + GetDisASMString())
Until Pointer => *APPBuffer+EndCode
For I.l = 1 To Lof()
Print("[" + Hex(Asc(PeekS(*APPBuffer+I,1))) + "]")
Next
PrintN("")
CloseFile(#filBinary)
Input()
EndIfCode: Alles auswählen
dd 50000 ; benötigter Speicher
dd START_CODE ; Start des Codes
dd END_CODE ; Ende des Codes
START_CODE:
mov eax, 1
mov ebx, START_CODE
mov ebx, END_CODE
mov ecx, 0
END_CODE:
Text:
DB "Hallo !",0 Nur hab ich jetzt das Problem, dass [c]GetDisASMString()[/c] überhaupt nicht das zurück gibt, was wirklich im ASM Code steht. Kann mir jemand sagen warum das so ist ?.
Hier ist nochmal der Output in der Konsole:
Code: Alles auswählen
891EA3 - db 66h♪◙MOV ax,0001
891EA7 - ADD [eax],al
891EA9 - db 66h♪◙MOV bx,0013
891EAD - ADD [eax],al
891EAF - db 66h♪◙MOV bx,002B
891EB3 - ADD [eax],al
891EB5 - db 66h♪◙MOV cx,0000
891EB9 - ADD [eax],al
[42][49][54][53][49][47][50][C3][0][0][13][0][0][0][2B][0][0][0][66][B8][1][0][0
][0][66][BB][13][0][0][0][66][BB][2B][0][0][0][66][B9][0][0][0][0][48][61][6C][6
C][6F][20][21][0][0]