//Find pattern for offsets based on signature and mask DWORD MemoryManager::FindPattern(DWORD start, DWORD size, const char* sig, const char* mask) { BYTE* data = new BYTE[size]; unsigned long bytesRead; if (!ReadProcessMemory(hProcess, (LPVOID)start, data, size, &bytesRead)) { delete[] sig; delete[] data; return NULL; } for (DWORD i = 0; i < size; i++) { if (DataCompare((const BYTE*)(data + i), (const BYTE*)sig, mask)) { delete[] sig; delete[] data; return start + i; } } delete[] sig; delete[] data; return NULL; }
unsigned long utils::FindPattern(unsigned long address, unsigned long size, const char* pattern) { for (unsigned long i = 0; i < size; ++i, ++address) if (DataCompare((const char*)address, pattern)) return address; return NULL; }
void I2CMasterTest(I2C_TypeDef *I2Cx) { unsigned int i,j; I2CInitMasterMode(I2Cx,8000000L,100000L); //I2C1InitMasterMode(30000000L,100000L); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*0, 16, tx_buffer0 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*0, 16, rx_buffer0 ); DataCompare(tx_buffer0, rx_buffer0,16); /* I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*1, 16, tx_buffer1 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*2, 16, tx_buffer2 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*2, 16, rx_buffer0 ); DataCompare(tx_buffer2, rx_buffer0,16); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*3, 16, tx_buffer3 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*4, 16, tx_buffer0 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*5, 16, tx_buffer1 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*3, 16, rx_buffer0 ); DataCompare(tx_buffer3, rx_buffer0,16); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*6, 16, tx_buffer2 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*7, 16, tx_buffer3 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*8, 16, tx_buffer0 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*6, 16, rx_buffer0 ); DataCompare(tx_buffer2, rx_buffer0,16); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*9, 16, tx_buffer1 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*10, 16, tx_buffer2 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*11, 16, tx_buffer3 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*9, 16, rx_buffer0 ); DataCompare(tx_buffer1, rx_buffer0,16); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*12, 16, tx_buffer0 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*13, 16, tx_buffer1 ); I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*14, 16, tx_buffer2 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*13, 16, rx_buffer0 ); DataCompare(tx_buffer1, rx_buffer0,16); uart_printf("I2Cx rush test\r\n"); j = 0; for(i=0;i<64;i++) { I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, j, 16, tx_buffer2 ); I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, j, 16, rx_buffer0 ); DataCompare(tx_buffer2, rx_buffer0,16); j = j + 16; } */ //I2C1Close(); uart_printf("I2Cx test over\r\n"); }
// Finds a pattern at the specified address DWORD Disasm::FindPattern ( DWORD dwAddress, DWORD dwSize, BYTE* pbMask, char* szMask ) { for( DWORD i = NULL; i < dwSize; i++ ) { if( DataCompare( (BYTE*) ( dwAddress + i ), pbMask, szMask ) ) return (DWORD)( dwAddress + i ); } return 0; }
void* TickSet::FindPattern(const void* start, size_t length, const unsigned char* pattern, const char* mask) { auto maskLength = strlen(mask); for (size_t i = 0; i <= length - maskLength; ++i) { auto addr = reinterpret_cast<const unsigned char*>(start)+i; if (DataCompare(addr, pattern, mask)) return const_cast<void*>(reinterpret_cast<const void*>(addr)); } return nullptr; }
DWORD FindPattern(DWORD StartAddress, DWORD CodeLen, BYTE* Mask, char* StrMask, unsigned short ignore) { unsigned short Ign = 0; DWORD i = 0; while (Ign <= ignore) { if(DataCompare((BYTE*)(StartAddress + i++), Mask, StrMask)) ++Ign; else if (i>=CodeLen) return 0; } return StartAddress + i - 1; }
/// <summary> /// Finds the pattern. /// </summary> /// <param name="dwAddress">The dw address.</param> /// <param name="dwLen">Length of the dw.</param> /// <param name="offset">The offset.</param> /// <param name="deref">if set to <c>true</c> [deref].</param> /// <param name="bMask">The b mask.</param> /// <param name="szMask">The sz mask.</param> /// <returns></returns> DWORD_PTR FindPattern(DWORD_PTR dwAddress, DWORD_PTR dwLen, DWORD_PTR offset, bool deref, BYTE *bMask, char * szMask) { for (DWORD_PTR i = 0; i < dwLen; i++) { if (DataCompare((BYTE*)(dwAddress + i), bMask, szMask)) { if (deref) { DWORD_PTR dwOut; memcpy(&dwOut, *(void**)(dwAddress + i + offset), 4); return dwOut; } return (DWORD_PTR)(dwAddress + i + offset); } } return 0; }