mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-29 16:41:27 +00:00
Implement basic DidAttach and DidLaunch for DynamicLoaderWindowsDYLD.
Summary: This commit implements basic DidAttach and DidLaunch for the windows DynamicLoader plugin which allow us to load shared libraries from the inferior. At the moment, I'm unsure how we're going to gather the load address of the main module over gdb protocol so I always use an offset of 0, which works well for processes we create ourselves (no randomization). I will address this point later on. Reviewers: clayborg, zturner Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D12245 llvm-svn: 245725
This commit is contained in:
parent
75296901f7
commit
705ffc1794
@ -9,6 +9,7 @@
|
||||
|
||||
#include "DynamicLoaderWindowsDYLD.h"
|
||||
|
||||
#include "lldb/Core/Log.h"
|
||||
#include "lldb/Core/PluginManager.h"
|
||||
#include "lldb/Target/Process.h"
|
||||
#include "lldb/Target/Target.h"
|
||||
@ -72,11 +73,38 @@ DynamicLoaderWindowsDYLD::CreateInstance(Process *process, bool force)
|
||||
void
|
||||
DynamicLoaderWindowsDYLD::DidAttach()
|
||||
{
|
||||
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
|
||||
if (log)
|
||||
log->Printf("DynamicLoaderWindowsDYLD::%s()", __FUNCTION__);
|
||||
|
||||
DidLaunch();
|
||||
|
||||
m_process->LoadModules();
|
||||
}
|
||||
|
||||
void
|
||||
DynamicLoaderWindowsDYLD::DidLaunch()
|
||||
{
|
||||
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
|
||||
if (log)
|
||||
log->Printf("DynamicLoaderWindowsDYLD::%s()", __FUNCTION__);
|
||||
|
||||
ModuleSP executable = GetTargetExecutable();
|
||||
|
||||
if (!executable.get())
|
||||
return;
|
||||
|
||||
ModuleList module_list;
|
||||
module_list.Append(executable);
|
||||
// FIXME: We probably should not always use 0 as the load address
|
||||
// here. Testing showed that when debugging a process that we start
|
||||
// ourselves, there's no randomization of the load address of the
|
||||
// main module, therefore an offset of 0 will be valid.
|
||||
// If we attach to an already running process, this is probably
|
||||
// going to be wrong and we'll have to get the load address somehow.
|
||||
UpdateLoadedSections(executable, LLDB_INVALID_ADDRESS, 0);
|
||||
|
||||
m_process->GetTarget().ModulesDidLoad(module_list);
|
||||
}
|
||||
|
||||
Error
|
||||
|
Loading…
Reference in New Issue
Block a user