I32S Tcc353xGetRegFifoAStatus(Tcc353xHandle_t * _handle, I08U * _data)
{
	I08U tmp = 0x10;
	WriteProcess (_handle, TC3XREG_OBUFF_INIT, &tmp, 1, _LOCK_);
	ReadProcess
		(_handle, TC3XREG_OBUFF_A_FIFO_STAT0, 1, &_data[0], _LOCK_);
	return (ReadProcess
		(_handle, TC3XREG_OBUFF_A_FIFO_STAT1, 1, &_data[1], _LOCK_));
}
I32S Tcc353xGetRegMailboxFifoWindow(Tcc353xHandle_t * _handle,
				    I08U * _data, I32S _size)
{
	return (ReadProcess
		(_handle, TC3XREG_MAIL_FIFO_WIND | Bit7, _size, _data,
		 _LOCK_));
}
I32S Tcc353xGetRegDataWindow(Tcc353xHandle_t * _handle, I08U * _data,
			     I32S _size, I08U _unlock)
{
	return (ReadProcess
		(_handle, TC3XREG_CMDDMA_DATA_WIND | Bit7, _size, _data,
		 _unlock));
}
I32S Tcc353xGetRegStreamData(Tcc353xHandle_t * _handle, I08U * _data,
			     I32S _size)
{
	return (ReadProcess
		(_handle, TC3XREG_STREAM_CFG4 | Bit7, _size, _data,
		 _LOCK_));
}
I32S Tcc353xGetRegOPStatus(Tcc353xHandle_t * _handle, I08U * _data, 
			   I32U _dataSize, I08U _unlock)
{
	I08U tmp = 1;
	WriteProcess (_handle, TC3XREG_OP_STATUS0, &tmp, 1, _unlock);
	return (ReadProcess
		(_handle, TC3XREG_OP_STATUS1| Bit7, _dataSize, _data, _unlock));
}
I32S Tcc353xGetRegOpDebug(Tcc353xHandle_t * _handle, I08U * _data,
			  I08U _unlock)
{
	I08U tmp = 0x5e;
	WriteProcess(_handle, TC3XREG_OP_DEBUG0, &tmp, 1, _unlock);
	return (ReadProcess
		(_handle, TC3XREG_OP_DEBUG0, 3, _data, _unlock));
}
I32S Tcc353xGetRegMailboxFifoReadStatus(Tcc353xHandle_t * _handle,
					I08U * _data)
{
	I08U latchData = 0x5E;
	WriteProcess(_handle, TC3XREG_MAIL_FIFO_R, &latchData, 1, _LOCK_);
	return (ReadProcess
		(_handle, TC3XREG_MAIL_FIFO_R, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegManual(Tcc353xHandle_t * _handle, I08U _addr, I32S _size,
			 I08U * _data)
{
	if (_addr == TC3XREG_STREAM_CFG2 || _addr == TC3XREG_STREAM_CFG1) {
		I08U latch = 0x20;
		if (_handle->options.useInterrupt)
			latch = 0x21;
		else
			latch = 0x20;
		WriteProcess(_handle, TC3XREG_STREAM_CFG3, &latch, 1,
			     _LOCK_);
	}
	return (ReadProcess(_handle, _addr, _size, _data, _LOCK_));
}
Esempio n. 9
0
bool CMemoryPatcher::ReplaceByte (DWORD pid, void * addr, BYTE origvalue, BYTE newvalue)
{
    BYTE buf[1];

    if ( ReadProcess (pid, addr, buf, 1) != 1 )
        return false;

    if ( buf[0] != origvalue )
    {
        Error ("ReplaceByte: wrong original byte: %02X (%02X expected)", buf[0], origvalue);
        return false;
    }

    buf[0] = newvalue;
    return (WriteProcess (pid, addr, buf, 1) == 1 ? true : false);
}
int main()
{
	int fd[2];
	pid_t pid;

	if (pipe(fd)  < 0)		// check pipe
	{
		fprintf(stderr, "Create Pipe Error %s\n", strerror(errno));	
		exit(EXIT_FAILURE);
	}
	
	if( (pid = fork()) < 0)	// check fork 
	{
		fprintf(stderr, " Fork Error : %s \n",strerror(errno) );
		exit(EXIT_FAILURE);
	}
				
	if(pid == 0)		//child interprocess 1  ==> Write
	{
		WriteProcess(fd);
	}
	else			//father interprocess 
	{
				//create a new child interprocess: read 50
		if((pid = fork()) < 0) 
		{
			fprintf(stderr, " Fork Error : %s \n",strerror(errno) );
			exit(EXIT_FAILURE);
		}
		if(pid == 0)	// child interprocess 2 => Read
		{
			ReadProcess(fd);
		}
		else		//father interprocess
		{
			wait(0);
			wait(0);
			printf("-------------End of Program-----------\n");
			return 0;
		}

	}

}
I32S Tcc353xGetRegIrqError(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess(_handle, TC3XREG_IRQ_ERROR, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegProgramId(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess(_handle, TC3XREG_PROGRAMID, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegIrqStatus(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess(_handle, TC3XREG_IRQ_STAT_CLR, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegMiscData(Tcc353xHandle_t * _handle, I08U * _data,
			   I08U _unlock)
{
	return (ReadProcess
		(_handle, TC3XREG_MISC_CFG3, 4, _data, _unlock));
}
I32S Tcc353xGetRegChipId(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess(_handle, TC3XREG_CHIPID, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegGpioLR(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess(_handle, TC3XREG_GPIO_LR, 1, _data, _LOCK_));
}
I32S Tcc353xGetRegDmaCrc32(Tcc353xHandle_t * _handle, I08U * _data)
{
	return (ReadProcess
		(_handle, TC3XREG_CMDDMA_CRC24, 4, _data, _LOCK_));
}
Esempio n. 18
0
bool CMemoryPatcher::FindImportTable (MODULEENTRY32 * modentry, DWORD funcaddr, DWORD * start, DWORD * end)
{
    MODULEENTRY32       modfind;
    IMAGE_DATA_DIRECTORY imptable;

    *start = 0;
    *end = 0;

    DWORD search_addr = (DWORD) modentry->modBaseAddr;
    DWORD search_size = modentry->modBaseSize;
    DWORD import_start = 0, import_end = 0;

    FindPeDirectory (modentry, IMAGE_DIRECTORY_ENTRY_IAT, &imptable);

    if ( imptable.Size )
    {
        import_start = (DWORD) modentry->modBaseAddr + imptable.VirtualAddress;
        import_end = import_start + imptable.Size;
    }

    while ( search_size > 0 )
    {
        // Try to found the import address
        DWORD pattern = FindPattern (modentry->th32ProcessID, (BYTE *) &funcaddr, sizeof(DWORD), search_addr, search_size);

        // No pattern at all
        if ( !pattern )
        {
            Error ("Address is not found in module address space");
            return false;
        }

        // Does the address belong to the original import table?
        if ( import_start
        && pattern >= import_start
        && pattern < import_end )
        {
            // Skip it
            search_size = pattern + 4 - search_addr;
            search_addr = pattern + 4;
            continue;
        }

        // Scan down while the address belongs to a loaded module
        DWORD * iatptr, iataddr;

        for ( iatptr = (DWORD *) pattern; ReadProcess (modentry->th32ProcessID, iatptr, (BYTE*) &iataddr, sizeof(iataddr)); iatptr-- )
        {
            if ( !iataddr )
                continue;

            if ( !FindModule (GetCurrentProcessId(), iataddr, &modfind) )
                break;

            *start = (DWORD) iatptr;
        }

        for ( iatptr = (DWORD *) pattern; ReadProcess (modentry->th32ProcessID, iatptr, (BYTE*) &iataddr, sizeof(iataddr)); iatptr++ )
        {
            if ( !iataddr )
                continue;

            if ( !FindModule (GetCurrentProcessId(), iataddr, &modfind) )
                break;

            *end = (DWORD) iatptr;
        }
        
        return true;
    }

    return false;
}