Hallo, ich bin grade am Grübeln wie man das folgende Problem am besten Lösen kann:
Mal angenommen man hat diese zwei Funktionen:
int gvar;
void func(int *ptr){
*ptr=0;
}
void main(void){
int lvar;
func(&lvar);
func(&gvar);
}
Die Variable lvar befindet sich auf dem Stack und gvar im Datensegment. Wenn man nun keine Far-Zeiger verwendet (also nur 32-Bit Adressen) so müssen Stack und Datensegment sich ja überlappen, so dass man auch mit ds: auf die Adresse von lvar zugreifen kann (der Stack befindet sich also im Datensegment).
Weiß jemand von euch, wie dieses Problem zB bei Windows gelöst wird? Eventuell genauso?
Für normale Anwendungen funktioniert dieses Konzept zumindest recht gut, jedoch jetzt will ich einen Kernel schreiben, dessen API-Funktionen per Interrupt aufgerufen werden. Das Problem ist nun, dass ich zwar das Datensegment des Kernels in der API-Funktion laden kann, jedoch weiterhin das Stacksegment des Aufrufers benutzen muss. Dadurch würde das Programm abstürtzen, wenn wie in func() auf einen Zeiger einer lokalen Variable zugegriffen würde.
Wie könnte man dieses Problem am elegantesten lösen?
MM