存放在VirtualAllocEx分配的空间中的代码,执行出错
在对Windows Service服务做一次C++封装,使用Thunk的方式。
用VirtualAllocEx分配PAGE_EXECUTE_READWRITE属性的空间,在其中存放两部分ASM代码,
一份是注册给StartServiceCtrlDispatcher的代码,一份是注册给RegisterServiceCtrlHandler的代码。
服务启动后,注册给StartServiceCtrlDispatcher的ASM能正常的被执行到,并跳转的我希望的函数中;
但注册给RegisterServiceCtrlHandler的AMS没有被执行到,而且执行“sc stop”服务无法正常被关闭。
debug信息里有看到:
(sechost.dll) (Service.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x0000000000000038 时发生访问冲突。
做了一个尝试,把我用C写的,可以正确执行的,注册给RegisterServiceCtrlHandler的函数,直接复制到VirtualAllocEx分配的空间中去,也是会出现上面的问题。
请问,这里有什么限制吗?还是需要注意什么?大家给我一点意见,谢谢~