1

virtualalloc を使用すると、奇妙な動作が発生します。私はC ++、Visual Studio 2010を使用しています。

割り当てたいものが2つあり、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);

DEBUG モード:
RELEASE モードで正常に動作: スピンアップしたスレッドは、入力データとして null を受け取ります。createThread を呼び出したときにポインターが正しいことをデバッグで確認しました

VirtualAlloc を切り替えて、データ領域の前に関数領域を割り当てると、DEBUG モードと RELEASE モードの両方が正常に機能します。

理由はありますか?すべての VS ビルド設定が DEBUG/RELEASE 間で同じであることを確認しました

4

1 に答える 1