gdt

    0热度

    1回答

    这是我的代码: ... data_seg equ os_data-gdt_start code_seg equ os_code-gdt_start ... jmp code_seg:pm_start [BITS 32] pm_start: mov ax,data_seg mov ds,ax mov word [ds:0xb8000],0xC341 它正常工作时,在GDT

    0热度

    1回答

    加载/存储 IDT使用LIDT汇编指令加载。它需要一个IDT描述结构的位置: 偏移是表本身的虚拟地址。大小是表格的大小减去1.该结构可以使用SIDT指令再次存储到存储器中。 它在http://wiki.osdev.org/Interrupt_Descriptor_Table

    1热度

    1回答

    我定义我的共同ISR存根: isr_common_stub: pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax mov ax, ds ; Lower 16-bits of eax = ds. push eax ; save the data segment descriptor mov ax, 0x10 ; load t

    0热度

    1回答

    我已经了解了全局描述符表(GDT)的基础知识,并且我已经成功使用asm编写了一个“GDT.inc”,以便我们可以轻松地将其包含在我们的引导程序。作为一个婴儿步骤i已经配置了代码描述符和数据描述符来读取和从第一字节写入到字节0xFFFFFFFF的存储器(在存储器中的任何部分) ; null descriptor dd 0 ; null descriptor--just fill 8

    0热度

    1回答

    我正在研究这个真正的保护模式转换。我怀疑真正的保护模式是否可以在不加载ldt和idt的情况下发生,但通过加载gdt来实现。有鉴于此,第二个疑问就是为什么真正的模式程序不能转换到v8086模式而不能在保护模式下运行? 谢谢

    1热度

    2回答

    如果该位为零,那么内存是逐字节寻址的? 如果它是1,那么内存是4Kb的4Kb?因此,例如,如果这个位被设置为0,并且我的地址是 ,那么我会在该位置处寻址 对吗?如果我处理下一个位置 a001h,那么这将是内存中的下一个字节? 但是,如果这个位是1,我会寻址4Kb块吗? 那么,解决一个000h给我一个4Kb块,然后a001 下一个4Kb在内存中?

    0热度

    1回答

    我正在制作一个操作系统,我被困在GDT中。我尝试过不同的教程,例如http://www.osdever.net/bkerndev/Docs/gdt.htm和http://www.jamesmolloy.co.uk/tutorial_html/4.-The%20GDT%20and%20IDT.html,但是我的操作系统总是崩溃。我怎样才能解决这个问题?我使用grub,所以内核已经处于保护模式。 bo

    1热度

    2回答

    的内容 我分析拆解的DLL和卡住就行 mov ebx,fs:[00000004h] 我想找出写入EBX与该数据的确切物理地址指令。 GDB告诉我,fs = 0x53. 我已经发现该地址取决于模式(受保护或实际),我敢肯定,CPU处于保护模式(见*)。所以段fs的开始应该存储在GDT的某个地方,对吧?我也找到了GDT-register (0x009bd5c0007f)的地址,但gdb不允许我访问

    1热度

    1回答

    我有一个引导程序为我设置GDT。是否有可能找到这个GDT的地址,以便我可以使用它?

    0热度

    1回答

    如果某个进程为代码执行调用属于另一个进程的远指针,会发生什么情况? 在32位操作模式下,GDT是非常用的,并且可以充分使用分段。 那么,如果请求的CS指针指向另一个进程的段,会发生什么? 有时候这是允许的,我想。 但是,通常情况并非如此。 在64位模式下,分割中途关闭。 所有分段从0运行到处理器线性空间的顶部。另外,GDT似乎被轻易地使用;例如,Linux将所有进程中的所有用户代码放入一个段中。