mirror of
https://github.com/hasherezade/pe-sieve
synced 2026-06-08 14:34:52 +00:00
81 lines
1.9 KiB
C++
81 lines
1.9 KiB
C++
#pragma once
|
|
#include <windows.h>
|
|
|
|
namespace pesieve {
|
|
|
|
namespace util {
|
|
|
|
struct BasicBuffer
|
|
{
|
|
public:
|
|
BasicBuffer()
|
|
: data(nullptr), data_size(0),
|
|
real_start(0), real_end(0), padding(0)
|
|
{
|
|
}
|
|
|
|
bool isFilled()
|
|
{
|
|
if (data) {
|
|
return true; // already filled
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void trim()
|
|
{
|
|
if (!data) return;
|
|
|
|
real_start = 0;
|
|
real_end = 0;
|
|
padding = 0;
|
|
for (size_t i = 0; i < data_size; i++, padding++) {
|
|
if (data[i] != 0) {
|
|
real_start = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (size_t i = data_size; i != 0; i--, padding++) {
|
|
if (data[i - 1] != 0) {
|
|
real_end = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
size_t getDataSize(bool trimmed = false)
|
|
{
|
|
if (!data || !data_size) return 0;
|
|
|
|
if (trimmed && (padding < data_size)) {
|
|
return data_size - padding;
|
|
}
|
|
return data_size;
|
|
}
|
|
|
|
const BYTE* getData(bool trimmed = false)
|
|
{
|
|
if (!data || !data_size) return nullptr;
|
|
|
|
if (trimmed && (padding < data_size)) {
|
|
return (data + real_start);
|
|
}
|
|
return data;
|
|
}
|
|
|
|
BYTE* data;
|
|
|
|
size_t real_start;
|
|
size_t real_end;
|
|
size_t padding;
|
|
|
|
protected:
|
|
size_t data_size;
|
|
};
|
|
|
|
}; // namespace util
|
|
|
|
}; // namespace pesieve
|
|
|