Skip to content

Instantly share code, notes, and snippets.

@TuxSH
Created November 2, 2016 15:36
Show Gist options
  • Save TuxSH/bad432db73422bacde9e1e6a342edd16 to your computer and use it in GitHub Desktop.
Save TuxSH/bad432db73422bacde9e1e6a342edd16 to your computer and use it in GitHub Desktop.
insert chunk diff
bool insertMemChunkHeader(RegionDescriptor *region, MemChunkHeader *newChunk, unsigned int nbPages, MemChunkHeader *left, MemChunkHeader *right)
{
// variable declarations ...
result = region;
v5 = nbPages;
left_ = left;
v7 = 0;
newChunk_ = newChunk;
v39 = 0;
if ( left )
{
checkMAC(region, left);
v7 = left_->nbPages;
}
if ( right )
{
checkMAC(result, right);
v39 = right->nbPages;
}
if ( left_ )
leftOrStart = (unsigned int)(&left_->nbPages + 1024 * left_->nbPages);
else
leftOrStart = result->regionStart;
if ( right )
rightOrEnd = right;
else
rightOrEnd = (MemChunkHeader *)(result->regionStart + result->regionSize);
regionStart = result->regionStart;
if ( regionStart > leftOrStart || regionStart + result->regionSize < (unsigned int)rightOrEnd )
kernelpanic();
v12 = leftOrStart >= (unsigned int)newChunk_;
v13 = leftOrStart == (_DWORD)newChunk_;
if ( leftOrStart <= (unsigned int)newChunk_ )
{
v14 = (unsigned int)(&newChunk_->nbPages + 1024 * v5);
v12 = v14 >= (unsigned int)rightOrEnd;
v13 = v14 == (_DWORD)rightOrEnd;
}
// ...
}
bool insertMemChunkHeader(RegionDescriptor *region, MemChunkHeader *newChunk, unsigned int nbPages, MemChunkHeader *left, MemChunkHeader *right)
{
// variable declarations ...
region_ = region;
v5 = nbPages;
newChunk_ = newChunk;
v7 = 0;
left_ = left;
v9 = (char *)newChunk + 4096 * nbPages;
v41 = 0;
v10 = region->regionSize;
if ( nbPages > v10 >> 12 || v10 + region_->regionStart < (unsigned int)v9 )
kernelpanic();
if ( left_ )
{
checkMAC(region_, left_);
v7 = left_->nbPages;
}
if ( right )
{
checkMAC(region_, right);
v41 = right->nbPages;
}
if ( left_ )
{
v12 = (unsigned int)left_ + 4096 * left_->nbPages - 1;
if ( v12 < (unsigned int)left_ )
kernelpanic();
leftOrStart = v12 + 1;
}
else
{
leftOrStart = region_->regionStart;
}
if ( right )
rightOrEnd = right;
else
rightOrEnd = (MemChunkHeader *)(region_->regionStart + region_->regionSize);
regionStart = region_->regionStart;
if ( regionStart > leftOrStart || regionStart + region_->regionSize < (unsigned int)rightOrEnd )
kernelpanic();
v15 = leftOrStart >= (unsigned int)newChunk_;
v16 = leftOrStart == (_DWORD)newChunk_;
if ( leftOrStart <= (unsigned int)newChunk_ )
{
v15 = v9 >= (char *)rightOrEnd;
v16 = (MemChunkHeader *)v9 == rightOrEnd;
}
// ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment