File: DebuggerCore.h

package info (click to toggle)
edb-debugger 1.3.0-2.2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,124 kB
  • sloc: cpp: 46,241; xml: 4,998; ansic: 3,088; sh: 52; asm: 33; makefile: 5
file content (133 lines) | stat: -rw-r--r-- 3,650 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
Copyright (C) 2006 - 2015 Evan Teran
                          evan.teran@gmail.com

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef DEBUGGER_CORE_H_20090529_
#define DEBUGGER_CORE_H_20090529_

#include "DebuggerCoreBase.h"
#include "IRegion.h"
#include "Module.h"
#include <QSet>

namespace DebuggerCorePlugin {

class PlatformProcess;
class PlatformThread;

class DebuggerCore : public DebuggerCoreBase {
	Q_OBJECT
	Q_PLUGIN_METADATA(IID "edb.IDebugger/1.0")
	Q_INTERFACES(IDebugger)
	Q_CLASSINFO("author", "Evan Teran")
	Q_CLASSINFO("url", "http://www.codef00.com")

	friend class PlatformProcess;
	friend class PlatformThread;

public:
	DebuggerCore();
	~DebuggerCore() override;

public:
	bool hasExtension(uint64_t ext) const override;
	size_t pageSize() const override;
	std::size_t pointerSize() const override {
		return sizeof(void *);
	}
	std::shared_ptr<IDebugEvent> waitDebugEvent(std::chrono::milliseconds msecs) override;
	Status attach(edb::pid_t pid) override;
	Status detach() override;
	void kill() override;

	Status open(const QString &path, const QString &cwd, const QList<QByteArray> &args, const QString &input, const QString &output) override;

	MeansOfCapture lastMeansOfCapture() const override {
		qDebug("TODO: Implement DebuggerCore::lastMeansOfCapture");
		return MeansOfCapture::NeverCaptured;
	}

	int sys_pointer_size() const;
	QMap<qlonglong, QString> exceptions() const override;
	QString exceptionName(qlonglong value) override {
		qDebug("TODO: Implement DebuggerCore::exceptionName");
		return "";
	}

	qlonglong exceptionValue(const QString &name) override {
		qDebug("TODO: Implement DebuggerCore::exceptionValue");
		return 0;
	}

public:
	// thread support stuff (optional)
	QList<edb::tid_t> thread_ids() const { return threads_.keys(); }
	edb::tid_t active_thread() const { return activeThread_; }
	void set_active_thread(edb::tid_t tid) {
		Q_ASSERT(threads_.contains(tid));
		activeThread_ = tid;
	}

public:
	// process properties
	edb::pid_t parentPid(edb::pid_t pid) const override;
	uint64_t cpuType() const override;

	CpuMode cpuMode() const override {
		qDebug("TODO: Implement DebuggerCore::cpu_mode");
		return CpuMode::Unknown;
	}

public:
	std::unique_ptr<IState> createState() const override;

private:
	QMap<edb::pid_t, std::shared_ptr<IProcess>> enumerateProcesses() const override;

public:
	QString stackPointer() const override;
	QString framePointer() const override;
	QString instructionPointer() const override;
	QString flagRegister() const override {
		qDebug("TODO: Implement DebuggerCore::flag_register");
		return "";
	}

	void setIgnoredExceptions(const QList<qlonglong> &exceptions) override {
		Q_UNUSED(exceptions)
		qDebug("TODO: Implement DebuggerCore::set_ignored_exceptions");
	}

public:
	uint8_t nopFillByte() const override;

public:
	IProcess *process() const override;

private:
	using threadmap_t = QHash<edb::tid_t, std::shared_ptr<PlatformThread>>;

private:
	size_t pageSize_ = 0;
	std::shared_ptr<IProcess> process_;
	threadmap_t threads_;
	edb::tid_t activeThread_;
};

}

#endif