LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
CorePrStatus.hpp
Go to the documentation of this file.
1/* Copyright 2017 - 2025 R. Thomas
2 * Copyright 2017 - 2025 Quarkslab
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#ifndef LIEF_ELF_CORE_PRSTATUS_H
17#define LIEF_ELF_CORE_PRSTATUS_H
18
19#include <vector>
20#include <ostream>
21#include <utility>
22
23#include "LIEF/visibility.h"
24#include "LIEF/ELF/enums.hpp"
25#include "LIEF/ELF/Note.hpp"
26
27namespace LIEF {
28namespace ELF {
29
30class Parser;
31class Builder;
32class Binary;
33
35class LIEF_API CorePrStatus : public Note {
36 public:
37 struct siginfo_t {
38 int32_t signo = 0;
39 int32_t code = 0;
40 int32_t err = 0;
41 };
42
43 struct timeval_t {
44 uint64_t sec = 0;
45 uint64_t usec = 0;
46 };
47
48 struct pr_status_t {
50
51 uint16_t cursig = 0;
52 uint16_t reserved = 0;
53
54 uint64_t sigpend = 0;
55 uint64_t sighold = 0;
56
57 int32_t pid = 0;
58 int32_t ppid = 0;
59 int32_t pgrp = 0;
60 int32_t sid = 0;
61
66 };
67
68 struct Registers {
70 enum class X86 {
71 EBX = 0, ECX, EDX, ESI, EDI, EBP, EAX,
74 };
75
77 enum class X86_64 {
78 R15 = 0, R14, R13, R12, RBP, RBX, R11, R10,
82 };
83
85 enum class ARM {
86 R0 = 0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15,
89 };
90
92 enum class AARCH64 {
93 X0 = 0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15,
97 };
98 };
99
100 public:
101 CorePrStatus(ARCH arch, Header::CLASS cls, std::string name,
102 uint32_t type, description_t description) :
103 Note(std::move(name), TYPE::CORE_PRSTATUS, type, std::move(description), ""),
104 arch_(arch), class_(cls)
105 {}
106
107 std::unique_ptr<Note> clone() const override {
108 return std::unique_ptr<CorePrStatus>(new CorePrStatus(*this));
109 }
110
114
116 return arch_;
117 }
118
121
124
128
137
138 ok_error_t set(Registers::X86 reg, uint64_t value);
139 ok_error_t set(Registers::X86_64 reg, uint64_t value);
140 ok_error_t set(Registers::ARM reg, uint64_t value);
141 ok_error_t set(Registers::AARCH64 reg, uint64_t value);
142
155 std::vector<uint64_t> register_values() const;
156
158 return get(reg);
159 }
160
162 return get(reg);
163 }
164
166 return get(reg);
167 }
168
170 return get(reg);
171 }
172
173 void dump(std::ostream& os) const override;
174 void accept(Visitor& visitor) const override;
175
176 static bool classof(const Note* note) {
177 return note->type() == Note::TYPE::CORE_PRSTATUS;
178 }
179
180 ~CorePrStatus() override = default;
181
182 LIEF_API friend
183 std::ostream& operator<<(std::ostream& os, const CorePrStatus& note) {
184 note.dump(os);
185 return os;
186 }
187
188 private:
189 ARCH arch_ = ARCH::NONE;
191};
192
197
198} // namepsace ELF
199} // namespace LIEF
200
201#endif
Class which represents an ELF binary.
Definition ELF/Binary.hpp:59
Class which takes an ELF::Binary object and reconstructs a valid binary.
Definition ELF/Builder.hpp:48
ok_error_t set(Registers::AARCH64 reg, uint64_t value)
result< uint64_t > get(Registers::X86 reg) const
Get the value for the given X86 register or return an error.
result< uint64_t > operator[](Registers::ARM reg) const
Definition CorePrStatus.hpp:165
ok_error_t set(Registers::X86 reg, uint64_t value)
void dump(std::ostream &os) const override
pr_status_t status() const
Return the pr_status_t structure.
void status(const pr_status_t &status)
~CorePrStatus() override=default
friend std::ostream & operator<<(std::ostream &os, const CorePrStatus &note)
Definition CorePrStatus.hpp:183
ok_error_t set(Registers::X86_64 reg, uint64_t value)
ok_error_t set(Registers::ARM reg, uint64_t value)
std::unique_ptr< Note > clone() const override
Clone the current note and keep its polymorphic type.
Definition CorePrStatus.hpp:107
void accept(Visitor &visitor) const override
result< uint64_t > get(Registers::X86_64 reg) const
Get the value for the given X86_64 register or return an error.
result< uint64_t > get(Registers::AARCH64 reg) const
Get the value for the given AARCH64 register or return an error.
static bool classof(const Note *note)
Definition CorePrStatus.hpp:176
CorePrStatus(ARCH arch, Header::CLASS cls, std::string name, uint32_t type, description_t description)
Definition CorePrStatus.hpp:101
result< uint64_t > operator[](Registers::X86 reg) const
Definition CorePrStatus.hpp:157
result< uint64_t > get(Registers::ARM reg) const
Get the value for the given ARM register or return an error.
std::vector< uint64_t > register_values() const
A list of the register values. This list is guarantee to be as long as the Registers::ARM::_COUNT or ...
result< uint64_t > return_value() const
The value of the register that holds the return value according to the calling convention.
result< uint64_t > operator[](Registers::AARCH64 reg) const
Definition CorePrStatus.hpp:169
result< uint64_t > operator[](Registers::X86_64 reg) const
Definition CorePrStatus.hpp:161
result< uint64_t > sp() const
The stack pointer or an error if not found.
result< uint64_t > pc() const
The program counter or an error if not found.
ARCH architecture() const
Definition CorePrStatus.hpp:115
CLASS
Match the result of Elfxx_Ehdr.e_ident[EI_CLASS].
Definition ELF/Header.hpp:73
@ NONE
Definition ELF/Header.hpp:74
std::vector< uint8_t > description_t
Container used to handle the description data.
Definition Note.hpp:46
TYPE
LIEF representation of the ELF NT_ values.
Definition Note.hpp:49
@ CORE_PRSTATUS
Coredump that wraps the elf_prstatus structure.
Definition Note.hpp:72
TYPE type() const
Return the type of the note. This type does not match the NT_ type value. For accessing the original ...
Definition Note.hpp:195
const std::string & name() const
Return the name of the note (also known as 'owner' ).
Definition Note.hpp:184
Note(const Note &copy)=default
span< const uint8_t > description() const
Return the description associated with the note.
Definition Note.hpp:206
Class which parses and transforms an ELF file into a ELF::Binary object.
Definition ELF/Parser.hpp:45
Definition Visitor.hpp:210
Namespace related to the LIEF's ELF module.
Definition Abstract/Header.hpp:28
const char * to_string(DynamicEntry::TAG e)
ARCH
Definition ELF/enums.hpp:30
@ NONE
Definition ELF/enums.hpp:31
LIEF namespace.
Definition Abstract/Binary.hpp:40
result< ok_t > ok_error_t
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:109
tl::expected< T, lief_errors > result
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:75
Definition CorePrStatus.hpp:68
ARM
Register for the ARM architecture (ARCH::ARM).
Definition CorePrStatus.hpp:85
@ R0
Definition CorePrStatus.hpp:86
@ CPSR
Definition CorePrStatus.hpp:87
@ R3
Definition CorePrStatus.hpp:86
@ R4
Definition CorePrStatus.hpp:86
@ R2
Definition CorePrStatus.hpp:86
@ R7
Definition CorePrStatus.hpp:86
@ R1
Definition CorePrStatus.hpp:86
@ R5
Definition CorePrStatus.hpp:86
@ R6
Definition CorePrStatus.hpp:86
X86_64
Register for the x86-64 architecture (ARCH::X86_64).
Definition CorePrStatus.hpp:77
@ R14
Definition CorePrStatus.hpp:78
@ R12
Definition CorePrStatus.hpp:78
@ RBP
Definition CorePrStatus.hpp:78
@ R15
Definition CorePrStatus.hpp:78
@ R10
Definition CorePrStatus.hpp:78
@ RSP
Definition CorePrStatus.hpp:80
@ RDX
Definition CorePrStatus.hpp:79
@ R13
Definition CorePrStatus.hpp:78
@ RCX
Definition CorePrStatus.hpp:79
@ ORIG_RAX
Definition CorePrStatus.hpp:79
@ RSI
Definition CorePrStatus.hpp:79
@ RBX
Definition CorePrStatus.hpp:78
@ R11
Definition CorePrStatus.hpp:78
@ R9
Definition CorePrStatus.hpp:79
@ RAX
Definition CorePrStatus.hpp:79
@ RDI
Definition CorePrStatus.hpp:79
@ RIP
Definition CorePrStatus.hpp:80
@ R8
Definition CorePrStatus.hpp:79
AARCH64
Register for the AARCH64 architecture (ARCH::AARCH64).
Definition CorePrStatus.hpp:92
@ X3
Definition CorePrStatus.hpp:93
@ X19
Definition CorePrStatus.hpp:94
@ X21
Definition CorePrStatus.hpp:94
@ X23
Definition CorePrStatus.hpp:94
@ X22
Definition CorePrStatus.hpp:94
@ X5
Definition CorePrStatus.hpp:93
@ X2
Definition CorePrStatus.hpp:93
@ X18
Definition CorePrStatus.hpp:94
@ X27
Definition CorePrStatus.hpp:94
@ X29
Definition CorePrStatus.hpp:94
@ X14
Definition CorePrStatus.hpp:93
@ X15
Definition CorePrStatus.hpp:93
@ PSTATE
Definition CorePrStatus.hpp:95
@ X24
Definition CorePrStatus.hpp:94
@ X9
Definition CorePrStatus.hpp:93
@ X4
Definition CorePrStatus.hpp:93
@ X20
Definition CorePrStatus.hpp:94
@ X16
Definition CorePrStatus.hpp:94
@ PC
Definition CorePrStatus.hpp:95
@ X12
Definition CorePrStatus.hpp:93
@ X13
Definition CorePrStatus.hpp:93
@ X10
Definition CorePrStatus.hpp:93
@ X26
Definition CorePrStatus.hpp:94
@ X8
Definition CorePrStatus.hpp:93
@ X25
Definition CorePrStatus.hpp:94
@ X0
Definition CorePrStatus.hpp:93
@ X7
Definition CorePrStatus.hpp:93
@ X1
Definition CorePrStatus.hpp:93
@ X31
Definition CorePrStatus.hpp:95
@ X30
Definition CorePrStatus.hpp:94
@ X11
Definition CorePrStatus.hpp:93
@ X6
Definition CorePrStatus.hpp:93
@ X17
Definition CorePrStatus.hpp:94
@ X28
Definition CorePrStatus.hpp:94
X86
Register for the x86 architecture (ARCH::I386).
Definition CorePrStatus.hpp:70
@ ES
Definition CorePrStatus.hpp:72
@ EDX
Definition CorePrStatus.hpp:71
@ EFLAGS
Definition CorePrStatus.hpp:72
@ ESP
Definition CorePrStatus.hpp:72
@ DS
Definition CorePrStatus.hpp:72
@ FS
Definition CorePrStatus.hpp:72
@ EDI
Definition CorePrStatus.hpp:71
@ EBP
Definition CorePrStatus.hpp:71
@ GS
Definition CorePrStatus.hpp:72
@ EBX
Definition CorePrStatus.hpp:71
@ ORIG_EAX
Definition CorePrStatus.hpp:72
@ CS
Definition CorePrStatus.hpp:72
@ EIP
Definition CorePrStatus.hpp:72
@ SS
Definition CorePrStatus.hpp:72
@ ESI
Definition CorePrStatus.hpp:71
@ EAX
Definition CorePrStatus.hpp:71
@ _COUNT
Definition CorePrStatus.hpp:73
@ ECX
Definition CorePrStatus.hpp:71
Definition CorePrStatus.hpp:48
uint16_t cursig
Definition CorePrStatus.hpp:51
siginfo_t info
Definition CorePrStatus.hpp:49
timeval_t cstime
Definition CorePrStatus.hpp:65
int32_t ppid
Definition CorePrStatus.hpp:58
uint16_t reserved
Definition CorePrStatus.hpp:52
uint64_t sighold
Definition CorePrStatus.hpp:55
int32_t pid
Definition CorePrStatus.hpp:57
timeval_t stime
Definition CorePrStatus.hpp:63
uint64_t sigpend
Definition CorePrStatus.hpp:54
int32_t sid
Definition CorePrStatus.hpp:60
timeval_t utime
Definition CorePrStatus.hpp:62
timeval_t cutime
Definition CorePrStatus.hpp:64
int32_t pgrp
Definition CorePrStatus.hpp:59
Definition CorePrStatus.hpp:37
int32_t code
Definition CorePrStatus.hpp:39
int32_t signo
Definition CorePrStatus.hpp:38
int32_t err
Definition CorePrStatus.hpp:40
Definition CorePrStatus.hpp:43
uint64_t sec
Definition CorePrStatus.hpp:44
uint64_t usec
Definition CorePrStatus.hpp:45
#define LIEF_API
Definition visibility.h:41