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

📄 dumpinfo.idc

📁 加密解密2配套光盘,内有加密解密第二版书内提及的软件.
💻 IDC
📖 第 1 页 / 共 4 页
字号:
#define TYP_RPT_FCOM 0x00020000L    //  Repeatable Function Comments   
#define TYP_REG_ICOM 0x00040000L    //  Regular Indented Comments      
#define TYP_RPT_ICOM 0x00080000L    //  Repeatable Indented Comments   
#define TYP_ANT_LINE 0x00100000L    //  Anterior Lines                 
#define TYP_POS_LINE 0x00200000L    //  Posterior Lines                
#define TYP_USR_NAME 0x00400000L    //  User Names (Non-Autogenerated)
#define TYP_STR_CODE 0x00800000L    //  String References From Code (Operand = Offset)
#define TYP_STR_DATA 0x01000000L    //  String References In Data



//__________________________________________________________________________________________________
//哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
// FUNCTION: char* xFilter(char *)
//--------------------------------------------------------------------------------------------------
// Purpose: To find and remove commonly autogenerated comments and names.
//
// NOTES:
//      I did what I could for the speed of this thing but string work is slow by nature.
//      
//--------------------------------------------------------------------------------------------------
static xFilter(xTxt) {
    auto xTmp;

    xTmp = substr(xTxt, 0, 1);
    
    // Length 1
    if (xTmp == "_") xTxt = FALSE;                                          //NAME: stdlib
    else if (xTmp == "?") xTxt = FALSE;                                     //NAME: libs
    else xTmp = substr(xTxt, 0, 2);

    // Length 2
    if (xTxt != FALSE) {
        if (xTmp == "lp") xTxt = FALSE;                                     //COMMENT: 
        else if (xTmp == "dw") xTxt = FALSE;                                //COMMENT: 
        else if (xTmp == "fl") xTxt = FALSE;                                //COMMENT: 
        else if (xTmp == "j_") xTxt = FALSE;                                //NAME: jump subs
        else xTmp = substr(xTxt, 0, 3);
    }
    // Length 3
    if (xTxt != FALSE) {
        if (xTmp == "int") xTxt = FALSE;                                    //COMMENT: 
        else if (xTmp == "int") xTxt = FALSE;                               //COMMENT: 
        else if (xTmp == "cch") xTxt = FALSE;                               //COMMENT: 
        else if (xTmp == "Msg") xTxt = FALSE;                               //COMMENT: 
        else if (xTmp == "unk") xTxt = FALSE;                               //NAME: unkown_libname
        else if (xTmp == "HDC") xTxt = FALSE;                               //COMMENT: HDC
        else xTmp = substr(xTxt, 0, 4);                                   
    }                                                               
    // Length 4                                                      
    if (xTxt != FALSE) {
        if (xTmp == "hWnd") xTxt = FALSE;                                   //COMMENT: 
        else if (xTmp == "void") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "char") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "hPre") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "case") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "hMem") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "hKey") xTxt = FALSE;                              //COMMENT: 
        else if (xTmp == "yBot") xTxt = FALSE;                              //COMMENT: yBot
        else if (xTmp == "xRig") xTxt = FALSE;                              //COMMENT: xRig
        else if (xTmp == "yTop") xTxt = FALSE;                              //COMMENT: yTop
        else if (xTmp == "xLef") xTxt = FALSE;                              //COMMENT: xLef
        else if (xTmp == "wMsg") xTxt = FALSE;                              //COMMENT: wMsg
        else if (xTmp == "UINT") xTxt = FALSE;                              //COMMENT:
        else if (xTmp == "hRes") xTxt = FALSE;                              //COMMENT: hRes
        else if (xTmp == "hDlg") xTxt = FALSE;                              //COMMENT: hDlg
        else if (xTmp == "hCtl") xTxt = FALSE;                              //COMMENT: hCtl
        else if (xTmp == "uCmd") xTxt = FALSE;                              //COMMENT: uCmd
        else if (xTmp == "iMax") xTxt = FALSE;                              //COMMENT: iMax
        else xTmp = substr(xTxt, 0, 5);                              
    }                                                           
    // Length 5
    if (xTxt != FALSE) {
        if (xTmp == "hHeap") xTxt = FALSE;                                  //COMMENT: 
        else if (xTmp == "hData") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "const") xTxt = FALSE;                             //COMMENT:     
        else if (xTmp == "hInst") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "uExit") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "hProc") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "hFile") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "nSize") xTxt = FALSE;                             //COMMENT: 
        else if (xTmp == "uType") xTxt = FALSE;                             //COMMENT: UINT
        else if (xTmp == "hMenu") xTxt = FALSE;                             //COMMENT: hMenu
        else if (xTmp == "nBuff") xTxt = FALSE;                             //COMMENT: nBuff
        else if (xTmp == "nFile") xTxt = FALSE;                             //COMMENT: nFile
        else if (xTmp == "nVolu") xTxt = FALSE;                             //COMMENT: nVolu
        else if (xTmp == "hFind") xTxt = FALSE;                             //COMMENT: hFind
        
        else xTmp = substr(xTxt, 0, 6);
    }
    // Length 6
    if (xTxt != FALSE) {
        if (xTmp == "hModul") xTxt = FALSE;                                 //COMMENT: 
        else if (xTmp == "hObjec") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "hHandl") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "nStdHa") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "nIndex") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "CodePa") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "uNumbe") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "uFlags") xTxt = FALSE;                            //COMMENT: uFlags
        else if (xTmp == "switch") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "Locale") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "lParam") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "wParam") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "size_t") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "nullsu") xTxt = FALSE;                            //NAME: nullsub
        else if (xTmp == "nNumer") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "nNumbe") xTxt = FALSE;                            //COMMENT: nNumbe
        else if (xTmp == "nDenom") xTxt = FALSE;                            //COMMENT: 
        else if (xTmp == "LPSIZE") xTxt = FALSE;                            //COMMENT: LPSIZE
        else if (xTmp == "LPCSTR") xTxt = FALSE;                            //COMMENT: LPCSTR
        else if (xTmp == "LPPOIN") xTxt = FALSE;                            //COMMENT: LPPOIN
        else if (xTmp == "COLORR") xTxt = FALSE;                            //COMMENT: COLORR
        else if (xTmp == "hSourc") xTxt = FALSE;                            //COMMENT: hSourc
        else if (xTmp == "hTarge") xTxt = FALSE;                            //COMMENT: hTarge
        else if (xTmp == "lDista") xTxt = FALSE;                            //COMMENT: lDista 
        else if (xTmp == "uBytes") xTxt = FALSE;                            //COMMENT: uBytes
        else if (xTmp == "HGDIOB") xTxt = FALSE;                            //COMMENT: HGDIOB
        else if (xTmp == "bEnabl") xTxt = FALSE;                            //COMMENT: bEnabl
        else if (xTmp == "wRemov") xTxt = FALSE;                            //COMMENT: wRemov
        else if (xTmp == "LPVOID") xTxt = FALSE;                            //COMMENT: LPVOID
