Meiner Meinung nach müsste der Stack nach REG_RESTORE folgendermaßen aussehen:
| STACK 0x11226d [0x029e]
| STACK 0x11226f [0x0010]
| STACK 0x112271 [0x0008]
| STACK 0x112273 [0x0000]
| STACK 0x112275 [0x0202]
| STACK 0x112277 [0x0000]
und nicht:
| STACK 0x001c [0xff53]
| STACK 0x001e [0xf000]
| STACK 0x0020 [0xfea5]
| STACK 0x0022 [0xf000]
| STACK 0x0024 [0xe987]
| STACK 0x0026 [0xf000]
| STACK 0x0028 [0xff53]
| STACK 0x002a [0xf000]
| STACK 0x002c [0xff53]
| STACK 0x002e [0xf000]
| STACK 0x0030 [0xff53]
| STACK 0x0032 [0xf000]
| STACK 0x0034 [0xff53]
| STACK 0x0036 [0xf000]
| STACK 0x0038 [0xef57]
| STACK 0x003a [0xf000]
| STACK 0x003c [0xff53]
| STACK 0x003e [0xf000]
| STACK 0x0040 [0x0116]
| STACK 0x0042 [0xc000]
| STACK 0x0044 [0xf84d]
| STACK 0x0046 [0xf000]
| STACK 0x0048 [0xf841]
| STACK 0x004a [0xf000]
| STACK 0x004c [0xe3fe]
| STACK 0x004e [0xf000]
| STACK 0x0050 [0xe739]
| STACK 0x0052 [0xf000]
| STACK 0x0054 [0xf859]
| STACK 0x0056 [0xf000]
Hoffentlich könnt ihr dazu mehr sagen, ich bin Ratlos
Edit:
Glaube gerade noch auf die schnelle den oder einen Fehler gefunden zu haben... werde das heute Abend genauer untersuchen:
Natürlich darf ich esp nicht vom Stack popen! Sonst sitzt der Stack plötzlich auf Adresse 0
wird hier deutlicher:
00104c20: ( ): push eax ; 50
00104c21: ( ): push ebx ; 53
00104c22: ( ): push ecx ; 51
00104c23: ( ): push edx ; 52
00104c24: ( ): push esi ; 56
00104c25: ( ): push edi ; 57
00104c26: ( ): push ebp ; 55
00104c27: ( ): push esp ; 54
00104c28: ( ): mov eax, dword ptr ds:0x306930 ; a130693000
00104c2d: ( ): mov dword ptr ds:[eax], esp ; 8920
00104c2f: ( ): call .+0xffffdbaa ; e8aadbffff
00104c34: ( ): mov eax, 0x00000020 ; b820000000
00104c39: ( ): out 0x20, al
| STACK 0x06b0 [0x06b4]
| STACK 0x06b2 [0x0000]
| STACK 0x06b4 [0x06f8]
| STACK 0x06b6 [0x0000]
| STACK 0x06b8 [0x6940]
| STACK 0x06ba [0x0010]
| STACK 0x06bc [0x07ac]
| STACK 0x06be [0x0000]
| STACK 0x06c0 [0x0000]
| STACK 0x06c2 [0x0000]
| STACK 0x06c4 [0x0000]
| STACK 0x06c6 [0x0000]
| STACK 0x06c8 [0x8f58]
| STACK 0x06ca [0x000b]
| STACK 0x06cc [0x0000]
| STACK 0x06ce [0x0000]
00104c3b: ( ): mov eax, dword ptr ds:0x306930 ; a130693000
00104c40: ( ): mov esp, dword ptr ds:[eax] ; 8b20
-> Hier ist der Stack so wie er sein sollte
| STACK 0x11224d [0x0000]
| STACK 0x11224f [0x0000]
| STACK 0x112251 [0x0000]
| STACK 0x112253 [0x0000]
| STACK 0x112255 [0x0000]
| STACK 0x112257 [0x0000]
| STACK 0x112259 [0x0000]
| STACK 0x11225b [0x0000]
| STACK 0x11225d [0x0000]
| STACK 0x11225f [0x0000]
| STACK 0x112261 [0x0000]
| STACK 0x112263 [0x0000]
| STACK 0x112265 [0x0000]
| STACK 0x112267 [0x0000]
| STACK 0x112269 [0x0000]
| STACK 0x11226b [0x0000]
| STACK 0x11226d [0x029e]
| STACK 0x11226f [0x0010]
| STACK 0x112271 [0x0008]
| STACK 0x112273 [0x0000]
| STACK 0x112275 [0x0202]
| STACK 0x112277 [0x0000]
| STACK 0x112279 [0x0000]
| STACK 0x11227b [0x0000]
| STACK 0x11227d [0x0ee1]
| STACK 0x11227f [0x0011]
| STACK 0x112281 [0x46a7]
| STACK 0x112283 [0x001f]
| STACK 0x112285 [0x0000]
| STACK 0x112287 [0x0000]
00104c42: ( ): pop esp ; 5c
-> Hier nichtmehr
| STACK 0x0000 [0xff53]
| STACK 0x0002 [0xf000]
| STACK 0x0004 [0xff53]
| STACK 0x0006 [0xf000]
| STACK 0x0008 [0xff53]
| STACK 0x000a [0xf000]
| STACK 0x000c [0xff53]
| STACK 0x000e [0xf000]
| STACK 0x0010 [0xff53]
| STACK 0x0012 [0xf000]
| STACK 0x0014 [0xff53]
| STACK 0x0016 [0xf000]
| STACK 0x0018 [0xff53]
| STACK 0x001a [0xf000]
| STACK 0x001c [0xff53]
| STACK 0x001e [0xf000]
| STACK 0x0020 [0xfea5]
| STACK 0x0022 [0xf000]
| STACK 0x0024 [0xe987]
| STACK 0x0026 [0xf000]
| STACK 0x0028 [0xff53]
| STACK 0x002a [0xf000]
| STACK 0x002c [0xff53]
| STACK 0x002e [0xf000]
| STACK 0x0030 [0xff53]
| STACK 0x0032 [0xf000]
| STACK 0x0034 [0xff53]
| STACK 0x0036 [0xf000]
| STACK 0x0038 [0xef57]
| STACK 0x003a [0xf000]
00104c43: ( ): pop ebp ; 5d
00104c44: ( ): pop edi ; 5f
00104c45: ( ): pop esi ; 5e
00104c46: ( ): pop edx ; 5a
00104c47: ( ): pop ecx ; 59
00104c48: ( ): pop ebx ; 5b
00104c49: ( ): pop eax ; 58
00104c4a: ( ): iretd ; cf
Edit2:
Der Fehler hat sich bestätigt! Ganz einfach, aber hab dies die ganze Zeit übersehen
Naja aufjedenfall bin ich ein Schritt weiter un der Stack sieht vor dem IRET endlich so aus wie "bisher" gewünscht...
Stack genau wie ich ihn der der Funktion class_multitasking::task_anlegen(entry_t entry) generiere
:
| STACK 0x11226d [0x029e]
| STACK 0x11226f [0x0010]
| STACK 0x112271 [0x0008]
| STACK 0x112273 [0x0000]
| STACK 0x112275 [0x0202]
| STACK 0x112277 [0x0000]
| STACK 0x112279 [0x0000]
| STACK 0x11227b [0x0000]
| STACK 0x11227d [0x0ee1]
| STACK 0x11227f [0x0011]
| STACK 0x112281 [0x46a7]
| STACK 0x112283 [0x001f]
| STACK 0x112285 [0x0000]
| STACK 0x112287 [0x0000]
| STACK 0x112289 [0x0000]
| STACK 0x11228b [0x0000]
Allerdings führt die CPU nun ein IRET aus bekomme ich wieder:
00019364120e[CPU0 ] iret: return CS selector null
00019364138e[CPU0 ] read_virtual_checks(): read beyond limit
00019364156e[CPU0 ] read_virtual_checks(): read beyond limit
00019364174e[CPU0 ] read_virtual_checks(): read beyond limit
00019364192e[CPU0 ] read_virtual_checks(): read beyond limit
00019364210e[CPU0 ] read_virtual_checks(): read beyond limit
00019364228e[CPU0 ] read_virtual_checks(): read beyond limit
00019364246e[CPU0 ] read_virtual_checks(): read beyond limit
...