数组的隐式指针转换似乎没有指向数组

时间:2017-05-11 16:26:07

标签: c++ arrays pointers operating-system

link to full code

我正在编写一个操作系统,作为一部分,我需要告诉CPU有关内存中的段。基本思想是我用LGDT组装调用加载GDT寄存器。该参数是包含实际GDT的大小和位置的结构的内存地址。我遇到的问题是在GlobalDescriptorTable.h的第75行,我将结构中的数组地址设置为传递给LGDT但是当我在结构给出的地址处检查内存时,那里什么也没有。

class GlobalDescriptorTable {
private:
    GdtEntry _gdt[256];
    size_t size;
    GdtDescriptor gdtd;
public:
    GlobalDescriptorTable( ) ;
    GdtEntry encodeGlobalDescriptorTableEntry(uint32_t limit,
            uint32_t baseAddress, Access access, Flags flags);
    void load( ) {
        //get size, -1 because Int-hell hates you
        size_t sizeOfGdt = (3 * sizeof(GdtEntry)) - 1;
        //get the info to tell cpu about the GDT

        gdtd.size = (uint16_t)sizeOfGdt;
        gdtd.location = _gdt;
        asm ("LGDT %[gdtd]" : : [gdtd] "m" (gdtd));
    }
};

作为测试分配:

uint64_t temp = 0xF00FB00BEE00F0AA;
_gdt[0] = *((GdtEntry*) &temp);

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

LGDT指令需要线性地址,而不是段相对地址。这是一个与您在C ++程序中获得的地址不同的地址。有关详细信息,请参阅有关此说明的英特尔文档。