📄 dumppmm.c
字号:
/*
dumppmm.c copyright by robin @2004.7.10
*/
#include "..\typedef\type.h"
#include "..\pmm\pmm.h"
#include "..\txlib\txlib.h"
#include "txstdio.h"
#include "memory.h"
#include "string.h"
extern PMB g_pmb;
extern char strHelp[];
//dumppmm [/i:page number],[/o:offset],[/l:length],[/help]
int DumpMemoryA(void * buffer,DWORD dwLeng);
#define printf kprintf
void DumpPhysicMemoryUsage()
{
printf("Usage : dumppmm [/i:page number],[/o:offset],[/l:length],[/help]\n");
printf("\tpage number : the physic memory page number.\n");
printf("\toffset : offset in the page.\n");
printf("\tlength : the length of memory to display.\n");
printf("\thelp : show how to use dumppmm.\n");
}
int DumpPhysicMemory(int argc,char ** argv)
{
int i;
DWORD dwPgNum = 0; // 页号
DWORD dwOffset = 0; // 页内偏移
DWORD dwLeng = 256; // 显示长度
DWORD dwHelpFlag = 0; // 帮助标志
DWORD * vaddr = 0; // 映射地址
for( i = 1 ; i < argc ; i++)
{
if(argv[i][0] == '-' || argv[i][0] == '/')
{
if(argv[i][1] == 'i' || argv[i][1] == 'I')
{
if(IsHex(&(argv[i][3])) != 0){
dwPgNum = atoi16(&(argv[i][3]));
}
else if(IsDigital(&(argv[i][3])) != 0){
dwPgNum = atoi10(&(argv[i][3]));
}
else{
printf("page number invalid,please check it out!");
return 0;
}
}
else if(argv[i][1] == 'o' || argv[i][1] == 'O')
{
if(IsHex(&(argv[i][3])) != 0){
dwOffset = atoi16(&(argv[i][3]));
}
else if(IsDigital(&(argv[i][3])) != 0){
dwOffset = atoi10(&(argv[i][3]));
}
else{
printf("page Offset invalid,please check it out!");
return 0;
}
}
else if(argv[i][1] == 'l' || argv[i][1] == 'L')
{
if(IsHex(&(argv[i][3])) != 0){
dwLeng = atoi16(&(argv[i][3]));
}
else if(IsDigital(&(argv[i][3])) != 0){
dwLeng = atoi10(&(argv[i][3]));
}
else{
printf("dump length invalid,please check it out!");
return 0;
}
}
else if(argv[i][1] == 'h' || argv[i][1] == 'H')
{
upcase(argv[i]);
if(strcmp(&(argv[i][1]),strHelp) == 0) dwHelpFlag = 1;
else {
printf("some page parameter invalid,check it out!");
return 0;
}
}
}
else{
printf("some page parameter invalid,check it out!");
return 0;
}
}
if(dwPgNum >= g_pmb.pmb_TotPage)
{
printf("page number out of range!\n");
return 0;
}
if(argc == 1 || dwHelpFlag == 1)
{
DumpPhysicMemoryUsage();
return 1;
}
if(dwOffset >= PAGE_SIZE)
{
printf("page offset out of range! page length : %d\n",PAGE_SIZE);
return 1;
}
if(dwLeng > 512) dwLeng = 512;
if((dwOffset + dwLeng) > PAGE_SIZE)
dwLeng = PAGE_SIZE - dwOffset;
vaddr = Load_Physic_Page(dwPgNum);
DumpMemoryA(((char *)vaddr + dwOffset),dwLeng);
Unload_Physic_Page(dwPgNum);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -