- 浏览: 257267 次
文章分类
- 全部博客 (395)
- Tech (0)
- [随笔分类]心情 (95)
- [随笔分类]技术 (112)
- [随笔分类]管理心得 (13)
- [随笔分类]Code SOP (5)
- [随笔分类]望图知意 (11)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (8)
- [随笔分类]重构代码 (1)
- [随笔分类]童童 (2)
- Program (1)
- [随笔分类]看你知道不知道 (1)
- [网站分类]4.其他技术区 (31)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (21)
- [网站分类]9.求职招聘区(个人求职、企业招聘) (0)
- [随笔分类]昨日关注 (15)
- [网站分类]6.读书区(技术书籍阅读心得、书籍推荐) (3)
- [随笔分类]一步一个脚印 (2)
- [网站分类]网站管理区(网站管理方面的疑问、建议、意见, 寻求管理员帮助) (1)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (3)
最新评论
在用Project Analyzer 进行一个VB6的Dll工程进行代码分析的时候得到这么一个警告:
Problem description - WFWKernel
Base address unoptimal: WFWKernel
Type Optimization
Severity Warning
Location WFWKernel.vbp
Description
A library project's base address is set to the default value (&H11000000) in project options. When loading the library, the operating system tries to load it at this address. If not possible, it relocates the library. Changing this address to another value will help to reduce the likelihood of relocation, thus making the library load faster. The base address affects ActiveX OCX, ActiveX DLL and .NET Class Library projects. Notice that in .NET projects, different configurations (Debug/Release) can have different base address values. The rule works on the currently selected configuration.
Project Analyzer 7.0.05 (2006-2-13)
这是什么原因呢?什么是Base address unoptimal警告呢?
MSDN解释如下:
为进程内部件设置基地址
在 32 位的操作系统中,只要部件被加载在它的基地址上,使用部件的各个进程就可以共享进程内部件(.dll 或 .ocx 文件)的代码页。这样,可以有三个客户应用程序使用部件中的控件,而代码只需向内存中加载一次。
相反,如果进程内部件使用的内存地址与另一个进程内部件或可执行程序的使用内存地址发生了冲突,部件就必须被重定基址到可执行进程空间的另一个逻辑内存位置。
重定基址需要操作系统动态地重新计算代码和数据加载的逻辑内存位置。这种重新计算会减慢进程的加载,而被动态重定位的代码一般不能被可执行文件共享。
合理选择基地址,可以极大地改善部件对内存的使用。
设置基地址
要输入部件的基地址,打开“工程属性”对话框,然后选择“编译”选项卡。在“DLL 基地址”框中以无符号的十进制或十六进制整数输入地址。
缺省值是 &H11000000 (285,212,672)。如果不改变这个值,部件会与每个使用缺省值编译的进程内部件冲突。建议使用远离这个地址的基地址。
选择基地址
在 16M (16,777,216 或 &H1000000) 字节和 2G (2,147,483,648 或 &H80000000) 字节之间选择基地址。
基地址必须是 64K 的倍数。部件使用的内存从初始基地址开始,大小为编译了的文件大小四舍五入为 64K 的倍数。
程序不能大于 2G,因此,最大的基地址实际上是 2G 字节再减去部件使用的内存大小。
注意 可执行文件一般加载在 4M 字节的逻辑地址处。小于 4M 字节的区域是保留给 Windows 95 的,而 2G 以上的区域是保留给 Windows 95 和 Windows NT 的。
使用良好的随机数生成器
由于无法知道用户使用的其它进程内部件会选择什么基地址,所以,最实用的办法就是在指定范围内随机地选择一个地址,并四舍五入为 64K 的倍数。
如果公司制作了很多进程内部件,为第一个部件随机计算基地址,其它部件的地址远离第一个部件地址。这样,至少一个公司的部件就不会有内存冲突问题了。
呵呵,原来如此,但是有多少人在做DLL的时候处理基地址了呢?还有几个人做代码检查的时候使用P7呢?
发表评论
-
打包应该注意MDAC的安装次序
2005-11-14 16:06 960MDAC得打包通常都是很讨厌得,一直没有太好的办法。以前得解决 ... -
不要忽视细节,由调用一个SqlServer系统存储过程想到的
2005-11-22 13:21 623今天在调用SqlServer中的系统存储过程sp_droplo ... -
小毛病,大问题
2005-11-24 11:19 620今天用户抱怨,为什么数据库中条目的计数越来越大,而且清空数据库 ... -
CMD命令也要用好
2005-11-30 13:30 994以前一些程序需要执行 ... -
一步一个脚印-产品升级随笔(1)-vision
2005-12-18 08:17 679产品的维护和升级总是困扰着我,犯过很多的错误,吃过很多的亏,如 ... -
一步一个脚印-产品升级随笔(4)-波浪
2005-12-30 11:10 697产品的升级不是一次就可以完成的,需求会像洪水一样永远都不会停止 ... -
国民党的800万军队不是一天消灭的
2006-01-09 15:58 618这几天又去了一趟京城,刚刚回到家里,特别的疲惫,昨天美美的在家 ... -
还不如扔掉
2006-01-12 12:42 587周六、周日打算搬回学校的单身宿舍了,把租的房子退掉,但是屋子里 ... -
看你知道不知道之-全局对象
2006-02-10 12:49 652这几天在整理类库,想通过VB6来提供全局函数,将公司常用的函数 ... -
看你知道不知道之-制作数据字典
2006-02-10 17:49 1015这部分内容和VB6的关系不大,但是确是困扰我的一个问题。 这几 ... -
看你知道不知道之-Call转义序列
2006-02-14 13:00 654今天在整理代码的时候,需要修改一个函数,使这个函数可以通过AD ... -
看你知道不知道之-使用SET NOCOUNT优化存储过程
2006-02-15 14:51 767每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信 ... -
看你知道不知道之-你注意Where子句的次序了吗?
2006-02-16 08:12 604这个系列越来越多的是和SQL语句相关的问题了,因为这段时间工作 ... -
看你知道不知道之-用好sp_depends
2006-02-21 12:25 1141前几天检查一个兄弟写的存储过程,我想知道这个存储过程到底涉及到 ... -
今天20,明天21
2006-03-06 15:58 564这几天一直封闭,昨天刚刚放出来,感觉十分的疲惫。在封闭的过程中 ... -
重构代码-随笔(1)
2006-03-09 10:32 576原始代码: If txt ... -
干这行最重要的是要坐住板凳
2006-03-12 20:40 726我们周五的时候刚刚辞退的一个试用期员工,给我在QQ留言,内容大 ... -
看你知道不知道之-别惹我Msgbox的Title
2006-03-13 19:40 606在VB6中,MsgBox是比较讨厌的,我在整理代码的时候,通常 ... -
Windows Server 2003 R2 修复Windows Server 2003
2006-03-19 13:05 1185最近特别喜欢去反波上听平客的段子,有一些也下载到本地了,但是我 ... -
靠左侧通行
2006-03-23 08:15 742从小老师和父母就告诉我,一定要靠人行横道的右侧通行,我也是 ...
相关推荐
当DLL被加载到进程的地址空间时,系统会为它分配一块连续的内存区域,并将其基地址与DLL头文件中的信息关联起来。 接下来,我们要提到的是输出表(Export Table)。这是DLL中用于记录可供其他程序调用的函数和变量...
当一个EXE文件加载到内存时,操作系统会为它分配一块连续的内存区域,这就是进程的基地址。DLL是可被多个进程共享的代码模块,它们也有各自的基地址。 读取EXE基址通常是为了获取程序的关键数据或函数指针。在...
PCHunter的主要功能便是查看这些进程模块,它可以清晰地列出当前系统中所有运行进程的模块信息,包括模块名称、基地址、大小、加载状态等,帮助用户识别是否存在异常的DLL加载。这对于排查潜在的安全风险至关重要,...
一旦知道模块基地址,就可以访问和操作模块内的数据和函数。 3. **子程序_读内存地址**:在Windows中,进程间通信(IPC)或修改其他进程内存状态时,需要读取或写入内存地址。这个子程序提供了读取内存的能力,是...
在给定的代码示例中,主要关注的是`ProcessBasicInformation`类别的信息,这包含了诸如进程状态、PEB基地址、亲和掩码、基本优先级、唯一进程ID等关键数据。 ### 二、`PROCESS_BASIC_INFORMATION`结构体 `PROCESS_...
理解如何解析这些模块信息,包括模块名称、基地址、大小等,可以帮助我们分析进程的行为。 此外,遍历线程时,我们需要使用“获取线程列表”命令。每个线程都有自己的ID和状态,我们可以跟踪它们的执行情况。通过...
2. **基地址**:每个模块在进程的虚拟地址空间中都有一个起始地址,称为基地址。这是模块在内存中的加载位置,对于动态定位和代码执行至关重要。 3. **模块入口点**:这是模块执行的起点,通常在可执行文件中是程序...
你可以打印模块名称,记录其基地址,或者进行其他分析。 4. **关闭进程句柄**:完成枚举后,记得使用`close_handle`关闭进程句柄,释放资源。 在源码中,`[原创]枚举进程模块(例程).e`很可能包含了实现以上步骤的...
这涉及到操作系统内部的进程管理、内存管理和模块加载机制。下面将详细解释这个过程及其相关的知识点。 首先,我们需要了解什么是“进程”。在计算机科学中,进程是操作系统资源分配的基本单位,它代表了一个正在...
3. 模块名:加载到进程中的DLL文件的名称,包括基地址和大小。 4. 加载时间:DLL被加载到进程中的时间戳。 5. 版本信息:DLL的版本号、公司名、产品名等详细信息,有助于识别是否为最新或正确版本。 6. 数字签名:...
通过"进程间谍",用户可以查看每个进程加载的模块列表,包括模块名称、大小、基地址等,这有助于识别潜在的恶意注入或非法模块活动。 3. **线程监控**:线程是进程内的执行单元,每个进程可以包含多个线程。软件...
在Windows中,可以使用`EnumProcessModules`函数来枚举一个进程的所有模块,再通过`GetModuleBaseName`获取模块的基地址和名称。 易语言项目中的源码将展示如何封装这些系统调用,创建易语言的接口供用户使用。通过...
2. **找到DLL在进程中的基地址**:接着,我们需要知道DLL在目标进程中加载的基地址。这可以通过枚举进程的模块列表(使用`EnumProcessModules`和`GetModuleBaseName`函数)来实现。 3. **内嵌汇编实现**:在Delphi...
而逻辑地址空间,也称为虚拟地址空间,是指操作系统为每个运行的进程提供一个看上去是连续的、私有的地址空间。 物理存储器管理涉及如何将物理存储器分配给进程使用,这包括内存的分配和回收。操作系统为有效管理...
这包括每个进程加载的动态链接库、它们的版本信息、依赖关系以及模块在内存中的基地址等。这种信息对于系统管理员来说非常有价值,可以帮助他们识别潜在的安全问题(比如未授权的DLL注入),调试软件错误,或者优化...
2.18 既然数组名可以用作数组的基地址,为什么对结构不能这样? 29 2.19 程序运行正确,但退出时却“core dump ”(核心转储)了,怎么回事? 29 联合 30 2.20 结构和联合有什么区别? 30 2.21 有办法初始化...
学习并理解这个源码,不仅能帮助你掌握易语言的基本编程技巧,还能让你深入理解Windows系统内部的工作原理,特别是进程和模块管理的部分。对于希望从事系统编程或逆向工程的开发者来说,这是一段非常有价值的实践...
- **定义**: 存储段基地址的寄存器。 - **作用**: 用于段式内存管理中。 **55. 进程线程树图** - **定义**: 一种表示进程与线程之间关系的图形。 - **用途**: 展示进程和线程的层次结构。 **56. 作业与进程的区别...
- **ImageBaseAddress**:当前进程的可执行映像基地址。 - **Ldr**:指向PEB_LDR_DATA结构的指针,用于管理加载的DLL列表。 - **ProcessParameters**:指向RTL_USER_PROCESS_PARAMETERS结构的指针,包含进程启动参数...
| 1 | 各种控制位 | 存储保护和控制 | 地址转换表基地址 | | 2 | Cachability的控制位 | 缓存能力的控制 | 保留 | | 3 | 存储保护和控制 | 域访问控制位 | Bufferablity控制位 | | 4 | 存储保护和控制 | 保留 | 保留...