1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-22 15:19:29 +08:00
Files
Alas/blcrack/cracker/Dobby/source/MemoryAllocator/CodeBuffer/CodeBufferBase.cc

54 lines
1.3 KiB
C++
Raw Normal View History

2025-11-01 00:23:46 +08:00
#include "MemoryAllocator/CodeBuffer/CodeBufferBase.h"
CodeBufferBase *CodeBufferBase::Copy() {
CodeBufferBase *result = new CodeBufferBase();
result->EmitBuffer(GetBuffer(), GetBufferSize());
return result;
}
void CodeBufferBase::Emit8(uint8_t data) {
Emit(data);
}
void CodeBufferBase::Emit16(uint16_t data) {
Emit(data);
}
void CodeBufferBase::Emit32(uint32_t data) {
Emit(data);
}
void CodeBufferBase::Emit64(uint64_t data) {
Emit(data);
}
void CodeBufferBase::EmitBuffer(uint8_t *buffer, int buffer_size) {
buffer_.insert(buffer_.end(), buffer, buffer + buffer_size);
}
uint8_t *CodeBufferBase::GetBuffer() {
return buffer_.data();
}
size_t CodeBufferBase::GetBufferSize() {
return buffer_.size();
}
#if 0 // Template Advanced won't enable even in userspace
template <typename T> T CodeBufferBase::Load(int offset) {
return *reinterpret_cast<T *>(buffer + offset);
}
template <typename T> void CodeBufferBase::Store(int offset, T value) {
*reinterpret_cast<T *>(buffer + offset) = value;
}
template <typename T> void CodeBufferBase::Emit(T value) {
// Ensure the free space enough for the template T value
ensureCapacity(sizeof(T) + GetBufferSize());
*reinterpret_cast<T *>(buffer_cursor) = value;
buffer_cursor += sizeof(T);
}
#endif