//        else if (xTmp == "jump t") xTxt = FALSE;                            //COMMENT: jump table
    }
    
    return xTxt;

}

//__________________________________________________________________________________________________
//哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
//FUNCTION: writeLine(long oOption, handle oFileH, long oEA, char* oTxt, long oNum, long oLineX)
//--------------------------------------------------------------------------------------------------
//PURPOSE:  Write formated information to file. Returns number of the line it wrote.
//--------------------------------------------------------------------------------------------------
//NOTES: 
//    oOption - (long)      Holds OPTion and TYPe information.
//    oFileH  - (file*)     File handle
//    oEA     - (long)      Current Effective Address
//    oTxt    - (char*)     Text info from the EA
//    oNum    - (long)      General Number 
//                                Used for Line Number in Anterior & Posterior Lines.
//                                Used for FIRST _OR_ SECOND Operand in x_STR_CODE
//                                Used for String Length in x_STR_DATA
//    oLineX  - (long)      Information Line Number of Output File
//
//    outTxt  - (char*)     Text to be written to file. (Also used in part_X and killing /n)
//    oTypTxt - (char*)     Use in text files to show information Type.
//    oTxtPos - (long)      Position in character array.
//    oMsg    -
//
//----------------------------------------------------------------------------------------------------
static writeLine(oOption, oFileH, oEA, oTxt, oNum, oLineX) {
    auto outTxt, oTypTxt, oTxtPos, oMsg;

    //Create "part_X()" subs.
    if (oOption & OPT_IDC_FILE) {
        if ((oLineX%1000) == 0) {                                       //Test 1000 Printed Lines
            if ((oLineX/1000)==0) outTxt = "";                          //Test First run of loop.
            else outTxt = form("}\n\n");                                //Close Previous part_X sub
            outTxt = outTxt + form("\nstatic part_%d() {\n",(oLineX/1000));     //Create New part_X sub
            fprintf(oFileH, outTxt);
        }
    }

    //Parse Input String For "\n" New Line
    oTxtPos = 1;
    outTxt = oTxt;
    while(oTxtPos != -1) {
        oTxtPos = strstr(oTxt,"\n");                                    //Find NewLine
        if (oTxtPos != -1) {
            outTxt = substr(oTxt,0,oTxtPos);                            //Get Text up to NewLine
            outTxt = outTxt + "\\n";                                    //Append Text "\n"
            outTxt = outTxt + substr(oTxt,(oTxtPos+1),strlen(oTxt));    //Append Rest of String
        }
        oTxt = outTxt;                                                  //Rewite Original String
    }

    //Create IDC string
    if (oOption & OPT_IDC_FILE) {
        if (oOption & TYP_REG_FCOM) {                                   //Regular Function Comment
            outTxt = form("\tSetFunctionCmt(0x%s, \"%s\", 0);\n", ltoa(oEA,16), oTxt);
        } else if (oOption & TYP_RPT_FCOM) {                            //Repeatable Function Comm.
            outTxt = form("\tSetFunctionCmt(0x%s, \"%s\", 1);\n", ltoa(oEA,16), oTxt);
        } else if (oOption & TYP_REG_ICOM) {                            //Regular Indented Comment
            outTxt = form("\tMakeComm(0x%s, \"%s\");\n", ltoa(oEA,16), oTxt);
        } else if (oOption & TYP_RPT_ICOM) {                            //Repeatable Indented Comm.
            outTxt = form("\tMakeRptCmt(0x%s, \"%s\");\n", ltoa(oEA,16), oTxt);
        } else if (oOption & TYP_ANT_LINE) {                            //Anterior Lines
            outTxt = form("\tExtLinA(0x%s, %d, \"%s\");\n", ltoa(oEA,16), oNum, oTxt);
        } else if (oOption & TYP_POS_LINE) {                            //Posterior Lines
            outTxt = form("\tExtLinB(0x%s, %d, \"%s\");\n", ltoa(oEA,16), oNum, oTxt);
        } else if (oOption & TYP_USR_NAME) {                            //User Defined Names
            outTxt = form("\tMakeName(0x%s, \"%s\");\n", ltoa(oEA,16), oTxt);
//      } else if (oOption & TYP_STR_CODE) {                            //Strings From Code
        } else if (oOption & TYP_STR_DATA) {                            //Strings in Data
            outTxt = form("\tMakeStr(0x%s, 0x%s);\n",ltoa(oEA,16),ltoa((oEA+oNum),16));

⌨️ 快捷键说明

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