xp下用户程序空间分配(6):加载用户DLL

在本项目里使用了自行编译的一个DLL—cywin.dll,这个DLL占用的内存块出奇的多:

同样把文件里的内容dump出来进行比较。

时间: 2024-08-03 12:46:44

xp下用户程序空间分配(6):加载用户DLL的相关文章

xp下用户程序空间分配(5):加载系统DLL

ntdll.dll是加载的第一个系统DLL,它的模块信息: 名称 基址 大小 入口点 E:\WINDOWS\system32\ntdll.dll 7c920000 00093000 7c932c28 对应的内存块: 和exe略微有所区别,还是用dumpbin把它的文件内容导出来进行比较. 1.1 文件头 DLL和EXE文 件一样都是PE格式,因此它们的文件头的结构是一样的,看看从ntdll.dll中dump出来的信息: 14C machine (x86) 4 number of sections

xp下用户程序空间分配(3):加载文件

一个程序要想执行,总是要加载到内存里面的,为此我们使用下面的代码查询所有模块的信息,再找 到它们在内存里面的对应位置: HANDLE hProcess; HMODULE hModule[0x70]; TCHAR strFileName [MAX_PATH]; DWORD cbNeeded; MODULEINFO modinfo; hProcess = GetCurrentProcess(); if(EnumProcessModules(hProcess, hModule, sizeof(HMOD

xp下用户程序空间分配(4):加载主程序

这个是主程序,它的模块信息: 名称 基址 大小 入口点 f:\embed\etools\Debug\bin\bash.exe 00400000 0006f000 0045bb30 对应的内存块: 这些块的类型都是MEM_IMAGE,且分配时的保护标志都是PAGE_EXECUTE_WRITECOPY,MSDN这样解释这 个标志位: Enables execute, read, and write access to the committed region of image file code p

xp下用户程序空间分配(9):还剩下什么?

在去除前面的部分后,看看内存里还剩下什么: 基址 分配基址 分配保护 大小 状态 保护 类型 00010000 00010000 00000004 PAGE_READWRITE 00002000 00001000 MEM_COMMIT 00000004 PAGE_READWRITE 00020000 MEM_PRIVATE 7ffdd000 7ffdd000 00000004 PAGE_READWRITE 00001000 00001000 MEM_COMMIT 00000004 PAGE_RE

xp下用户程序空间分配(2):栈

每个线程都有自己的栈空间,这个空间大小是在CreateThread时指定的,而主线程的栈则是由xp在创 建进程时指定的,在vs2008下设置一个断点,中断程序的执行,可以看到主线程ESP的值为0x00124914, 这个指针落在下面这个区域: 这块空间的上限是0x0013 0000,这个值与我们读出来的NT_TIB结构体里面的StackBase的值是一致的 ,也就是说主线程的栈空间从0x0013 0000开始往下增长.但是在NT_TIB里面的StackLimit值却只有 0x00000 a000

xp下用户程序空间分配(1):大致框架

<windows核心编程>告诉我们,对于每个应用程序的4G虚拟空间可以分为4个大块: 0x0000 0000 ~ 0x0000 ffff:空指针赋值分区 0x0001 0000 ~ 0x7ffe ffff:用户模式分区 0x7fff 0000 ~ 0x7fff ffff:64K禁入分区 0x8000 0000 ~ 0xffff ffff:内核模式分区 但是再要具体点就需要自己研究了. 咱就来看看一个应用程序是怎么使用这4G的空间的 .先写段代码查询一下这4G空间中内存块的大致分类: SYSTE

xp下用户程序空间分配(8):MEM_MAPPED

在去除前面的那些东西之后,我们的内存块里面还有一堆MEM_MAPPED的内容,就像这样的块: MSDN里面这样解释MEM_MAPPED这种类型: Indicates that the memory pages within the region are mapped into the view of a section. 很自然地我们想用GetMappedFileName来看看映射到这些 内存区域的文件名,于是发现了下面几个块的确是做了文件映射: 那么其它东西是哪里来的? 使用GetLastEr

xp下用户程序空间分配(7):Heap

我们都知道在程序里可以使用malloc在堆上分配内存,显然windows应该为这个Heap分配一块空间的 ,我们在主程序里用malloc分配一小块内存,看看指针指向哪里: char* p = (char*)malloc (10); 得到一个指针:0x00b267b0 在内存块里面找,很容易就发现了目标: 从这里可以发现malloc采用的算法并不会在一开始就分配一块很大的内存,如果我们接着用: p = (char*)malloc(0x10000); 分配一块64K的内存,这时可以发现又多了一块内存

动态加载用户控件的组件!(二)

动态|加载|控件 上一篇文章写到了动态加载用户组件的组件. 但是怎样灵活的在项目中运用呢?怎样做到面向组件的开发呢?就像是积木式开发,我们的叶面可以有不同的组件来完成,而整个叶面就是一个容器,我们只不过是往容器里添加不同的元素而已,因此只要我们的元素能够做到通用,一般化,那么元素积累到了一定的程度,元素足够的丰富就可以经而一举构造出我们想要得叶面. 更多地运用到下一篇文章再详细到来.下面我们先来看看怎么样加载组合我们的用户组件: 1.让我们来先做两个元素,这里我就把用户组件ascx的文件称之为元