-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathtraceCache.cpp
More file actions
42 lines (35 loc) · 836 Bytes
/
traceCache.cpp
File metadata and controls
42 lines (35 loc) · 836 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "traceCache.h"
#include <cstring>
namespace detect_similar
{
DISASM* TraceCache::getInstruction(int eip, void *addr, int *length)
{
bool stored = m.count(eip) > 0;
TraceDisassembler *d = &(m[eip]);
if (stored && (memcmp(d->buf, addr, (d->len > 0) ? d->len : 10) != 0)) {
extra.push(DISASM());
DISASM *last = &(extra.back());
memset(last, 0, sizeof(DISASM));
last->EIP = (UIntPtr) addr;
int len = Disasm(last);
if (length != NULL)
*length = len;
return last;
}
if (!stored)
{
memset(&(d->disas), 0, sizeof(DISASM));
d->disas.EIP = (UIntPtr) addr;
d->len = Disasm(&(d->disas));
memcpy(d->buf, addr, (d->len > 0) ? d->len : 10);
}
if (length != NULL)
*length = d->len;
return &(d->disas);
}
void TraceCache::clear()
{
m.clear();
extra = queue<DISASM>();
}
} //namespace detect_similar