mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 14:16:09 -06:00
70 lines
1.2 KiB
C++
70 lines
1.2 KiB
C++
#include "Debuggers.h"
|
|
|
|
#ifdef COMPILER_MSC
|
|
|
|
#define LLOG(x) // LOG(x)
|
|
|
|
int Pdb::Byte(adr_t addr)
|
|
{
|
|
int page = (int) (addr >> 10);
|
|
if(invalidpage.Find(page) >= 0)
|
|
return -1;
|
|
int pos = (int) (addr & 1023);
|
|
int q = mempage.Find(page);
|
|
if(q >= 0)
|
|
return (byte)mempage[q].data[pos];
|
|
if(mempage.GetCount() > 1024)
|
|
mempage.Clear();
|
|
byte data[1024];
|
|
if(ReadProcessMemory(hProcess, (LPCVOID) (addr & ~1023), data, 1024, NULL)) {
|
|
memcpy(mempage.Add(page).data, data, 1024);
|
|
return (byte)data[pos];
|
|
}
|
|
LLOG("ReadProcessMemory: " << GetLastErrorMessage());
|
|
invalidpage.Add(page);
|
|
return -1;
|
|
}
|
|
|
|
bool Pdb::Copy(adr_t addr, void *ptr, int count)
|
|
{
|
|
byte *s = (byte *)ptr;
|
|
while(count--) {
|
|
int q = Byte(addr++);
|
|
if(q < 0)
|
|
return false;
|
|
*s++ = (byte)q;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
String Pdb::ReadString(adr_t addr, int maxlen)
|
|
{
|
|
String r;
|
|
while(r.GetLength() < maxlen) {
|
|
int q = Byte(addr++);
|
|
if(q <= 0)
|
|
break;
|
|
r.Cat(q);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
WString Pdb::ReadWString(adr_t addr, int maxlen)
|
|
{
|
|
WString r;
|
|
while(r.GetLength() < maxlen) {
|
|
int q = Byte(addr++);
|
|
if(q < 0)
|
|
break;
|
|
int w = Byte(addr++);
|
|
if(w < 0)
|
|
break;
|
|
w = MAKEWORD(q, w);
|
|
if(w == 0)
|
|
break;
|
|
r.Cat(w);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
#endif
|