内存管理——线性内存,进程空间

news/2024/7/10 21:51:10 标签: windows, 开源

低2G为进程空间

开始地址结束地址大小属性
00xFFFFF1M保留
0x1000000x102FFF不固定位置、大小
0x1030000x143FFF不固定位置、大小
0x400000主程序文件不固定位置、大小
加载dll不固定位置、大小
0x7ffdd000TIB位置,大小编译时固定
0x7FFFE000系统与用户共享数据块位置,大小编译时固定
0x7FFFF0000x7FFFFFFF4K进程空间管理列表位置,大小编译时固定

 

一个新进程创建后,第一个执行函数为proc_startup,该函数过程如下

1、初始化进程空间管理器,该数据放在0x7FFFF000固定位置

2、建立堆,全局变量,放在系统栈中,

3、建立文件列表,全局变量,

4、加载主文件

5、根据主文件加载DLL

6、转换用户态

//此函数在进程空间中运行,在整个进程生存期都不会退出,
//无法调用独属于进程的全局变量。
void proc_startup()
{
	//以下变量为一个进程的全局变量,保存在系统栈中
	PThread_Stack_Data ptsd=(PThread_Stack_Data)(lpCurrentThread->initialStack-MAIN_STRCK_PARAM);
	//进入该函数,进程空间已经切换
	//初始化进程空间管理器
	mem_user_virtual_init((PMEMORY_BASIC_INFORMATION)(MBI_USER_BASE));
	 //建立 堆;
	ptsd->heap=mem_heap_create((PMEMORY_BASIC_INFORMATION)(MBI_USER_BASE),2,0x4000,0x4000);
	ptsd =(PThread_Stack_Data)(lpCurrentThread->initialStack-MAIN_STRCK_PARAM);

	ptsd->lpFilseList=(LPLISTS)mem_heap_alloc(ptsd->heap,0,sizeof(LISTS));
	list_init(ptsd->lpFilseList);
	FATFS fs;
	f_mount (&fs,	"0:",	0	);
	//1、将文件加载,
	PXosHandel xh=  krLoadLibrary(getCurrentProcess()->filepath);

	//初始化进程空间,
	//线性空间为私有
	DWORD pfile=xh->addr;
	PIMAGE_NT_HEADERS pnh=(PIMAGE_NT_HEADERS)(((PIMAGE_DOS_HEADER)pfile)->e_lfanew+pfile);
	//load_file(ptsd->heap,ptsd->lpFilseList,getCurrentProcess()->filepath)
	asm("call %0": :"r"(pnh->OptionalHeader.AddressOfEntryPoint+pfile));
	//2、call main
	while (1)
	{
		print_farmat_msg("m");
	}
}
HANDLE get_main_heap()
{

	return ((PThread_Stack_Data)(lpCurrentThread->initialStack-MAIN_STRCK_PARAM))->heap;
}
LPLISTS get_main_file_list()
{
	return ((PThread_Stack_Data)(lpCurrentThread->initialStack-MAIN_STRCK_PARAM))->lpFilseList;
}


http://www.niftyadmin.cn/n/5386247.html

相关文章

集合可视化:rainbow box与欧拉图

论文:A new diagram for amino acids: User study comparing rainbow boxes to Venn/Euler diagram 最近偶然看到了这篇论文,觉得很有意思,针对的任务是集合数据的可视化。 我们用示例来说明,比如图二的欧拉图,展示的…

0221 解决万得导出数据excel无法python读入的问题

报错如下&#xff1a; TypeError: <class openpyxl.styles.named_styles._NamedCellStyle>.name should be <class str> but value is <class NoneType> 原因分析&#xff1a; 万得导出的xlsx带有某些格式&#xff0c;比如首行加粗&#xff0c;excel桌面端工…

问题:Spark SQL 读不到 Flink 写入 Hudi 表的新数据,打开新 Session 才可见

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

SQL Server查询计划(Query Plan)——XML查询计划

​​​​​​6.4.3. XML查询计划 SQL Server中,除了通过GUI工具和相关命令获取图形及文本查询计划外,我们还可以通过相关命令获取XML格式的查询计划,这里惯称其为XML查询计划。 SQL Server 2005版本引入了XML查询计划的新特性,其充分吸收了图形及文本查询计划的优势所在,…

[django] django好玩的地方在于,可以批量操作数据库了

django好玩的地方在于&#xff0c;可以批量操作数据库了。 和数据库快速交互&#xff0c;真的是好厉害。 这种情况怎么过滤 objects.filter project models.ForeignKey(to“Project”, verbose_name‘项目’, on_deletemodels.CASCADE, max_length50, nullFalse, help_text‘…

Spring Boot中的@Scheduled注解:定时任务的原理与实现

1. 前言 本文将详细探讨Spring Boot中Scheduled注解的使用&#xff0c;包括其原理、实现流程、步骤和代码示例。通过本文&#xff0c;读者将能够了解如何在Spring Boot应用中轻松创建和管理定时任务。 2. Scheduled注解简介 在Spring框架中&#xff0c;Scheduled注解用于标记…

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

oppo手机如何录屏?解锁录屏新功能!

“最近换了一款oppo手机&#xff0c;感觉它的拍照功能真的很强大。但除此之外&#xff0c;我发现oppo还有许多隐藏功能&#xff0c;比如录屏。但我尝试了很久&#xff0c;都没找到录屏的开关在哪里。有没有哪位oppo用户知道怎么打开这个功能呢&#xff1f;” 随着科技的不断发…