52 lines
910 B
C
Raw Permalink Normal View History

2024-09-09 21:09:37 +06:00
#pragma once
#include <cstddef>
2024-09-09 21:09:37 +06:00
#include <vector>
2024-12-13 18:31:55 +03:00
#ifdef _DEBUG
2024-09-11 08:58:50 +06:00
#define DEBUG(X) X
#else
#define DEBUG(X)
#endif
2024-09-09 22:52:34 +06:00
struct Function
2024-09-09 21:09:37 +06:00
{
2024-09-09 22:52:34 +06:00
struct Block
2024-09-09 21:09:37 +06:00
{
2024-09-09 22:52:34 +06:00
size_t base{};
size_t size{};
2024-12-13 18:31:55 +03:00
size_t projectedSize{ static_cast<size_t>(-1) }; // scratch
2024-09-11 08:58:50 +06:00
DEBUG(size_t parent{});
2024-09-09 22:52:34 +06:00
2024-12-13 18:31:55 +03:00
Block()
{
}
Block(size_t base, size_t size)
: base(base), size(size)
{
}
Block(size_t base, size_t size, size_t projectedSize)
: base(base), size(size), projectedSize(projectedSize)
{
}
2024-09-09 21:09:37 +06:00
};
size_t base{};
size_t size{};
2024-09-09 22:52:34 +06:00
std::vector<Block> blocks{};
2024-12-13 18:31:55 +03:00
Function()
{
}
Function(size_t base, size_t size)
: base(base), size(size)
{
}
2024-09-11 08:58:50 +06:00
2024-09-09 21:09:37 +06:00
size_t SearchBlock(size_t address) const;
2024-09-09 22:52:34 +06:00
static Function Analyze(const void* code, size_t size, size_t base);
2024-09-09 21:09:37 +06:00
};