kernel相关内容
我使用的是x86机器上的Slackware 12.2。我试图调试/倾倒的内存特定部分弄清楚的事情。不幸的是我对Linux内核的知识是相当有限的,以我所需要的编程/渗透测试。 因此,这里是我的问题:有没有访问任何一点在内存中的方法吗?我试图用一个字符指针,这样做,这样它只会是一个字节长。然而,程序崩溃和在大自然吐出来了一句:“不能访问内存位置”。现在我指着00000000哪个位置所在的系统存储
..
编辑:PLZ跳到我的第二个职位低于... 我在寻找一个最低限度的办法从我的引导程序进入到我的内核。 你有什么可行的例子这样做呢? 下面是进入保护模式的引导程序: “boot.asm” [组织0x7C00]MOV BP,0×9000 MOV SP,BPCLI LGDT [gdt_descriptor];输入PM MOV EAX,CR0 或EAX,为0x1 MOV CRO,EAXJMP 0
..
如何创建简单的引导加载器加载内核成ISO?它已经5天,我在谷歌搜索和做试验和错误很多次,但一无所获.....我试过很多教程像mikeos,osdev,超新星爆发,宇宙操作系统,但仍然获得无解..... 我的电脑没有floopy磁盘,所以我不能使用floopy磁盘引导程序做... 我看到mikeos教程第一个扇区512字节启动加载和第二内核可以使用imdisk但使用floopy盘还他可以做的bo
..
我开发一个小玩具内核C.我在哪里,我需要从键盘获取用户输入的地步。到目前为止,我已实施 INB 使用以下code: 静态内嵌uint8_t有INB(uint16_t端口){ uint8_t有RET; ASM挥发性(“INB%1,%0”:“=一个”(保留):“ND”(端口)); 返回RET; } 我知道“= A”约束意味着人/ AX / EAX 将被复制到 RET
..
我已经写了尝试两个字符写入到帧缓冲简单的内核。 如果我在内核中定义一个字符串,我得到以下输出在引导时: 引导“OS”内核/boot/kernel.elf错误13:无效或不支持的可执行格式preSS任意键继续...... 否则,如果我定义了两个角色我得到以下(注意'AB'在输出的开始): abBooting'操作系统'内核/boot/kernel.elf [多重精灵,< 0x10
..
我已经把kprobe的功能,现在我需要在kprobe的prehandler函数的自变量的值。 下面是我的功能: 无效foobar的(INT ARG,诠释ARG2,诠释ARG3,诠释ARG4,诠释arg5,诠释arg6,诠释arg7,诠释arg8) { printk的(“foobar的称为\\ n”); } 这是它把kprobe和调用函数: ... kp.addr =(kprobe_
..
我学习操作系统教程。我创建了2个文件。 boot.asm kernel.c 的kernel.c如下: INT的main() { 字符* SRC =(字符*)0xB8000000L; * SRC ='M'; SRC + = 2; * SRC ='D'; 返回0; } 内核是用来写一个字符文本模式视频显示区域。内核采用的 GCC 的Windows版本的编译:
..
我很感兴趣,在linux从一个角度集结点保护模式下的运行方式。其中注册并当它涉及到把CPU处于保护模式为i386的中断时:0x86_64机?我明白当我看到像MMAP和mprotect的函数的C源代码,但是什么让我接管汇编内存管理是如何工作的?我在哪里可以得到更多的信息对此有何看法? 解决方案 我相信你正在寻找的 弓/ 86 / MM / - 的 弓/ 86 / MM / INIT.C 设置
..
我已经开发了装配/ C运行一个基本的终端基本内核。我已经将它设置为关闭使用GRUB的ISO的运行。 我想继续这样的操作系统,但没有一个文件系统,我觉得好像没什么好说别的我可以做的。后在互联网上太多的时间,我都拿出了真没什么,我可以做些什么来实现这一点。 人们说实现FAT或作出VFS,但没有任何进一步的,也没有教程,也没有在任何地方的任何引用。 有人能解释一个文件系统是如何工作的,在那里我可以
..
我在C.被编写内核我一直在使用GCC交叉编译器,写在Windows系统上和指定16位实模式。我没有可用的C库写的内核。我已经开始与一些code这是假设直接打印字符在屏幕上。下面是一个函数 kernel.c : INT的main() { 字符* SRC =(字符*)0xB8000000L; * SRC ='M'; SRC + = 2; * SRC ='D'; 返回0; }
..
我在以下几个教程,并试图让我的内核设置引用。我在没有解释它在所有的教程会遇到一些陌生code。这是code,我听说映射 16的IRQ(0-15)来ISR位置 32-47 : 无效irq_remap(无效) { outportb(0x20的,为0x11); outportb(0XA0,为0x11); outportb(为0x21,0x20的); outportb(0
..
在引导装载程序执行的手到内核中,会发生什么?我知道汇编程序,那么什么是前几个指令,内核必须做什么呢?还是有,这是否一个C函数?什么是内核前的启动顺序,可以执行任意的二进制? 解决方案 我会假设你在这里谈论的x86 ... 这要看你考虑“引导管理器”和“仁”之间的边界是:内核正确的起点是32位保护模式code,但内核本身提供了一些启动code从实模式到那里。 在实模式code在 弓/ 8
..
我学习了位操作系统的发展从 OSDev.org 。我有一个内核和我试图用QEMU GRUB遗产(0.97)来引导。然而,当我键入内核200 + 9 ,我得到的消息 [多引导小精灵,< 0x100000处:0x80的:0x4008>(坏),入境= 0x10000c] 这是我所期望的除外(坏)的一部分。如果键入启动现在GRUB只是挂起。 我觉得数字的0x100000,0x44进行,
..
我要当用户presses像F1-12一个特殊的按键在我的程序,这是写在NASM接收中断。我只是需要等待我的主要功能开始的功能按键。我知道这是可能的BIOS的的INT 16h ,它返回一个扫描code。我怎样才能做到这一点Linux下? 解决方案 必要的code这是相当复杂的;我终于想通了如何使用原始的ioctl检查F1在C,读取和写入。如果你熟悉汇编和Linux系统调用的翻译NASM应该是
..
我想提出一个基本的C内核。 (由汇编程序加载)我与窗口的i686的小精灵交叉编译器编译它。我的C code是如下: 无效CLS(); 无效drawhappy(); 无效的主要(){ 字符* vidptr =(字符*)0xb8000; CLS(); drawhappy(); }无效CLS(){ 字符* vidptr =(字符*)0xb8000; unsign
..
我只是想编译一些简单的例子,code我从一本书上键入的,和GCC给我上面的错误。这里是我的code: $猫-n TEST.CPP 1#定义READ_COMMAND 3 2 3#定义MSG_LENGTH 128 4 5#包括LT&;&stdlib.h中GT; 6#包括LT&;&stdio.h中GT; 7 8 INT主(INT ARGC,CHAR * ARG []) 9 { 10
..
我对自己写一个内核,并在第一页错误中断处理后,当执行IRET,它会导致中断13(一般保护),和错误code是为0x18。我不知道什么是错的,内容压入堆栈来自于CPU。 这里就是寄存器储存时发生中断寄存器状态和内存。此外,IRET从页面错误中断处理程序返回。 可以肯定的是ESP%IRET是执行和中断发生之前一样的。 解决方案 如果异常是从 IRET 本身,那么最有可能的 IRET 未能恢
..
我试图禁用缓存的所有级别我的机器英特尔(R)至强(R)CPU E5-1650 V2 @ 3.50GHz Xen中。我写了一个工具来调用下面的组装code禁用/启用缓存,并显示CR0寄存器的值。 情况下XENMEM_disable_cache: __asm__ __volatile __( “pushq %% RAX \\ n \\ t”的 “MOVQ
..
最近我一直在使用很多汇编语言在* NIX操作系统。我想知道的Windows域。 在linux下的调用约定: MOV $ SYS_Call_NUM,EAX% MOV $参数1,EBX% MOV $参数2,ECX% INT 0x80的$ 这就是它。这就是我们应该如何使Linux的系统调用。 所有系统的参考在linux下调用: 有关哪些$ SYS_Call_NUM&安培;哪些参数,我们可
..
我试图按照指示在这里建立一个简单的OS内核: http://mikeos.sourceforge.net/write-your-own-os.html 除,而不是从软盘启动,我想创建一个基于GRUB的ISO映像和引导模拟器多重引导的CD。我已经添加了以下在该页面中列出,对于多重包头中的源: MBALIGN EQU 1 LT;℃的;对齐页面边界上加载的模块 meminfo的EQU 1 LT;&
..