ASM-Noob braucht Hilfe: Win32String CharFürChar ausgeben...

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Marwin, Krüsty

Antworten
iF
Newbie
Beiträge: 2
Registriert: Mittwoch 24. August 2005, 15:44
Wohnort: Berlin
Kontaktdaten:

ASM-Noob braucht Hilfe: Win32String CharFürChar ausgeben...

Beitrag von iF » Mittwoch 24. August 2005, 16:07

Ich bin in ASM nicht sehr firm - und habe oft mit den einfachsten Dingen so meine Probleme.

Ich übergebe an eine in ASM geschriebene DLLFunktion eine Speicherbereichsadresse - funzt auch super - ich lasse einfach mittels API den String im Speicher anzeigen.

Nur wie kann ich innerhalb einer Schleife Char für Char (Byte für Byte) aus dem Speicher erhalten.

Könnte jemand die Proc mit einem einfachen Handgriff derart umprogrammieren das invoke TextOut nicht den String im Speicher - sondern Char für Char auf den Bildschirm schreibt?

Eigendlich will ich nur wissen wie ich den Wert eines einzelnen Bytes eines Speichers bekomme.

Code: Alles auswählen

proc __dispSrcMem //xprofansource

	AsmStart disp //xprofansource
	parameters %hdc,sfnt&,mem#,1 //xprofansource
	
	.data
	
	;data	db	"Hallo",0
	
	.code
	
	data dd 333,444,555,666 ;Hier 4 Longint's
	
	mov edx,para3	
	mov ebx,para4	
	
	mov eax,0	
	
	.while eax<ebx
	
		push eax
		push ebx
		
		mov eax,data ; falsch
		lea edx,data ; falsch
		mov eax,[edx+1] ;falsch
				
		invoke TextOut,para1,0,0,eax,1 ;funzt deshalb net :(
		
		pop ebx
		pop eax
	
		inc eax		
	
	.endw
	
	invoke TextOut,para1,10,50,para3,para4 ; klappt - aber in der schleife soll's ja klappen :)
	
	AsmEnd //xprofansource

endproc //xprofansource
Vielen Dank!
Salve, iF.

Benutzeravatar
crack
Administrator
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf
Kontaktdaten:

Beitrag von crack » Donnerstag 25. August 2005, 15:31

du könntest DS:ESI mit dem Segmen:Offset des auszulesenden Speicherbereiches laden und mit LODSB dann Byte für Byte auslesen...
in 'Kauderwelsch' sähe das ungefähr so aus:

....
mov esi, offset 'Bereich'
mov ecx,'länge des Bereichs'
X1: lodsb
invoke 'anzeigeroutine'
loop X1
....


so oder ähnlich könnte das funktionieren...
mit freundlichen grüssen,
with best regards,

crack

iF
Newbie
Beiträge: 2
Registriert: Mittwoch 24. August 2005, 15:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von iF » Donnerstag 25. August 2005, 15:47

Ich habe mir damit beholfen:

Code: Alles auswählen

mov al,[edx+eax]
mov [edx],al
:roll:
Salve, iF.

Benutzeravatar
crack
Administrator
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf
Kontaktdaten:

Beitrag von crack » Donnerstag 25. August 2005, 15:58

egal wie oder womit, hauptsache: Ziel erreicht :wink:
mit freundlichen grüssen,
with best regards,

crack

Antworten