Как я могу преобразовать символ в строку C++ (чтение памяти)
я пытаюсь прочитать строку из фиктивной программы, которую я сделал, используя драйвер ядра для связи с моим приложением usermode. я сделал его таким
void* response // чтобы прочитать ответ или отправить его моему водителю, чтобы он его прочитал
поэтому я использую шаблон для чтения памяти его это
template <typename T> T read(UINT_PTR ProcessId, UINT_PTR ReadAddress,SIZE_T Size) { if (hDriver == INVALID_HANDLE_VALUE) return (T)false; DWORD Return, Bytes; KERNEL_READ_REQUEST ReadRequest; ReadRequest.ProcessId = ProcessId; ReadRequest.Address = ReadAddress; ReadRequest.Size = Size ? Size : sizeof(T); // send code to our driver with the arguments if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), 0, 0)) return (T)ReadRequest.Response; else return false; }так что, как вы можете видеть, return (T)ReadRequest.Ответ; он возвращает значение драйверу теперь в моем коде я пытаюсь преобразовать символ в строку, подобную этой, но он не показывает мне всю строку строка, которую я хочу прочитать, является DefaultString, но он читает ее так, как эта строка найдена: DefaultS$ любая помощь будет оценена и кстати я пытаюсь узнать о драйверах Примечание : образовательные цели
Что я уже пробовал:
char* p = Driver.read<char*>(processid, 0x2A1575F818, sizeof(p)); const char* add = reinterpret_cast<const char*>(&p); std::string str = add; printf("String found: %s\n", str.c_str());
Richard MacCutchan
Большинство драйверов устройств имеют дело только с байтами, им все равно, какова структура данных. Таким образом, вы должны просто запросить у драйвера некоторое количество байтов. Например, если T равно char*
а размер не указан, вы будете читать только количество байтов в указателе, которое обычно равно 4.
Member 13980942
@Ричард MacCutchan но как я мог читать больше, чем 4 байта или 8 я пытался поставить буфер число, например (pram1,pram2,255), но это не работает, как, что и из ставит некоторые бесполезные символы как я мог читать всю строку ? заранее спасибо