- 博客(36)
- 资源 (50)
- 收藏
- 关注
原创 linux-0.11调试教程,源起,从linux内核完全注释的几处错误说起
本系列文章调试linux-0.11,大部分都是一些新内容,小部分是对代码的一些印证。 另写了一些调试工具,比如readizone,readblock,readinode这些工具对学习linux-0.11操作系统很有帮助。当然还需要stat和hexdump工具的配合。 fdisk for linux-0.11 开始到-13/3/15的文章
2013-01-15 11:32:14 4777
原创 linux-0.11调试教程,mkfs.c源代码分析(3)
如果mkfs命令加-c选项会执行check_blocks()函数当然会很费时。大约2分钟。check_blocks()函数通过逐个读取块的内容,如果不能读取,算出哪个块不能读取,既是坏块,计算出坏块的块号既current_block,然后把对应的逻辑块位图中的位置位,表示已经损坏,在make_bad_inode()函数运行的时候会根据逻辑块位图中的位是否被置1换算成坏块的块号放到坏块文件中
2013-01-29 18:18:23 1685
原创 linux-0.11调试教程,mkfs.c源代码分析(2)
第二个任务是建立根目录。由make_root_inode()函数完成。在make_root_inode()函数运行之前如果命令中加入了-c选项,则会运行check_blocks()函数检查坏块,并把坏块对应的逻辑块位图块中对应的位置1。因为我们的系统是在bochs中运行,硬盘对应的是一个img文件,不是实体硬盘,所以不会有坏块。也没有必要加-c选项。根目录对应的数据是:#defin
2013-01-29 13:44:13 2304
原创 linux-0.11调试教程,mkfs.c源代码分析(1)
下面是mkfs命令的一个例子mkfs /dev/hd6 60000结果:20000个inodes,60000个blocks,第一个数据块块号为638指导思想:不看源代码的话,格式化一个文件系统,应该改变的是:(1),文件系统的超级块信息,需要用户输入的块的总数算出i节点的个数和i节点位图块的个数和逻辑块位图块的个数及第一个数据块的块号。setup_tab
2013-01-29 11:31:03 3748
原创 linux-0.11调试教程,img文件的分区和格式化,写了个fdisk1可以新建一个分区
fdisk1百度网盘下载:http://pan.baidu.com/share/link?shareid=220194&uk=453348606使用方法:fdisk1,可以放在rootimage-0.11根文件系统里,也可以放在hdc-0.11.img里面。使用命令后第二个硬盘既/dev/hd5的分区表第一个会被改写。作用:把由bochs的64M的img文件(未
2013-01-28 16:19:57 5030
原创 查看硬盘分区表信息工具:fdisk0 for linux-0.11 附下载地址
查看硬盘分区表信息工具:fdisk0 for linux-0.11下载地址1:fdisk0 for linux-0.11下载地址2:百度网盘下载地址:http://pan.baidu.com/share/link?shareid=218125&uk=453348606现在只能查看/dev/hd0的硬盘分区表信息,还不能删除分区,等。引用:UNIX所谓的“
2013-01-27 14:50:37 2427
原创 linux-0.11调试教程,df.c源代码分析,自己写了个super for linux-0.11
int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };1101,11003个1,2个1如tmp=1101,1100bnibblemap[tmp&0xf] + nibblemap[(tmp>>4)&0xf]=5上面的可以算出1个字节有多少个1!//count()算的是i节点位图或逻辑块位图中有多少个位为
2013-01-26 21:24:14 2918
原创 linux-0.11调试教程,Bochs-2.1.1配置文件,精简版可拷贝,及img文件制作过程
说明1:BIOS-bochs-latest文件和VGABIOS-elpin-2.40文件都在bochs安装目录下,既C:\Program Files\Bochs-2.1.1说明2:bootimage-0.11-hd和diskb.img和hdc-0.11.img都是用户自己制作或下载的别人制作好的文件。下面是bochsrc-hd.bxrc文件的内容:romimage: file=
2013-01-26 11:18:03 4575
原创 linux-0.11,任务1的用户态堆栈,copy-on-write之后的堆栈!
下面是copy-on-write之后和之前的内存页,copy-on-write之前0x401ee50位于user_stack[]数组内。user_stack地址:0x1de6c。0x1ee5c处的地址0x5412既head.s中L6的地址:$L6。copy-on-write之后位于0xffd000-0xffe000对应的内存页中。下面是copy-on-write之前和之后页
2013-01-25 07:34:05 2877 2
原创 linux-0.11调试教程,task2参数所在内存页的页目录项和页表项
此文内容在do_execve()函数的change_ldt()函数之后create_table()函数运行之前的情形。change_ldt()函数会调用put_page()函数把参数内存页放置到当前任务的线性地址的末端。第一步:在页目录表里找到任务2的参数内存页所在的页目录项,算出页表所在的地址0xffd000,因为每个进程64M对应16个字的空间任务2的在第32-47个字处。
2013-01-23 14:32:46 1765
原创 linux-0.11调试教程,task2的参数,copy_strings()函数和create_tables()函数的关系
下面是create_tables运行之前的用户栈的情况下面是create_tables运行之后的用户栈的情况init/main.c文件部分内容:static char * argv_rc[] = { "/bin/sh", NULL };static char * envp_rc[] = { "HOME=/", NULL };0x002f3
2013-01-22 22:20:24 2288
原创 linux-0.11调试教程,setup.s中的硬盘参数表
setup.s获取显卡信息和硬盘信息,因为硬盘信息的地址在中断向量int0x41处既0x0000:0104处,所以bootsect.s中把Image中的system部分移到了0x10000开始的地方,(而不是直接移到0x0000处,防止覆盖掉硬盘参数表的地址和硬盘参数表,因为硬盘参数表的地址在0x9fc0:0x003d处!),setup.s里面的代码取得硬盘参数表后再把0x10000处的syste
2013-01-21 13:07:25 3377
原创 linux-0.11调试教程,bootsect.s文件调试,Loading system ...
Image中的bootsect部分被BIOS加载到0000:7c00--0000:7e00,正好一个扇区,也只有这一个扇区。你应该能看到0X301既根设备号,还能看到aa55了。然后会把自己加载到0x90000-0x90200下面把setup部分加载到0x90200-0x90a00,共4个扇区。到这里你应该看到
2013-01-18 19:00:28 2157
原创 linux-0.11调试教程,con_init函数和右上角的EGAc
最后4个字母是EGAc对应8个字节0x07470745 0x07630741。因为是EGAc,所以0xb8000是显存的起始地址,而这时origin 也设置为video_mem_start既0xb8000。所以可以在0xb8030既第24个字母处(每个字母用2个字节表示),设置badc。#defi
2013-01-17 13:45:11 1685
原创 linux-0.11调试教程,minix文件系统1.0上篇(01),硬盘基本参数hd_info
下面是在mount_root下断点。地址0x191e4是hd_info[0]的结构地址,而0x90080是setup.s中设置的。相关代码是:for (drive=0 ; drive hd_info[drive].cyl = *(unsigned short *) BIOS; hd_info[drive].head = *(unsigne
2013-01-16 19:22:11 1564
原创 linux-0.11调试教程,minix文件系统1.0,上篇(02)sys_setup
下面在mount_root下断点的情形。下图可以看出为0x1fa58的buffer_head结构中设备号为0x300,块号为0。既硬盘的第一个块。上面有分区信息。高速缓存区块的地址为0x3ffc00。上图可以看出硬盘的第一个块的分区信息,从第二行的最后两个字可以看出nr_sects为0x1d87f。struct partition {
2013-01-16 18:03:10 2027
原创 linux-0.11调试教程,timer_interrupt,内核态发生的时钟中断(01)
下面的是进程1,mount_root()时发生时钟中断的情形。第一行和第二行和第三行的前两个字是时钟中断压入堆栈的第四行最后一个字,0x000120f9 是sys_setup()函数中mount_root()调用后的返回地址。第四行的前3个字和第三行的后2个字,共5个字是mount_root函数中压入堆栈的,分别是ebp,未知,edi
2013-01-15 19:06:51 1977
原创 linux-0.11调试教程,task3(04),sa_restore函数
返回用户态之后,先运行的是用户定义的信号处理程序,既sa_handler,然后sa_handler函数最后是ret!!!ret之后运行sa_restore函数,sa_restore函数最后也是ret!!!再返回到int 0x80下面的语句,既old_eip位置处继续运行。所以第一需要改变的是信号处理所在的用户程序的内核态堆栈中的eip,第二是用户态堆栈,用户态堆栈需要放置两个地址,
2013-01-14 07:42:24 2169
原创 linux0.11调试教程,task3概述
通过/etc/rc和/etc/update文件的运行过程,可以很好的理解sys_pause的作用和机理。以及可以理解信号的通信机制和sys_alarm系统调用是如何起作用的。update 会设置update所在任务的信号值SIGHUP和SIGTERM的处理句柄为SIG_IGN(忽略)。linux-0.11调试教程,task3(01),/etc/rc文件linux-0
2013-01-12 18:12:54 1372
原创 linux-0.11调试教程,task3(01),/etc/rc文件
init/main.c中相关代码: if (!(pid=fork())) { close(0); if (open("/etc/rc",O_RDONLY,0)) _exit(1); execve("/bin/sh",argv_rc,envp_rc); _exit(2); }
2013-01-12 16:54:02 2724 8
原创 linux-0.11调试教程,task3(03),do_signale之后的用户栈
下面是do_signal之前和之后iret之前的内核态堆栈的变化情况,主要是原esp和原eip的变化情况。相关代码:void do_signal(long signr,long eax, long ebx, long ecx, long edx, long fs, long es, long ds, long eip, long cs, lo
2013-01-11 21:11:51 1927
原创 linux-0.11调试教程,task3(02)系统调用sys_alarm和sigaction结构
系统调用sys_alarm相关代码:int sys_alarm(long seconds){ int old = current->alarm; if (old) old = (old - jiffies) / HZ; current->alarm = (seconds>0)?(jiffies+HZ*seconds):0; re
2013-01-11 13:31:18 2156
原创 进程1中copy_page_tables中页表项为何设置为只读?
this_page &= ~2;当处理器运行在超级用户特权级(级别0、1或2)时,则R/W位不起作用。
2013-01-10 21:38:29 1283
原创 linux-0.11调试教程,task4
相关代码: if (!pid) { close(0);close(1);close(2); setsid(); (void) open("/dev/tty0",O_RDWR,0); (void) dup(0); (void) dup(0);
2013-01-09 20:54:12 1051
原创 linux-0.11调试教程,task2
相关代码:if (!(pid=fork())) { close(0); if (open("/etc/rc",O_RDONLY,0)) _exit(1); execve("/bin/sh",argv_rc,envp_rc); _exit(2); }图1进程2的
2013-01-09 20:26:14 1193
原创 linux-0.11调试教程 tty_table
图一0x19170是tty_table的地址,图二是“Free mem: 12582912 bytes”对应的写队列缓冲区的一部分内容46:F,72:r,65:e,65:e,20:空格,6d:m... ... 图二图三图三是是tty队列结构,0x00000103表示队列里面的head位置。看
2013-01-08 18:34:21 1129
原创 linux-0.11调试教程 minix 文件系统1.0 下篇(3)文件表 file_table
(void) open("/dev/tty0",O_RDWR,0); (void) dup(0); (void) dup(0);下面的图是复制文件句柄0之后得到文件句柄1和文件句柄2,之后的情形。 图一图一表示进程1的task_struct,突出显示的task_struct->file[NR_O
2013-01-08 17:32:56 1341
原创 linux-0.11调试教程 minix文件系统1.0 下篇(2)inode_table内存i节点表和目录 /etc/tty0
setup((void *) &drive_info); (void) open("/dev/tty0",O_RDWR,0); (void) dup(0); (void) dup(0); printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS, NR_BUFFERS*BLOCK_
2013-01-07 19:13:36 2452
原创 linux0.11 minix1.0文件系统 下篇 根节点的 buffer_head结构,根节点内容
第一个i节点块的第一个i节点对应的是根节点,因为这个节点的izone[0]为0x027e!!!41ed是文件类型0x19294是根节点对应的内存i节点地址,izone[0]是0x02740x1fc50是根目录的buffer_head指针,既缓冲头指针,根目录的块号为0x027e,数据所在的高速缓冲区地址是0x003f400。
2013-01-06 19:55:12 1883
原创 linux 0.11 minix 1.0 文件系统 中篇 hash_table
上篇地址链接struct buffer_head * s_imap[8]; 0x0001faa0 0x0001fac4 0x0001fae8 struct buffer_head * s_zmap[8]; 0x0001fb0c 0x0001fb30 0x0001fb54
2013-01-06 18:40:28 1819
原创 linux 0.11 调试教程,minix 1.0 文件系统,上篇(03),super_block,137f和301看见了么?
相关代码:sys_setup()函数调用mount_root()函数,mount_root()函数又调用read_super()函数。struct super_block { unsigned short s_ninodes; 4e20 unsigned short s_nzones; ea60 unsigned s
2013-01-04 11:35:23 2151
原创 linux0.11,进程0,进程1,进程2运行的先后顺序
环境,ROOT_DEV=/dev/hd11,进程0,然后state等于12,进程1,然后state等于13,进程2。
2013-01-03 14:33:48 1979
转载 使用vi编辑文件,出现“*** is busy”,如何处理?
到tmp文件夹下,删光里面的所有文件,就可解决这个故障。不过,还是不明白为啥会这样。
2013-01-03 10:41:20 5807 1
netcat.dll(UDP版) by chenghao0511
2013-05-20
netcat 1.15-3 by chenghao0511
2013-05-16
netcat 1.15-2 by chenghao0511
2013-05-14
netcat 1.142 by chenghao0511
2013-05-05
netcat 1.14 by chenghao0511
2013-05-03
samba rpm包 for centos-5.5
2013-03-25
bash 1.05 by gcc-1.40 in minix-386 第二版
2013-02-23
fdisk-by-chenghao0511 for linux-0.11
2013-02-16
readinode for linux-0.11 by chenghao0511
2013-02-15
readblock for linux-0.11 by chenghao0511
2013-02-15
fileino-chenghao0511
2013-02-14
isbn十位转13位.xlsx
2020-05-09
cute http file server 开发API
2018-11-01
Prime numbers and the Riemann zeta function.by Jørgen Veisdal
2018-03-27
initramfs-tools_0.103
2015-01-29
linux-0.11硬盘集成盘14年1月9日by chenghao0511
2014-01-09
调试shoelace的winiboot所需的img文件
2014-01-08
readline used in linux-0.11 made in minix
2014-01-04
linux-0.11内核文件备份
2014-01-03
TUTORIAL FOR INSTALLING MINIX-386
2013-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人