Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 09:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[ASM] ReadFile - String

Discussion on [ASM] ReadFile - String within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
​Tension's Avatar
 
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. 1 Byte Lesen für die Länge des Strings
  2. Allozieren von Speicher für den String
  3. 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
​Tension is offline  
Old 12/14/2013, 19:40   #2

 
マルコ's Avatar
 
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.
マルコ is offline  
Old 12/14/2013, 19:43   #3
 
​Tension's Avatar
 
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
​Tension is offline  
Old 12/14/2013, 19:57   #4

 
マルコ's Avatar
 
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^^
マルコ is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.