使用Bochs进行Linux 0.11操作系统实验遇到的errno、调试问题和库函数问题

弯曲时空Crape 2019-02-22 12:27:46
1、errno问题:

#include<asm/segment.h>
#include<string.h>
#include<errno.h>
char username[24]="";
int sys_iam(const char *name)
{
int n=0, i;
char temp[32];
for(i=0;i<32;i++)
{
temp[i]=get_fs_byte(&name[i]);
if(temp[i]!='\0')
n++;
else
break;
}
if(n<24)
strcpy(username, temp);
else
{
n=-1;
errno=EINVAL;
}
return n;
}
int sys_whoami(char *name, unsigned int size)
{
int n=0, i;
for(i=0;i<size;i++)
{
put_fs_byte(username[i], &name[i]);
if(username[i]!='\0')
n++;
else
break;
}
if(username[n]!='\0')
{
n=-1;
errno=EINVAL;
}
return n;
}

这是中国大学MOOC哈尔滨工业大学《操作系统》课的实验过程中我写的C语言源代码“who.c”。现在的问题是,当我传进来的参数字符串多于23个字母后,为什么利用“dbg-c”调试时看到的errno等于22,但在虚拟机中输出errno时发现这个数是1?
2、Bochs调试问题
当我调试操作系统的时候,我怎样才能调试其中的用户程序?也就是说,我如何才能跟踪虚拟机中用户程序的执行过程,并获得Bochs虚拟机内编译后生成的程序运行时的变量?
3、库函数问题
我在“~/oslab/linus-0.11/lib”也创建了一个文件,模仿“write.c”我写了刚刚“who.c”的用户态接口,但在Bochs虚拟机运行时并未找到对应的库函数,以致虚拟机内的编译总是失败,这是为什么?
...全文
33 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