mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
LibDebug: Add ProcessInspector base class
ProcessInspector is an abstract base class for an object that can inspect the address space of a process. Concrete sub classes need to implement methods for peeking & poking memory and walking the loaded libraries. It is currently only implemented by DebugSession.
This commit is contained in:
parent
38ddf301f6
commit
7950f5cb51
7 changed files with 173 additions and 118 deletions
37
Userland/Libraries/LibDebug/ProcessInspector.h
Normal file
37
Userland/Libraries/LibDebug/ProcessInspector.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Itamar S. <itamar8910@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "LoadedLibrary.h"
|
||||
#include <AK/Types.h>
|
||||
#include <LibC/sys/arch/i386/regs.h>
|
||||
|
||||
namespace Debug {
|
||||
|
||||
class ProcessInspector {
|
||||
public:
|
||||
virtual ~ProcessInspector() { }
|
||||
virtual bool poke(void* address, FlatPtr data) = 0;
|
||||
virtual Optional<FlatPtr> peek(void* address) const = 0;
|
||||
virtual PtraceRegisters get_registers() const = 0;
|
||||
virtual void set_registers(PtraceRegisters const&) = 0;
|
||||
virtual void for_each_loaded_library(Function<IterationDecision(LoadedLibrary const&)>) const = 0;
|
||||
|
||||
const LoadedLibrary* library_at(FlatPtr address) const;
|
||||
struct SymbolicationResult {
|
||||
String library_name;
|
||||
String symbol;
|
||||
};
|
||||
Optional<SymbolicationResult> symbolicate(FlatPtr address) const;
|
||||
Optional<DebugInfo::SourcePositionAndAddress> get_address_from_source_position(String const& file, size_t line) const;
|
||||
Optional<DebugInfo::SourcePosition> get_source_position(FlatPtr address) const;
|
||||
|
||||
protected:
|
||||
ProcessInspector() = default;
|
||||
};
|
||||
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue