字符串文字的奇怪地址

时间:2018-09-23 08:11:58

标签: c++ g++ x86-64 osdev

我正在做自己的操作系统项目PS64,并且设法启动了64位内核。

我为此做了控制台输出,它似乎起作用了。但是,打印出错误的文字。

GDB说,传递的指针是0x28,距离指针应该具有的地址很远。

// KernelStart.cpp
void KernelStart() {
    KernelConsolePrint("Hello!");
}

// Console.hpp
void KernelConsolePrint(const char* str, const BYTE attribute = 0x07) {
    // str points far wrong address at this function
}

这是什么原因? 将64位内核从32位内核映像的后面复制到0x200000,并从0x200000开始,当然我在此处传递了用于文本会话的链接器参数。

我尝试使用它的char数组,它也指向错误的地址,但指向比普通地址靠前1〜4个字节的地址更近。

// KernelStart.cpp
void KernelStart() {
    const char[] str = { 'H', 'e', 'l', 'l', 'o', '!', '\0' };
    KernelConsolePrint(str);
}

// Console.hpp
void KernelConsolePrint(const char* str, const BYTE attribute = 0x07) {
    // ...
    for (unsigned i = 0; i < 8; ++i) { // changed loop cond because str points NULL character
        *( ( WORD * ) graphic ) = _CONSOLE_CHAR(str[i], attribute);
    }
}

// output
[  ]Hello!
 ^ two characters are appended

0 个答案:

没有答案