[C++] 纯文本查看 复制代码 // 这一行将 `pbKey` 指向 `data` 缓冲区中 `KULL_M_DPAPI_MASTERKEY` 结构体的 `pbKey` 字段的位置。
// `FIELD_OFFSET` 是一个宏,用于计算 `pbKey` 成员相对于 `KULL_M_DPAPI_MASTERKEY` 结构体起始位置的偏移量。
masterkey->pbKey = (PBYTE)data + FIELD_OFFSET(KULL_M_DPAPI_MASTERKEY, pbKey);
// 此函数用指向本地分配内存的新指针替换给定地址处的指针,并将原始指针所指向的内容复制到新分配的内存中。
void kull_m_string_ptr_replace(PVOID ptr, DWORD64 size)
{
PVOID tempPtr = NULL;
// 如果大小非零,则分配本地内存并复制数据。
if (size)
{
// 使用 `LocalAlloc` 分配内存。
// LPTR 表示内存是在本地堆中分配的。
if ((tempPtr = LocalAlloc(LPTR, (SIZE_T)size)) != NULL)
{
// 将由 `ptr` 处的指针所指向的内容复制到新分配的内存中。
RtlCopyMemory(tempPtr, *(PVOID *)ptr, (size_t)size);
}
}
// 用指向本地内存的新指针替换 `ptr` 处的指针。
// 注意:调用者必须确保适当地释放原始指针所指向的目标。
*(PVOID *)ptr = tempPtr;
} |