Don't load self-capturing module, only use if already present

This commit is contained in:
baldurk
2019-12-12 11:31:36 +00:00
parent c7d0d9dad8
commit 20abaec49f
4 changed files with 17 additions and 0 deletions
+1
View File
@@ -74,6 +74,7 @@ ExecuteResult LaunchAndInjectIntoProcess(const char *app, const char *workingDir
const rdcarray<EnvironmentModification> &env,
const char *capturefile, const CaptureOptions &opts,
bool waitForExit);
bool IsModuleLoaded(const char *module);
void *LoadModule(const char *module);
void *GetFunctionAddress(void *module, const char *function);
uint32_t GetCurrentPID();
+5
View File
@@ -855,6 +855,11 @@ void Process::StopGlobalHook()
{
}
bool Process::IsModuleLoaded(const char *module)
{
return dlopen(module, RTLD_NOW | RTLD_NOLOAD) != NULL;
}
void *Process::LoadModule(const char *module)
{
return dlopen(module, RTLD_NOW);
+5
View File
@@ -1656,6 +1656,11 @@ void Process::StopGlobalHook()
globalHook = NULL;
}
bool Process::IsModuleLoaded(const char *module)
{
return GetModuleHandleA(module) != NULL;
}
void *Process::LoadModule(const char *module)
{
HMODULE mod = GetModuleHandleA(module);
+6
View File
@@ -486,6 +486,9 @@ RENDERDOC_BecomeRemoteServer(const char *listenhost, RENDERDOC_KillCallback kill
extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartSelfHostCapture(const char *dllname)
{
if(!Process::IsModuleLoaded(dllname))
return;
void *module = Process::LoadModule(dllname);
if(module == NULL)
@@ -509,6 +512,9 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartSelfHostCapture(const
extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_EndSelfHostCapture(const char *dllname)
{
if(!Process::IsModuleLoaded(dllname))
return;
void *module = Process::LoadModule(dllname);
if(module == NULL)