我有这个内核驱动程序用于从进程内存中读取字符串:
KeAttachProcess(GlobalProcessPE);
char* source = *(ULONG*)pBuf;
RtlZeroMemory(pBuf, pIoStackLocation->Parameters.DeviceIoControl.OutputBufferLength);
RtlCopyMemory(pBuf, source, 256);
KeDetachProcess();
这是C++中的通信过程:
DWORD ReadBuffer2[180] = { 0 };
DeviceIoControl(hDevice, IOCTL_READPROCMEM_S, &msg, sizeof(msg), ReadBuffer2, sizeof(ReadBuffer2), &dwBytesRead, NULL);
printf("Message: %s\n", ReadBuffer2);
printf("Bytes read: %d\n", dwBytesRead);
在运行并搜索该字符串时,它实际上捕获了其中的前四个字母,并显示以下内容:
Message: ABCD
Bytes read: 4
我已经使用另一种方法检查了字符串,它应该显示 ABCDEFGHIJKL...
问题就在这里,为什么它只读取(或可能写入)前四个字节?