-
-
外壳编写重定位处理的一个疑问
-
发表于:
2009-4-10 09:07
10054
-
一个疑问:
书上给的代码 是这样的
//取出ItemOffset,加上本段重定位起始地址 ,减去nTemp,得到的值准备放到新重定位表结构中
nNewItemOffset = ((pBaseReloc->TypeOffset[nIndex] & 0x0fff) + pBaseReloc->VirtualAddress) - nTemp;
if(nNewItemOffset > 0xff)//如果是本段重定位数据第一项
{
*(BYTE *)(pData) = 3;
pData += sizeof(BYTE);
*(DWORD *)pData = (DWORD)(nNewItemOffset);
pData += sizeof(DWORD);
}
else
{
*(BYTE *)(pData) =(BYTE)(nNewItemOffset);
pData += sizeof(BYTE);
}
nTemp += nNewItemOffset;
上面得代码我有个疑问,他的格式是先保存类型3,然后保存第一项的值,然后后面每次用个字节去保证差值(后一项减前一项)。而且程序认定差值不会超过0xff,因为注释说的也是保存第一项。我想问所有的程序里的这个偏移都不会超过0XFF吗,碰巧我调试的时候碰到了。这样程序就会再保存类型和前一项的数据。虽然这样不算错,作者的本意就是这样,还是我理解错了。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!