2012-05-21 04:12:37 -07:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
2009-11-19 05:01:01 -08:00
|
|
|
#include <stdio.h>
|
2009-11-19 05:04:44 -08:00
|
|
|
#include <windows.h>
|
2009-11-19 05:01:01 -08:00
|
|
|
|
|
|
|
// make sure we only ever spawn one thread
|
|
|
|
DWORD tid = -1;
|
|
|
|
|
|
|
|
DWORD WINAPI CrashingThread(
|
|
|
|
LPVOID lpParameter
|
|
|
|
)
|
|
|
|
{
|
|
|
|
// not a very friendly DLL
|
|
|
|
volatile int* x = (int *)0x0;
|
|
|
|
*x = 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI DllMain(
|
|
|
|
HANDLE hinstDLL,
|
|
|
|
DWORD dwReason,
|
|
|
|
LPVOID lpvReserved
|
|
|
|
)
|
|
|
|
{
|
|
|
|
if (tid == -1)
|
|
|
|
// we have to crash on another thread because LoadLibrary() will
|
|
|
|
// catch memory access errors and return failure to the calling process
|
|
|
|
CreateThread(
|
2013-11-11 11:13:38 -08:00
|
|
|
nullptr, // default security attributes
|
2009-11-19 05:01:01 -08:00
|
|
|
0, // use default stack size
|
2013-11-11 11:13:38 -08:00
|
|
|
CrashingThread, // thread function name
|
|
|
|
nullptr, // argument to thread function
|
2009-11-19 05:01:01 -08:00
|
|
|
0, // use default creation flags
|
|
|
|
&tid); // returns the thread identifier
|
|
|
|
return TRUE;
|
|
|
|
}
|