//================================================================================================= axChar axDataBufferReader::ReadChar() { axCharA cFormat = ReadCharA(); #ifdef AX_UNICODE axAssert(cFormat == 'W', axL("Failed to read data buffer, wrong character format.")); return ReadCharW(); #else axAssert(cFormat == 'A', axL("Failed to read data buffer, wrong character format.")); return ReadCharA(); #endif // AX_UNICODE }
WCHAR * ReadRemoteSZ(HANDLE process, LPVOID address, WORD unicode) { if (NULL == address) return NULL; WCHAR * msg = 0 ; if ( unicode ) { WCHAR * ptr = (WCHAR*)address; size_t stringLen = 0; while(ReadCharW(process, ptr++)) stringLen++; msg = new WCHAR[stringLen+1]; if (!msg) return NULL; memset(msg, 0, sizeof(WCHAR)*(stringLen+1)); ReadProcessMemory(process, address ,msg, (stringLen+1)*sizeof(WCHAR),NULL); return msg; } else { CHAR * ptr = (CHAR*)address; size_t stringLen = 0; while(ReadCharA(process, ptr++)) stringLen++; BYTE * originalMsg = new BYTE[stringLen+1]; if (!originalMsg) return NULL; memset(originalMsg, 0, sizeof(BYTE)*(stringLen+1)); msg = new WCHAR[stringLen]; if (!msg) { delete[] originalMsg; return NULL; } memset(msg, 0, sizeof(WCHAR)*(stringLen+1)); ReadProcessMemory(process, address ,originalMsg, stringLen+1,NULL); for (size_t i = 1; i < stringLen+1; i++) { msg[i] = originalMsg[i]; } delete[] originalMsg; return msg; } }