⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dumppmm.c

📁 这是个重量级的东西
💻 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 + -