示例#1
0
文件: symbol.c 项目: ohio813/tracer
static symbol *create_symbol (symbol_type t, char *n)
{
    symbol *rt=DCALLOC (symbol, 1, "symbol");
    rt->t=t;
    rt->skip_on_tracing=Fuzzy_Undefined;
    rt->name=DSTRDUP(n, "name");
    return rt;
};
示例#2
0
MemoryCache* MC_MemoryCache_ctor(HANDLE PHDL, bool dont_read_from_quicksilver_places)
{
	MemoryCache* rt=DCALLOC(MemoryCache, 1, "MemoryCache");
	rt->PHDL=PHDL;
	rt->_cache=rbtree_create(true, "MemoryCache._cache", compare_size_t);
	rt->dont_read_from_quicksilver_places=dont_read_from_quicksilver_places;
	return rt;
};
示例#3
0
文件: BPM.c 项目: ohio813/tracer
BPM *create_BPM(unsigned width, enum BPM_type t)
{
    BPM *rt=DCALLOC (BPM, 1, "BPM");

    rt->width=width;
    rt->t=t;

    return rt;
};
示例#4
0
MemoryCache* MC_MemoryCache_ctor_testing(BYTE *testing_memory, SIZE_T testing_memory_size)
{
	oassert ((testing_memory_size & (PAGE_SIZE-1))==0);
	MemoryCache* rt=DCALLOC(MemoryCache, 1, "MemoryCache");
	rt->_cache=rbtree_create(true, "MemoryCache._cache", compare_size_t);
	rt->testing=true;
	rt->testing_memory=testing_memory;
	rt->testing_memory_size=testing_memory_size;
	return rt;
};
示例#5
0
bool MC_LoadPageForAddress (MemoryCache *mc, address adr)
{
	address idx, rd_adr;
	SIZE_T bytes_read;
	MemoryCacheElement *t=NULL;

#ifndef _WIN64
	// as of win32
#define _ADR_SKIP 0x7FFE0000
	if (mc->dont_read_from_quicksilver_places && (adr>=_ADR_SKIP && adr<(_ADR_SKIP+PAGE_SIZE)))
	{
		// нужно всегда обламывать чтение этих мест - там, например, текущее системное время, 
		// от этого тестирование эмулятора CPU рандомно глючит, долго я искал эту багу :(

		// с другой стороны, эмулятор CPU вполне может нормально работать, хоть и с небольшими 
		// отклонениями по системному времени
		//L (2, __FUNCTION__ "(0x" PRI_ADR_HEX "): wouldn't read process memory\n");
		return false;
	};
#endif

	idx=adr>>LOG2_PAGE_SIZE;
	rd_adr=idx<<LOG2_PAGE_SIZE;
	t=DCALLOC(MemoryCacheElement, 1, "MemoryCacheElement");

#ifdef BOLT_DEBUG
	if (mc->testing)
	{
		if (rd_adr+PAGE_SIZE > mc->testing_memory_size)
			goto free_t_and_return_false;

		memcpy (t->block, mc->testing_memory+rd_adr, PAGE_SIZE);
		bytes_read=PAGE_SIZE;
	};
#endif

#ifdef BOLT_DEBUG
	if (mc->testing==false)
#endif
		if (ReadProcessMemory (mc->PHDL, (LPCVOID)rd_adr, t->block, PAGE_SIZE, &bytes_read)==false)
			goto free_t_and_return_false;

	oassert (bytes_read==PAGE_SIZE);
	rbtree_insert(mc->_cache, (void*)idx, t);
	return true;

free_t_and_return_false:
	DFREE(t);
	return false;
};
示例#6
0
文件: thread.c 项目: ohio813/tracer
void add_thread (process *p, DWORD TID, HANDLE THDL, address start, address TIB)
{
    thread *t=DCALLOC (thread, 1, "thread");

    if (thread_c_debug)
        L ("%s() begin\n", __func__);

    t->TID=TID;
    t->THDL=THDL;
    t->TIB=TIB;
    t->start=start;
    oassert (rbtree_lookup(p->threads, (void*)TID)==NULL && "this TID is already in table");
    rbtree_insert (p->threads, (void*)TID, t);
    
    if (thread_c_debug)
        L ("%s() end\n", __func__);
};
示例#7
0
MemoryCache* MC_MemoryCache_copy_ctor (MemoryCache *mc)
{
	MemoryCache* rt;

	//L (2, __FUNCTION__"(): begin\n");

	rt=DCALLOC(MemoryCache, 1, "MemoryCache"); 
	rt->PHDL=mc->PHDL;
	rt->dont_read_from_quicksilver_places=mc->dont_read_from_quicksilver_places;
	rt->_cache=rbtree_create(true, "MemoryCache._cache", compare_size_t);
	rbtree_copy (mc->_cache, rt->_cache, key_copier, value_copier);

#ifdef BOLT_DEBUG
	rt->testing=mc->testing;
	rt->testing_memory=mc->testing_memory;
	rt->testing_memory_size=mc->testing_memory_size;
#endif
	return rt;
};
示例#8
0
allocate_buffer P1(int, size)
{
    buffer_t *buf;

#ifndef DISALLOW_BUFFER_TYPE
    if ((size < 0) || (size > max_buffer_size)) {
	error("Illegal buffer size.\n");
    }
    if (size == 0) {
	return null_buffer();
    }
    /* using calloc() so that memory will be zero'd out when allocated */
    buf = (buffer_t *) DCALLOC(sizeof(buffer_t) + size - 1, 1,
				    TAG_BUFFER, "allocate_buffer");
    buf->size = size;
    buf->ref = 1;
    return buf;
#else
    return NULL;
#endif
}