15)在 ke/sysproc.c 文件的ConsoleCmdVM 函数中,在调用MmAllocateVirtual——Memory 函数的代码行添加一个断点,在调用 MmFreeVirtualMemory 函数的代码行添加一 个断点;
16)启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“vm 1”后按回车,vm 命令开始执行后,会在调用 MmAllocateVirtualMemory 函数的代码行处中断。此时要注意参数 BaseAddress 和 RegionSize 初始化的值。按 F11(逐过程)调试进入 MmAllocateVirtualMemory 函数;
10
17)按 F10(逐过程)单步调试 MmAllocateVirtualMemory 函数的执行过程,继续执行,,会在调用 MmFreeVirtualMemory 函数的代码行处中断。此时要注意参数 BaseAddress 和 RegionSize 初始化的值。按 F11 调试进入 MmFreeVirtualMemory 函数;
11
12
18)尝试在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为 PAGE_SIZE+1 或者 PAGE_SIZE*2+1。观察“输出”窗口中转储的信息,并说明申请虚拟内存的大小与实际分配的大 小之间的关系,以及分配的虚拟内存大小会对分配的虚拟地址产生什么样的影响。将“输出”窗 口中转储的信息保存在文本文件中;
19)尝试在调用 MmAllocateVirtualMemory 函数时将 BaseAddress 参数的值设置为已经被占用的虚拟 内存,例如 0xA0000000,观察“输出”窗口中转储的信息。将“输出”窗口中转储的信息保存在 文本文件中;
13
20)尝试在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为 PAGE_SIZE*2,将 BaseAddress 参数的值设置为 0xA0017004,观察“输出”窗口中转储的信息,并说明申请虚拟内 存的大小与实际分配的大小之间的关系,以及申请的虚拟地址会对分配的虚拟内存大小产生什么 样的影响。将“输出”窗口中转储的信息保存在文本文件中;
21)创建一个EOS应用程序,调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间。
修改整型变量的值为 0xFFFFFFFF。在修改前输出整型变量的值,在修改后再输出整型变量的值。
调用 API 函数 Sleep,等待 10 秒钟,调用 API 函数 VirtualFree,释放之前分配的整型变量的空间,进入死循环,这样应用程序就不会结束。 #include “EOSApp.h”
int main(int argc,char* argv[]){
//启动调试EOS应用程序前要特别注意下面的问题:
// 1、如果要在调试应用程序时能够调试进入内核显示对应的源码,必须使用EOS
核心项目编译生成完全版本的SDK 文件夹,然后使用此文件夹覆盖应用程序项目中的SDK 文件夹,并且EOS核心项目在磁盘上的位置不能改变。
2、在启动调试应用程序之前必须首先删除禁用所有的断点,在断点中断(int 3)
被命中后才能重新添加启用断点,否则启动调试会失败。 #ifdef_DEBUG
_asm(“int$3\\n nop”);
#endif
INT* p;
//调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整
14