note : calculate opcode address

来源:互联网 发布:网络配音cv大神 编辑:程序博客网 时间:2024/06/07 12:11
#include <windows.h>#include <tchar.h>#include <string>/// calculate opcode address/// @fn     AddrLE2BE/// @brief  小端地址转大端地址DWORD_PTR AddrLE2BE(DWORD_PTR dwLittleEndianVal);int main(    HINSTANCE  hInstance,    HINSTANCE  hPrevInstance,      LPSTR  lpszCmdLine,    int  nCmdShow ){     /// opcode below    /// 3116000D    E8 AD03FBCF    DWORD_PTR   dwAddrCur = 0x3116000D; // 3116000D    DWORD       dwOpcodeLen = 5; // E8 AD03FBCF    DWORD       dwOffsetLE = 0xAD03FBCF;    /// 下一条OPCODE地址 + 大端地址 为要操作的地址    DWORD_PTR   dwAddrObj = dwAddrCur + dwOpcodeLen + AddrLE2BE(dwOffsetLE);    _tprintf(L"3116000D    E8 AD03FBCF => CALL 0x%.8X\r\n", dwAddrObj);    /** run result    3116000D    E8 AD03FBCF => CALL 0x011103BF    */    getwchar();    return 0; }DWORD_PTR AddrLE2BE(DWORD_PTR dwLittleEndianVal){    const UINT  uByteBitsLen = 8;    UINT        uIndex = 0;    DWORD_PTR   dwAddrBE = 0; ///< 大端地址    BYTE        byCur = 0;    DWORD_PTR   dwTmp = 0;    DWORD_PTR   dwSBR = 0; ///< shift bits to right    /// shift bits to left    DWORD_PTR   dwSBL = (sizeof(DWORD_PTR) - 1) * uByteBitsLen;    for (uIndex = 0; uIndex < sizeof(DWORD_PTR); uIndex++)    {        byCur = (BYTE)(dwLittleEndianVal >> dwSBR);        dwTmp = byCur;        dwTmp <<= dwSBL;        dwAddrBE |= dwTmp;        dwSBR += uByteBitsLen;        dwSBL -= uByteBitsLen;    }    return dwAddrBE;}

原创粉丝点击