Some tips from Inject Lib sample application
2005-02-19 10:46
543 查看
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。
注意:如果我们使用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。
相关文章推荐
- some tips from baidu
- some tips from baidu——2
- some tips learn from work experience
- 标签 -- Some Cool Tips for .NET (From CodeProject)
- Some Digest From MDX Solution
- VS运行出现This application is currently offline. To enable the application, remove the app_offline.htm file from the application roo
- How To: Remove Orphaned Web Application Pool Objects from Central Admin
- Talking from BeanFactory to ApplicationContext
- iOS9 This application is modifying the autolayout engine from a background thread, which
- Some Best Practices for Silverlight Application Development (XAML)
- The difference between java application library and java web lib
- Zend Server提示Error: Could not locate a free PHP process from the "application/x-httpd-php" pool within the 'Connection Timeout'.
- Some Tips on Reading Research Papers
- Simple ASP.NET 2.0 Tips and Tricks that You May (or may not) have Heard About [from internet]
- Some handy dialog box tricks, tips and workarounds
- some hopefully useful tips in Aj…
- some tips
- Some MATLAB tips (三)
- Tree View works through VWD but not via local host or from a remote browser. /Server Error in '/' Application.
- (转)Some awareness before migrating from x86 to x64