学习袁老大的<<Windows图形编程>>,此记之。
1.1 Windows C/C++编程基础
...
两个"const TCHAR" 数组定义确保这些常量字符串最终被编译链接到二进制代码的只读数据区中。
如果你调用ShellExecute时直接用_T("print") 这样的字符串,在最终的二进制代码中它还是在可读写数据区。
放置常量到只读数据区可以确保它们真的是只读的,尝试去改写它会引发通用保护错误。
同时如果有多个同样模块的实例被系统加载时,它们可以被不同实例共享,以减少物理内存的使用。
...
1.4 Win32 可执行文件格式
在Win7 64位下,导出表的例子程序有两处需要修改。
首先,SetExportAddress 中,判断ord范围不超过最大值时要减去pExport->Base;
其次,HackWriteProcessMemory中修改页面属性要用PAGE_EXECUTE_READWRITE;
否则执行到wsprintf会出错(c0000005);跟踪发现在mov edi, edi 就错了,是因为上面修改了页面属性无法继续执行