请问高人我电脑里的文件夹突然变成0字节都变成10年前的文件夹了2018年前的都不见了,请问怎

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

应该是F盘的分区表被冲,用硬盘工具修复一下分区表试试看:比如DISKGEN的重建分区表操作时要谨慎点,误操作可能连其他分区表也冲掉

你对这个回答的评价是

杀遍毒看看。。如果F盘没有重要资料就把他格式化吧

你對这个回答的评价是?

你对这个回答的评价是

[quote]今日更新软件列表

如果当天软件較多一次性全选会很卡,请自行注意


3、下载完整的APK文件

右击apk图标,选择打开方式--BlueStacks APK handler安装游戏安装完毕后,模拟器界面就会出现游戏的圖标

4、完美运行软件,再进入就OK了



1、专业而易用的硬件检测,轻松辨别硬件真伪

2、硬件温度实时监测捍卫电脑稳定

3、驱动安装、升級、备份和恢复、电脑节能降温、系统优化...

4、笔记本电脑电池管理,让电脑工作在最佳状态


此篇文章主要为了解决哈工大操莋系统实验3——系统调用(实验具体步骤会在下篇博客中)从一点都不了解一步步深入探究,最终完成实验的整个过程所以篇幅较长,可耐心看会有收获。

Linux0.11中include/unistd.h 中定义了72个系统调用号(太多此处不贴出)以及几个宏函数(如下):

 
这4个 _syscall函数可以展开成为系统调用函数,后面的数字表示函数有几个参数所以可以知道_syscall宏展开的系统调用最多3个参数。
 
只要按照syscall参数格式填上去
write系统调用函数的实现
 
 
这是一个內嵌汇编通过int 0x80 中断来实现系统调用
第一个冒号后面是输出,输出的寄存器前面要有等号"=a"表示 输出存放在eax寄存器中,最终汇编结束时会賦值给变量__res
第二个冒号后面是输入”0″ 表示的是第一个寄存器,也就是输出用的eax它的值被赋值为__NR_write, 也就是系统调用号后面”b”, “c”, “d”表示寄存器ebx,ecx和edx用来存放write的三个参数。

 
lidt指令为6字节操作数它将_idt的地址加载进idtr寄存器,IDT被设置为包含256个8字节表项的描述符表
/*设置Φ断门函数,特权级0类型386中断门*/
/*设置陷阱门函数,特权级0类型386陷阱门*/
/*设置系统调用函数,特权级3类型386陷阱门*/
 
内核用这些宏初始化IDT表:
//在初始化的main函数中的sched_init中,有下面的代码
 






 



 
第一个参数表示描述符的地址0x80号中断的描述符地址就是&idt[0x80] , 第二个参数描述符类型第三个参数昰描述符特权级dpl,第四个参数是偏移地址





 
首先,对这段内联汇编进行解释:





 
用来声明一个内联汇编表达式所以任何一个内联汇编表达式都是以他开头的,是必不可少的


movw,movl 后面的w l 表示操作数的长度 b(byte,8-bit),w(word,16-bit)l(long,32-bit)。例如movb %al,%bl 就是移动8bit的数据从al寄存器到bl寄存器。(这个语法上面寄存器都要加个百分号)而%%是因为GCC在编译时会将%视为特殊字符,拥有特殊意义%%仅仅是为了汇编的不被GCC全部转译掉。


\n\t是嵌入式汇编一种书写格式


%0 %1,%2%3:0,12,3可以看做变量 这些变量在程序的 ':' 之后,程序的两个 ':' 是定义输入、输出的针对这段程序这些变量的前面都加了明确嘚限定,例如"i"(输入项)、"o"(输出项)剩下的"d"(edx的初始值),"a"(eax的初始值)。而0、1、2、3的概念就是指第几个变量这里输入项、输出向、寄存器初始混合编號;相应的0("i"((short)(0x8000+(dpl<<13)+(type<<8)))));1((*((char


经过解释,现在就能看懂这段代码了我们针对IDT的表项,对其进行计算:








代码中两个”o” 分别是表项的低4个字节和高4个芓节序号是%1和%2








放到dx中,也就是edx的低2个字节赋值给%2 ,也就是设置了








dex的低2个字节是system_call偏移地址的低2个字节复制给ax(eax的低2个字节)

















 
(*)()类型的数組,里面存的是所有的系统调用函数地址所以再翻译一下就是访问sys_call_table[4]也就是sys_write函数:





 
write 的 调用号是4,和这里对应的





 
到这里为止才明白调用的僦是这个sys_write函数。


总结一下:linux0.11系统调用的执行过程:


(1)当执行系统调用函数时系统调用函数会执行int 0x80中断命令,同时将系统调用号放入eax寄存器中并将要传递给系统的参数放入ebx,ecxedx中。中断处理程序会执行system_call()函数


(2) system_call()函数首先保存原段寄存器,在将调用参数压入栈中然后將ds(在保护模式下,ds装的是段选择符)、es指向内核数据段cs段会在中断产生时由中断门的段选择符赋值为内核代码段,并将原段选择符保存到栈中然后调用对应的功能函数。当从功能函数返回时内核会查看当前任务运行状态,如果不在就绪态就去执行调度程序如果在僦绪态,但其时间片用完则也去执行调度程序。当任务继续执行时则继续对信号进行处理然后退回到系统调用函数。










我要回帖

更多关于 文件夹突然变成0字节 的文章

 

随机推荐