【发布时间】:2015-07-01 03:11:18
【问题描述】:
我正在编写一个 32/64 位内核。我有一个奇怪的问题,当我尝试将 const char* 、 char * 或 char [] 传递给函数时,数组总是空的。
例如,
我有一个kmain,它会在我写的时候进行 gdt、idt、isrs、irq、视频和定时器初始化:
test_func("test");
test_func(char * string) 调试代码:
void test_func(char * string)
{
if(string[0] == '\0'){
putch('n');
}else{
putch('o');
}
}
我总是在屏幕上显示“n”。
如果我测试:
if (string == NULL){
putch('n');
}else{
putch('o');
putch(string[0]);
}
我得到o 没有字符串的第一个字符
对于链接和编译,我正在使用
ld -m i386linux -T linker/link.ld -nostdlib -o kern.my ../obj/start.o \
../obj/main.o \
../obj/scrn.o \
../obj/gdt.o \
../obj/idt.o \
../obj/isrs.o \
../obj/irq.o \
../obj/timer.o \
../obj/io.o \
../obj/yshell.o \
../obj/kb.o
我正在使用 Qemu i386 测试 kern.my
[链接器脚本]
OUTPUT_FORMAT("binary")
ENTRY(start)
phys = 0x100000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(4096);
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .;
}
我使用 Qemu 和 GDB,我的信息寄存器:
eax 0x1 1
ecx 0x0 0
edx 0x3d5 981
ebx 0x9500 38144
esp 0x104fe0 0x104fe0
ebp 0x0 0x0
esi 0x0 0
edi 0x108000 1081344
eip 0x100356 0x100356
eflags 0x6 [ PF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x10 16
gs 0x10 16
【问题讨论】:
-
请发布您正在使用的实际代码,并将其简化为您遇到的问题。
-
发布您的链接器脚本。
-
我发布了链接描述文件