sheel
I love Asm
Das soll ja so sein, also alles in Ordnung.Hab mal probeweiser den Wert des Puffers auf 512 erhöht.
Nun ist die Ausgabe bis HALLO123456789ABCD immer zuerst der Parameter, dann 5 7, wert = 1.
Zur Rechnerleistung: Hat damit weniger zu tun.
Hängt davon ab, wie Compiler/Betriebssystem die Speicherverwendung einteilen.
Überschreiben:
Vereinfacht angenommen, es gibt den String mit 5 Zeichen und zwei int a und b.
char braucht 1 Byte, int 4
Im RAM könnten die dann zB. so eingeteilt sein:
Code:
01234567890123456
__xxxxx__________ string
________xxxx_____ int a
____________xxxx_ int b
Wenn man dann zB. 3 Zeichen in den String schreibt:
Code:
01234567890123456
__xxxxx__________ string
________xxxx_____ int a
____________xxxx_ int b
00asd000000000000 Inhalt
Man schreibt a=1001 und b=4
Code:
01234567890123456
__xxxxx__________ string
________xxxx_____ int a
____________xxxx_ int b
00asd000100100040 Inhalt
Jetzt komt ein überlanger String HALLO12345678:
Code:
01234567890123456
__xxxxx__________ string
________xxxx_____ int a
____________xxxx_ int b
00HALLO1234567840 Inhalt
a ist jetzt 2345 und b 6784
Alles durcheinander
Im Speicher liegts zwar Binär, also 1001 im Code ist nicht direkt 1001 im Speicher,
aber das ist hier im Prinzip egal.
Und die Speicherbytes beinhalten ja nicht nur Variablen, sondern stellenweise
auch Prozessoranweisungen, die der Compiler aus deinem C-Code gemacht hat.
10011110 (158) könnte bedeuten, die folgende Adresse als Funktion zu starten
(keine Lust, die echte Nummern nachzuschauen).
Wenn das überschreiben wird, kommen irgendwann lustige Programmfehler.
Oder es gibt keine Fehler, macht aber irgendwas komplett unerwartetes...auch nicht gut.
Wer will schon, dass statt einem Funktionaufruf die Adresse zB. durch 2 dividiert wird?
Geht problemlos, macht aber nicht unbedingt das Gewünschte.