我在使用virtualalloc时有一些奇怪的行为。我在C++,Visual Studio 2010中VirtualAlloc的顺序似乎很重要(C++)
我有两件事情我想分配,和我使用的VirtualAlloc(我有我的理由,无关的问题)
1 - 空间举行的x86汇编代码缓冲
2 - 空间来保存的x86代码要
在我的代码中的数据结构我做:
thread_data_t * p_data = (thread_data_t*)VirtualAlloc(NULL, sizeof(thread_data_t), MEM_COMMIT, PAGE_READWRITE);
//set up all the values in the structure
unsigned char* p_function = (unsigned char*)VirtualAlloc(NULL, sizeof(buffer), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(p_function, buffer, sizeof(buffer));
CreateThread(0, (LPTHREAD_START_ROUTINE)p_function, p_data, 0, NULL);
在调试模式
:做工精细
在RELEASE模式下:启动线程接收一个空作为其输入数据。通过调试进行验证,当我调用createThread时,指针正确
如果我切换VirtualAlloc的周围,以便在数据空间之前分配函数空间,那么DEBUG和RELEASE模式都可以正常工作。
任何想法为什么?我已验证我的所有VS版本设置在DEBUG/RELEASE之间是相同的
顺便说一句我把我的链接换成了更好的参考。旧的链接更多的是关于检测案件而不是解决案件。 – StilesCrisis 2015-01-26 21:27:19
你是否也可以放回你的另一个链接?所以我可以阅读有关检测并解决它?谢谢 ! – 2015-01-26 21:35:26
同样在阅读链接时,我看到“在x86或x64 CPU架构上不需要FlushInstructionCache,因为它们具有透明缓存。” – 2015-01-26 21:36:11