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_)); }
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_)); }
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; }