Здравствуйте!!! Не могу получить адрес таблицы GDT в user mode. Выполняю код в visual c: _asm sgdt gdt; где gdt-структура с word для размера и DWORD для адреса. В итоге в DWORD хранится ccccf772, не очень похоже на адрес таблицы... В чем может быть ошибка???
Код (Text): sgdt [GDT] mov eax, [GDT + 2] В eax - 8003F000, как и должно быть. Может ты структуру неправильно объявил, выравнивание не учёл?
Вот код: #include<windows.h> #include<stdio.h> typedef struct _gdts { WORD Size; DWORD Base; } gdts int main(void) { gdts gdt; _asm sgdt gdt; printf("0x%.8x\n",gdt.Base); } выдает ccccf772....
Ну, как я и говорил выравнивание структуры у тебя по умолчанию. Надо на границу 1, или 2х байт. #pragma pack (push, 1) // Твоя структура #pargma pack (pop)
То есть вот так: #include<windows.h> #include<stdio.h> #pragma pack (push, 1) typedef struct _gdts { WORD Size; DWORD Base; } gdts #pargma pack (pop) int main(void) { gdts gdt; _asm sgdt gdt; printf("0x%.8x\n",gdt.Base); } Вроде результат похож, но почему она выдает то 8003f000, то f7723160? И еще глупый вопрос, в чем смысл этого выравнивания, то есть что происходит при этом...
2 ядра? HT? У меня на машине с HT тоже 2 результат иногда выводил. SetProcessAffinityMask сделай. Ну если раньше структура у тебя в памяти выгледела примерно так: Код (Text): 0 Limit 2 Padding 4 Base То после "отключения" выравнивания будет без Padding.