Hallo,
ich habe ein Problem mit dem Auslesen eines Strings von einer Datei ( MASM ).
Meine Vorgehensweise:
es sieht bei mir so aus:
mein Problem ist nun das die maximale Länge 0xFF beträgt. Nun gibt es aber auch Strings die sind 0x102 Bytes lang und ab da funktioniert mein Programm nicht mehr richtig. Hätte jemand eine Idee wie ich bestimmen kann ob er nun ein Byte als länge oder ein Word als länge lesen soll?
#Gelöst.
Lösung:
Anscheinend ist die länge der Strings nie 0xFF lang, das heißt ich kann einfach überprüfen ob die Länge 0xFF ist und wenn ja soll er ein WORD lesen anstatt ein Byte als Länge
ich habe ein Problem mit dem Auslesen eines Strings von einer Datei ( MASM ).
Meine Vorgehensweise:
- 1 Byte Lesen für die Länge des Strings
- Allozieren von Speicher für den String
- Auslesen des Strings mit ReadFile
es sieht bei mir so aus:
Code:
LOCAL dwRead:DWORD, dwAddr:DWORD, dwSize:DWORD, dwK:DWORD mov dwRead, 0 mov dwAddr, 0 mov dwSize, 0 pushad invoke FILE_Read, 1 // 1 Byte lesen für die Länge des Strings mov dwK, eax mov esi, dword ptr ds:[eax] mov dwSize, esi // Länge verstauen invoke FILE_Alloc, esi //Allozieren von Speicher mov dwAddr, eax // Adresse verstauen invoke ReadFile, FILE_Handle, dwAddr, dwSize, addr dwRead, 0 // lesen des Textes invoke FILE_Free, dwK popad mov eax, dwAddr ret
#Gelöst.
Lösung:
Anscheinend ist die länge der Strings nie 0xFF lang, das heißt ich kann einfach überprüfen ob die Länge 0xFF ist und wenn ja soll er ein WORD lesen anstatt ein Byte als Länge
Code:
LOCAL dwRead:DWORD, dwAddr:DWORD, dwSize:DWORD, dwK:DWORD mov dwRead, 0 mov dwAddr, 0 mov dwSize, 0 pushad invoke FILE_Read, dwReadSize mov dwK, eax mov esi, dword ptr ds:[eax] cmp esi, 255 jne @NotBigger invoke FILE_Free, dwK invoke FILE_Read, 2 mov esi, dword ptr ds:[eax] @NotBigger: mov dwSize, esi invoke FILE_Alloc, esi mov dwAddr, eax invoke ReadFile, FILE_Handle, dwAddr, dwSize, addr dwRead, 0 invoke FILE_Free, dwK popad mov eax, dwAddr ret