Exemplo n.º 1
0
        void tss::write(int32_t num, uint16_t ss0, uint32_t esp0)
        {
            uint32_t base = (uint32_t)&tss_entry;
            uint32_t limit = base + sizeof(tss_entry);

            gdt::set_gate(num, base, limit, 0xE9, 0x00);

            memset_v(&tss_entry, 0x0, sizeof(tss_entry));

            tss_entry.ss0 = ss0;
            tss_entry.esp0 = esp0;

            tss_entry.cs = 0x0b;
            tss_entry.ss = tss_entry.ds 
                = tss_entry.es 
                = tss_entry.fs 
                = tss_entry.gs 
                = 0x13;
        }
int main(void) {
  char test[512];
  static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
  memset_v(test, 0, 512);
  return 0;
}