搜索目标地址所在的节点
搜索目标地址所在的节点
搜索目标地址所在的节点
//搜索目标地址所在的节点
PMEMORY_AREA STDCALL
MmLocateMemoryAreaByAddress(PMADDRESS_SPACE AddressSpace, PVOID Address)
{
PMEMORY_AREA Node = AddressSpace->MemoryAreaRoot;//获取用户空间的AVL树
DbgPrint("MmLocateMemoryAreaByAddress(AddressSpace %p,Address %p)\n",
AddressSpace, Address);
MmVerifyMemoryAreas(AddressSpace);//检测该AVL树是否存在问题
while (Node != NULl) // 根据二叉搜索树的性质进行和遍历,小到其左子树遍历,大则到其右子树遍历
{
if (address < Node->StartingAddress)
{
Node = node->LeftChild;
}
else if (Address >= Node->EndingAddress)
{
Node = node->RightChild;
}
else
{
DbgPrint("MmLocateMemoryAreaByAddress(%p):%p [%p - %p)\n",
Address, Node, Node->StartingAddress, Node->EndingAddress);
return Node;
}
}
DbgPrint("MmLocateMemoryAreaByAddress(%p):0\n", Address);
return NULL;
}