stosb und lodsb

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

Moderatoren: crack, Krüsty, Marwin

Beitragvon DoerrSt » Dienstag 16. Dezember 2003, 21:30

Hallo,

ich habe da ein kleines Problem mit den Befehlen lodsb und stosb.

Folgendes kleines Programm endet unweigerlich bei dem Befehl stosb in einem Absturz. Dummerweise - auch nach dem durchsehen einiger Beispiele finde ich den Fehler nicht. Kann mir jemand sagen woran es liegt?

start:
mov esi, before
mov edi, after
l:
lodsb
stosb
cmp ax,0
jne l

ret

before:
db "Hallo",0
after:
db " ",0
DoerrSt
Newbie
 
Beiträge: 2
Registriert: Dienstag 16. Dezember 2003, 21:17

Beitragvon CDW » Dienstag 16. Dezember 2003, 21:43

wenn du die Sachen wirklich so stehn hast:

before:
db "Hallo",0
after:
db " ",0
dann wundert mich das nicht ;) denn du versuchst damit im Codesector zu schreiben, was standardmäßig nicht geht... dafür muss man irgendein Flag beim compilieren angeben... bei masm32 ist in den Examples irgendwo so ein beispiel dabei (wo man in den Codesektor schreibt, heißt irgendwas mit morphing)...

damit das funktioniert solltest du es so deklariieren:

.data
before db "hallo",0
after db (speicher_soviel_du_brauchst) dup 0
.code
//hier kommt der Code

oder eben schauen wie man den Schreibzugriff im Codesektor aktiviert :)
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon DoerrSt » Dienstag 16. Dezember 2003, 21:50

Danke - ich wollte den Codesektor verändern das ist richtig (und gewollt ;) )

Ich werde mir das Beispiel mal ansehen (habs auf den ersten Blick nicht gefunden).

Habe früher unter DOS mal etwas Assembler programmiert, aber ich glaube das Problem hatte ich dort nicht.
DoerrSt
Newbie
 
Beiträge: 2
Registriert: Dienstag 16. Dezember 2003, 21:17

Beitragvon Marwin » Mittwoch 17. Dezember 2003, 15:55

Hi DoerrSt und CDW,

..., aber ich glaube das Problem hatte ich dort nicht.

:P Davon bin ich überzeugt DoerrSt, unter DOS gibt es solche Einschränkungen nicht.

Das angesprochene Beispiel findest du unter /masm32/example2/smc/.

Der Quelltext besagt, dass man beim Linken die Option /section:.text,RWE verwenden soll, demnach darf der .code-Abschnitt dann ausgelesen, beschrieben und ausgeführt werden.


:P Marwin
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland


Zurück zu Assembler

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]

cron