Real Zibux Ответов: 2

Преобразуйте этот код C++ в c.


Преобразуйте этот код c++ в c.


bool inline DataCompare(const BYTE* pbData, const BYTE* pbMask, const char* pszMask)
{
	for (; *pszMask; ++pszMask, ++pbData, ++pbMask)
	{
		if (*pszMask == 'c' && *pbData != *pbMask)
		{	
			return false;
		}	
	}
	return (*pszMask == NULL);
}




DWORD inline FindPattern(DWORD dwStart, DWORD dwSize, const BYTE* szSig, const char* szMask)
{	
	PBYTE data = new BYTE[dwSize];
	unsigned long bytesRead;
	if (!ReadProcessMemory(process, (LPVOID)dwStart, data, dwSize, &bytesRead))
	{	
		delete[] data;
		data = nullptr;	
		return NULL;
	}
	for (DWORD i = 0; i < dwSize; i++)
	{
		if (DataCompare((const BYTE*)(data + i), szSig, szMask))
		{		
			delete[] data;
			data = nullptr;
			return dwStart + i;	
		}
	
	}
	delete[] data;
	data = nullptr;	
	return NULL;
}


Если вы можете помочь, я буду вам очень признателен.

Что я уже пробовал:

Попробовал код, получил несколько ошибок. Ссылка [^]

jeron1

Уже выглядит довольно c-like, помимо операторов new и delete, возможно, посмотрите здесь для выделения и освобождения памяти массива c-использование динамического выделения памяти для массивов[^]

2 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Итак, у вас есть ошибки - ищите их в интернете, и вы пойдете...
1. new/delete-это новые вещи для C++, и вы должны использовать malloc/free вместо min C
2. ключевое слово nullptr также не существует в C, но вы можете создать определение с этим именем, чтобы решить эту проблему...


CPallini

5.

Kornfeld Eliyahu Peter

Спасибо...

Рейтинг:
1

CPallini

Как было предложено Питер, заменять new с malloc и delete с free, кроме того, используйте NULL вместо nullptr.

Цитата:
Pbyte data = новый байт[dwSize];
становится
PBYTE data = (PBYTE) malloc(dwSize);


в то время как последовательность
Цитата:
удалить данные;
data = nullptr;
становится
free(data);
data = NULL;