⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 branchx86.c

📁 sleuthit-2.09 一个磁盘的工具集
💻 C
字号:
/* BranchX86.c */#include "BranchX86.h"/*static int inline Test86MSByte(Byte b){  return (b == 0 || b == 0xFF);}*/#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF)const int kMaskToAllowedStatus[8] = {1, 1, 1, 0, 1, 0, 0, 0};const Byte kMaskToBitNumber[8] = {0, 1, 2, 2, 3, 3, 3, 3};/*void x86_Convert_Init(UInt32 *prevMask, UInt32 *prevPos){  *prevMask = 0;  *prevPos = (UInt32)(-5);}*/UInt32 x86_Convert(Byte *buffer, UInt32 endPos, UInt32 nowPos,     UInt32 *prevMask, UInt32 *prevPos, int encoding){  UInt32 bufferPos = 0;  UInt32 limit;  if (endPos < 5)    return 0;    if (nowPos - *prevPos > 5)    *prevPos = nowPos - 5;    limit = endPos - 5;  while(bufferPos <= limit)  {    Byte b = buffer[bufferPos];    UInt32 offset;    if (b != 0xE8 && b != 0xE9)    {      bufferPos++;      continue;    }    offset = (nowPos + bufferPos - *prevPos);    *prevPos = (nowPos + bufferPos);    if (offset > 5)      *prevMask = 0;    else    {      UInt32 i;      for (i = 0; i < offset; i++)      {        *prevMask &= 0x77;        *prevMask <<= 1;      }    }    b = buffer[bufferPos + 4];    if (Test86MSByte(b) && kMaskToAllowedStatus[(*prevMask >> 1) & 0x7] &&       (*prevMask >> 1) < 0x10)    {      UInt32 src =         ((UInt32)(b) << 24) |        ((UInt32)(buffer[bufferPos + 3]) << 16) |        ((UInt32)(buffer[bufferPos + 2]) << 8) |        (buffer[bufferPos + 1]);            UInt32 dest;      while(1)      {        UInt32 index;        if (encoding)          dest = (nowPos + bufferPos + 5) + src;        else          dest = src - (nowPos + bufferPos + 5);        if (*prevMask == 0)          break;        index = kMaskToBitNumber[*prevMask >> 1];        b = (Byte)(dest >> (24 - index * 8));        if (!Test86MSByte(b))          break;        src = dest ^ ((1 << (32 - index * 8)) - 1);      }      buffer[bufferPos + 4] = (Byte)(~(((dest >> 24) & 1) - 1));      buffer[bufferPos + 3] = (Byte)(dest >> 16);      buffer[bufferPos + 2] = (Byte)(dest >> 8);      buffer[bufferPos + 1] = (Byte)dest;      bufferPos += 5;      *prevMask = 0;    }    else    {      bufferPos++;      *prevMask |= 1;      if (Test86MSByte(b))        *prevMask |= 0x10;    }  }  return bufferPos;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -