更重要的...
编译器选择
在windows系统级编程中,当MinGW编译时,这些关键的系统调用会通过MinGW的包装层:
// MinGW内部可能的实现过程
VirtualAlloc -> _mingw_VirtualAlloc -> ntdll!NtAllocateVirtualMemory
这导致: 内存分配可能不符合Windows PE加载要求 页面权限设置可能不完全正确 系统调用的参数传递可能有偏差
更严重的问题 - 加载器本身的内存布局也会因为不是标准windows编译器而改变
如果一定要用MinGW编译PE加载器,需要:
避免使用MinGW的API包装层
直接使用系统调用或ntdll函数
确保内存对齐和保护属性正确
手动实现某些Windows内部功能
- 避免使用MinGW的API包装层
- 直接使用系统调用或ntdll函数
- 确保内存对齐和保护属性正确
- 手动实现某些Windows内部功能
但说实话,这样做:
开发难度大大增加
可能引入新的兼容性问题
维护成本很高
- 开发难度大大增加
- 可能引入新的兼容性问题
- 维护成本很高
所以最终建议还是:
使用MSVC编译PE加载器
或者使用更底层的方法(如直接系统调用)
如果一定要用MinGW,需要重写大量底层代码
- 使用MSVC编译PE加载器
- 或者使用更底层的方法(如直接系统调用)
- 如果一定要用MinGW,需要重写大量底层代码