Some tips from Inject Lib sample application
1. 有时候我们书写的工具函数会有ANSI和UNICODE两个版本分别与相应ANSI或者UNICODE版本的Windows API配合使用。这种不同的编码版本其实是对于函数的"字符串参数"的编码方式来区分。在Windows2000以上的版本中系统都是使用UNICODE来处理的,所以我们通常是在ANSI版本的函数里面将"字符串参数"转换成UNICODE然后调用UNICODE版本就行了(模仿Windows的做法)。而且在UNICODE版本里面调用函数的时候并不需要显式调用UNICODE的Windows API,因为编译器会自动根据是否有UNICODE定义来选择Windows API函数的版本的。
注意:如果我们使用GetProcAddress API,我们应该总是使用特定的ANSI或者UNICODE版本,因为这两个是真正存在于系统DLL中的API函数。(所以这种情况也通常需要我们的函数分成两个版本来实现)
2. 在调用VirtualAllocEx和malloc等函数来分配字符串空间的时候,都应该分配字符串长度加1(可能加2,若为UNICODE),这个多出来的字符是为'0'(L'0')准备的。
3. VirtualQuery调用的结果如果State为MEM_FREE,则MEMORY_BASIC_INFORMATION.AllocationBase将会是0,这点要特别注意,最好使用
if(mbi.State==MEM_FREE)
{
mbi.AllocationBase=mbi.BaseAddress;
}
来进行改变。
我们还可以通过mbi.AllocationBase是否等于mbi.BaseAddress来判断当前查询的地址是否在这个Region中的第一个Block中。
4. Tips from Image Walker dll:
因为一个Module的Handle其实就是这个模块的首地址,所以我们可以通过将一个模块的首地址强转成HINSTANCE类型然后传递给GetModuleFileName来获取此模块所对应的文件路径。
若传入的地址并不是一个模块的首地址,这个函数并不会失败,而只是返回的植为0。
转载于:https://www.cnblogs.com/jeffreytan/archive/2005/02/19/105931.html
Some tips from Inject Lib sample application相关推荐
- Building Seam 2.0 Application with NetBeans 6.1
Building Seam 2.0 Application with NetBeans 6.1 转载请保留作者信息: Author: 88250 Blog: http:/blog.csdn.net/D ...
- Externalizing Session State for a Spring Boot Application Using Spring-Session
为什么80%的码农都做不了架构师?>>> Spring-session is a very cool new project that aims to provide a si ...
- ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
今天看了Scott关于ASP.NET Core的介绍视频,发现用命令行一步一步新建项目.添加Package.Restore.Build.Run 执行的实现方式,更让容易让我们了解.NET Core的运 ...
- Z-Stack Home Developer's Guide—3. The Home Automation Profile and the Sample Applications中文翻译
下面是Z-Stack Home 1.2.0开发资料中的Z-Stack Home Developer's Guide-3. The Home Automation Profile and the Sam ...
- Z-Stack Home Developer's Guide—4.Using the sample applications as base for new applications 中文翻译
本章节是官方提供的文档说明 如何将样例程序改为我们自己需要开发的程序,下面是中文翻译 4.使用样例程序为基础开发一个新的应用程序 HA样例程序旨在用作用户开的应用程序的基础,修改他们需要遵循如下步骤: ...
- 如何运行android sdk sample中的单元测试
引用于:http://www.51testing.com/?17144/viewspace-197415.html (转自http://www.williamhua.com/2009/05/07/us ...
- 为WebSphere Application Server开发企业OSGi应用程序
与软件开发相关的绝大多数成本与新应用程序的初始设计,开发和测试无关-尽管这些成本可能很高-但与此后应用程序的维护和发展无关. 通过仅通过定义明确的接口访问的一致,版本化,可重用的模块设计和构建应用程序 ...
- Exploring Heap-Based Buffer Overflows with the Application Verifier
转自:http://blogs.cisco.com/security/exploring_heap-based_buffer_overflows_with_the_application_verifi ...
- Sending e-mail with Spring MVC--转载
原文地址:http://www.codejava.net/frameworks/spring/sending-e-mail-with-spring-mvc Table of contents: 1.S ...
- MFC90条技巧-带目录
1."属性页的添加: 2."List Control中标题栏(Column)的添加: 3."ToolBar和StatusBar中控件的添加: 4."通过Cont ...
最新文章
- 【译】缓存最佳实践 max-age的陷阱
- FireDac 的数据库批量语句提交(高效)
- Opengl-模型(告别箱子加载模型)
- [JSOI2008]火星人
- 广播变量kyro_Spark简介
- 2022年4月8日体检
- 统信uos系统考试题_148款!富士通及旗下晟拓品牌系列打印机适配统信UOS
- codeforce 606A - Magic Spheres
- 【PAT - 甲级1009】Product of Polynomials (25分)(模拟,细节)
- 第五章 基元类型,引用类型和值类型
- centos 6.3最小化安装,无法上网解决方法
- [Docker] 03 AUFS
- 对于Keli-μVision,Error:Could not load file“*.axf” Debugger aborted!解决方案
- 数据治理:数据血缘关系分析
- 微信小程序开发入门教程 含视频 有源码
- python 白噪声函数_干货 | 20个教程,掌握时间序列的特征分析(附代码)
- 打印机软件未通过电脑测试,打印机测试错误 原因administrator解决办法
- 关于LCR表和万用表测电容容值不一样的怪事
- AD软件解决 Unknown Pin 和Failed to add class member 问题
- MATLAB图像处理_YUV格式详解