|
You last visited: Today at 09:11
Advertisement
[ASM] ReadFile - String
Discussion on [ASM] ReadFile - String within the General Coding forum part of the Coders Den category.
12/14/2013, 19:07
|
#1
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
[ASM] ReadFile - String
Hallo,
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
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
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
|
|
|
12/14/2013, 19:40
|
#2
|
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
|
lies 2 Byte, schau ob der erste Byte 0xFF ist. Falls ja musst du den 2. gelesenen Byte auch noch einbeziehen. Sonst musst du den Pointer im File eine stelle zurück setzen.
|
|
|
12/14/2013, 19:43
|
#3
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
Hab es schon gelöst.
Nach deiner Aussagen wäre es ja so das 256 z.B 0xFF 0x01 wäre aber es wäre ja 0x00 0x01.
Es ist so das wenn in der Datei die länge ein WORD sein soll steht die normale länge mit dem Wert 0xFF da wodurch man einen Check machen kann und wenn es 0xFF ist soll er einfach ein WORD lesen.
Beispiel:
0xFF 0x02 0x01
1 Byte Lesen => 0xFF
Wenn der Wert 0xFF beträgt dann soll ein WORD gelesen werden.
2 Bytes Lesen => 0x02 0x01 -> 0x102 -> 258
|
|
|
12/14/2013, 19:57
|
#4
|
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
|
stimmt, da hast du Recht. Gut, dass du es selber gelöst hast^^
|
|
|
 |
Similar Threads
|
String Between | String regexp
06/07/2013 - AutoIt - 7 Replies
Huhu,
undzwar habe ich ein problem hiermit: <li class="lab">Benutzername:</li>
<li>Salmor</li>
ich will salmor auslesen, wenn ich allerdings sage:
$Benutzername = _StringBetween($sHTML, 'Benutzername:</li><li>', '</li>')
kommt es zu keiner Lösung, evtl kann mir jemand helfen.
|
[Visual Basic] [Problem] String auslesen/String zufällig wählen
05/06/2012 - General Coding - 4 Replies
Code:
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Name Generator", 236, 299, 815, 246)
$Input1 = GUICtrlCreateInput("Username", 24, 72, 185, 21)
$Input2 = GUICtrlCreateInput("Username", 24, 104, 185, 21)
$Input3 = GUICtrlCreateInput("Username", 24, 136, 185, 21)
$Input4 = GUICtrlCreateInput("Username", 24, 168, 185, 21)
$Input5 = GUICtrlCreateInput("Username", 24, 200, 185, 21)
|
[VB08]String in String mit mehreren Funden
08/08/2011 - .NET Languages - 6 Replies
Hey,
bin gerade auf ein Problem gestoßen, an dem ich mir seit 3 Stunden die Zähne ausbeiße.
Ich will eine Funktion schreiben, die der _StringBetween Funktion von AutoIt gleich ist. _StringBetween gibt in einem Array alle Strings zwischen zwei SubStrings und dem ganzen String aus. Die Ausgabe bei
_StringBetween("<h1>test1</h1>&l t;h1>test2</h1>", "<h1>", "</h1>") wäre also idealer Weiße ein Array (x = "test1", x = "test2")...
da man in VB08 kein Array returnen kann, komme ich aber einfach...
|
[C++] string zwischen string
11/11/2010 - C/C++ - 6 Replies
tag gibts direkt ne funktion, mit der man einen passenden string zwischen dem string suchen kann?
also meine net .find() sondern sowas ähnliches, die in diesem beispiel "mein string sucht"
Bsp:
"<span id=\"lalala\">"+string mein_string+"</span>"
understanden? :-)
|
All times are GMT +1. The time now is 09:11.
|
|