/
githubmirror
/
x64dbg
Обзор
Документация
Войти
/
githubmirror
/
x64dbg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
development
src/gui/Src/Utils/EncodeMap.cpp
88 строк
2 KB
Duncan Ogilvie
Fix EncodeMap buffer management and delRange
30 май 2026, 03:00
30 май 2026, 03:00
edfd86f
Код
Авторство
О чём код?
#include "EncodeMap.h" #include "Bridge.h" EncodeMap::EncodeMap(QObject* parent) : QObject(parent), mBase(0), mSize(0), mBuffer(nullptr), mBufferSize(0) { } EncodeMap::~EncodeMap() { if(mBuffer) DbgReleaseEncodeTypeBuffer(mBuffer); } void EncodeMap::setMemoryRegion(duint addr) { duint size = 0; auto base = DbgMemFindBaseAddr(addr, &size); if(mBuffer) { DbgReleaseEncodeTypeBuffer(mBuffer); mBuffer = nullptr; } mBase = base; mSize = size; mBufferSize = 0; if(!mBase) return; mBuffer = (uint8_t*)DbgGetEncodeTypeBuffer(addr, &mBufferSize); } void EncodeMap::setDataType(duint va, ENCODETYPE type) { setDataType(va, getEncodeTypeSize(type), type); } void EncodeMap::setDataType(duint va, duint size, ENCODETYPE type) { DbgSetEncodeType(va, size, type); if(!mBuffer && va >= mBase && va < mBase + mSize) setMemoryRegion(va); } void EncodeMap::delRange(duint start, duint size) { if(size) DbgDelEncodeTypeRange(start, start + size - 1); } void EncodeMap::delSegment(duint va) { DbgDelEncodeTypeSegment(va); if(mBuffer && va >= mBase && va < mBase + mSize) { DbgReleaseEncodeTypeBuffer(mBuffer); mBuffer = nullptr; mBufferSize = 0; } } ENCODETYPE EncodeMap::getDataType(duint addr) { if(!mBuffer || !inBufferRange(addr)) return enc_unknown; return ENCODETYPE(mBuffer[addr - mBase]); } duint EncodeMap::getDataSize(duint addr, duint codesize) { if(!mBuffer || !inBufferRange(addr)) return codesize; auto type = ENCODETYPE(mBuffer[addr - mBase]); auto datasize = getEncodeTypeSize(type); if(isCode(type)) return codesize; else return datasize; }