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

📄 dumpinfo.idc

📁 加密解密2配套光盘,内有加密解密第二版书内提及的软件.
💻 IDC
📖 第 1 页 / 共 4 页
字号:
                    fLineX = writeLine(fOption, fFileH, fCurEA, fTxt, fNum, fLineX);
                }                                                     
                
            } //End FOR Loop        
        }  //End BIG IF
        


        //Message Percent Complete
        ProgNum = ((fCurEA - fSrtEA) * 100) / (fEndEA - fSrtEA) ;     //Get Percent Finsihed
        if (ProgNum > ProgPer) {                                      //If serious gain (5%) write.
            fTxt = form("\nPercent Complete:  %d ",ProgNum);          //Full Message
            Message(fTxt);                                            
            ProgPer = ProgNum + 4;                                    
        } else if (ProgNum > ProgDot) {                               //Else write a "*" for 1% gain
            Message("*");                                             
            ProgDot = ProgNum;
        }

        //Increment Current EA
        fCurEA = NextAddr(fCurEA);
    }   //End WHILE Loop    

    //Write "parts()" Function
    if (fOption & OPT_IDC_FILE) {
        fLineX = fLineX/1000;
        fTxt = form("}\n\nstatic parts() {\n\tMessage(\"\\nSTART!\\n\");\n"); //parts() and Message
        fprintf(fFileH, fTxt);
        for(i=0; i <= fLineX; i++) {                                          //write part_X subs
              fTxt = form("\tpart_%d();\n",i);
              fTxt = fTxt + form("\tMessage(\"Part %d of %d Completed\\n\");\n", i, fLineX);
              fprintf(fFileH, fTxt);
        }
        fTxt = form("\tMessage(\"\\nFINISHED!\\n\");\n}\n");                  //End parts() & Msg.
        fprintf(fFileH, fTxt);
    }
    //Change Status
    Message("\nPercent Complete:  100\n");
    SetStatus(IDA_STATUS_READY);                                              //Set Status 'Ready'
}       


//__________________________________________________________________________________________________
//哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
//FUNCTION: void main()
//--------------------------------------------------------------------------------------------------
//NOTES:
//    i, j        -   (long)      Counters
//    mOption     -   (long)      Holds program option and type info
//    mStartEA    -   (long)      For the starting address
//    mEndEA      -   (long)      For the ending address
//    mFName      -   (char*)     Name for output file
//    mFileH      -   (handle)    File Handle
//    mStartTxt   -   (char*)     
//    mStrLine    -   (char*)     
//    mError      -   (bool)      Error Status
//--------------------------------------------------------------------------------------------------
static main() {
    auto i, j, mOption, mStartEA, mEndEA, mFName, mFileH, mStartTxt, mStrLine, mError;
       
    mError = TRUE;                                                  //Set Error Status True
    Message("\n\nBegin Dump:  DumpInfo.idc. \n");                   //Show Start Message To Window

    //Program Options  -I should really build a UI prompt of some sort...
    //Control the program by commenting/uncommenting the information types you want.
    mOption = 0x00000000L;                         //Initialize Option Var
    mOption = mOption + OPT_MAK_FILE;              //Set Option:  Write File (Or MessageWindow)
    mOption = mOption + OPT_IDC_FILE;              //Set Option:  Create IDC (Or Text File)
    mOption = mOption + OPT_USE_FLTR;              //Set Option:  Use Filter
    mOption = mOption + OPT_REG_FCOM;              //Set Option:  Regular Function Comments
    mOption = mOption + OPT_RPT_FCOM;              //Set Option:  Repeatable Function Comments 
    mOption = mOption + OPT_REG_ICOM;              //Set Option:  Regular Indented Comments
    mOption = mOption + OPT_RPT_ICOM;              //Set Option:  Repeatable Indented Comments
    mOption = mOption + OPT_ANT_LINE;              //Set Option:  Anterior Lines
    mOption = mOption + OPT_POS_LINE;              //Set Option:  Posterior Lines
    mOption = mOption + OPT_USR_NAME;              //Set Option:  User Created Names
    mOption = mOption + OPT_STR_CODE;              //Set Option:  String References From CODE
    mOption = mOption + OPT_STR_DATA;              //Set Option:  String References In DATA


    //Prompt User For Starting/Ending Point
    mStartTxt = form("Start Dump From\n   (E)tire Disassembly - From %s To %s\n", \
    ltoa(MinEA(),16),ltoa(MaxEA(),16));
    mStartTxt = mStartTxt + form("   (C)urent Selection - From %s to %s\n", \
    ltoa(SelStart(),16),ltoa(SelEnd(),16));
    mStartTxt = mStartTxt + form("   (S)egment Only - (You'll Select a Single Segment)\n");
    mStartTxt = mStartTxt + form("   (F)unction Only - (You'll Select a Single Function)\n");
    mStartTxt = AskIdent("E", mStartTxt);

    //(E)ntire File
    if ((mStartTxt == "E") || (mStartTxt == "b")) {
        mStartEA = MinEA();
        mEndEA = MaxEA();
        if ((mStartEA != 0) || (mEndEA != 0))  mError = FALSE;            //Error Checking
    //(C)urrent Selection
    } else if ((mStartTxt == "C") || (mStartTxt == "c")) {
        mStartEA = SelStart();                                            //Get Selection Start
        mEndEA = SelEnd();                                                //Get Selection End
        if ((mStartEA != BADADDR) || (mEndEA != BADADDR)) mError = FALSE; //Error Checking
        else Warning("There Is No Currently Selected Area");              //No Selection Warning
    //(S)egment Only -A "ChooseSegment()" Function would be nice... :)
    } else if ((mStartTxt == "S") || (mStartTxt == "s")) {
        i = 1;
        mStartEA = FirstSeg();                                            //Set StartEA
        mStartTxt = "Please Choose Segment By Number:\n";                 //Create Text for UI
        do {mStartTxt = mStartTxt + form("    (%d) %s", i, SegName(mStartEA));
            mStartEA = NextSeg(mStartEA);                                 //Get Text Seg Name
            i++;
        } while ( mStartEA != BADADDR);
        j = AskLong("1", mStartTxt);                                      //Get User Input (long)
        mStartEA = FirstSeg();                                            //Set StartEA First Seg  
        mEndEA = SegEnd(mStartEA);                                        //Set EndEA to End of Seg
        for (i=1; i<j; i++) {                                             //Loop to user selected -
            mStartEA = NextSeg(mStartEA);                                 //segment setting start -
            mEndEA = SegEnd(mStartEA);                                    //and end
        }
        if ((mStartEA != BADADDR) || (mEndEA != BADADDR)) mError = FALSE; //Error Checking
    //(F)unction Only
    } else if ((mStartTxt == "F") || (mStartTxt == "f")) {
        mStartEA = ChooseFunction("Choose Function");
        mEndEA = FindFuncEnd(mStartEA);
        if ((mStartEA != -1)  || (mEndEA != BADADDR))  mError = FALSE;    //Error Checking
    }

    //Show Status Messages
    if (mOption & OPT_MAK_FILE) Message("Create File:  TRUE \n");
    else Message("Create File:  FALSE \n");
    if (mOption & OPT_IDC_FILE) Message("Create  IDC:  TRUE \n"); 
    else Message("Create  IDC:  FALSE \n"); 


    //Error Test
    if (mError == TRUE)  Message("\nThere was an error getting address info. \n");
    else {
    //Setup Output
        //Create IDC string
        if (mOption & OPT_IDC_FILE) {
            mStrLine =  form("// User Dump: IDC Format\n// Autogenerated by DumpInfo.IDC \n");
            mStrLine = mStrLine + form("// IDC script for porting info to a new disassembly.\n");
            mStrLine = mStrLine + form("// Disassembled File: %s\n",GetInputFile());
            mStrLine = mStrLine + form("// Cursor  Address: %s\n",ltoa(BeginEA(),16));
            mStrLine = mStrLine + form("// Minimum Address: %s\n",ltoa(MinEA(),16));
            mStrLine = mStrLine + form("// Maximum Address: %s\n",ltoa(MaxEA(),16));
            mStrLine = mStrLine + form("// Segment Address: %s\n",ltoa(SegStart(mStartEA),16));
            mStrLine = mStrLine + form("// Segment Name...: %s\n",SegName(mStartEA));
            mStrLine = mStrLine + form("// StartingAddress: %s\n",ltoa(mStartEA,16));
            mStrLine = mStrLine + form("// Ending  Address: %s\n\n",ltoa(mEndEA,16));
            mStrLine = mStrLine + form("#include <idc.idc>\n\nstatic main ( ) {\n");
            mStrLine = mStrLine + form("\t parts();\n}\n\n");
        
        //Create TEXT string
        } else {
            mStrLine =  form("User Dump: Text Format\nAutogenerated by DumpInfo.IDC \n");
            mStrLine = mStrLine + form("Disassembled File: %s\n",GetInputFile());
            mStrLine = mStrLine + form("Cursor  Address: %s\n",ltoa(BeginEA(),16));
            mStrLine = mStrLine + form("Minimum Address: %s\n",ltoa(MinEA(),16));
            mStrLine = mStrLine + form("Maximum Address: %s\n",ltoa(MaxEA(),16));
            mStrLine = mStrLine + form("Segment Address: %s\n",ltoa(SegStart(mStartEA),16));
            mStrLine = mStrLine + form("Segment Name...: %s\n",SegName(mStartEA));
            mStrLine = mStrLine + form("StartingAddress: %s\n",ltoa(mStartEA,16));
            mStrLine = mStrLine + form("Ending  Address: %s\n\n",ltoa(mEndEA,16));
        }
    
        //Output To File
        if (mOption & OPT_MAK_FILE) {
            if (mOption & OPT_IDC_FILE)
                 mFName = AskFile(1,"*.idc", "Output File Name?");         //Get *.IDC File Name
            else mFName = AskFile(1,"*.txt", "Output File Name?");         //Get *.TXT File Name
            
            mFileH = fopen(mFName, "wt");                                  //Open File for Output
    
            if (mFileH == 0)  Warning("Error opening output file!\n");     //Error Opening File
            else {
                fprintf(mFileH, mStrLine);                                 //Else Run Program
                findInfo(mOption,mFileH,mStartEA,mEndEA);
            }
    
        //Output to Message Window
        } else {
            Message (mStrLine);
            findInfo(mOption,mFileH,mStartEA,mEndEA);
        }
    
        //Cleanup
        if (mFileH != 0) {
            if (mOption & OPT_IDC_FILE)  mStrLine = form("\n\n// End of IDC File.");   
            else mStrLine = form("\n\nEnd of Text File.");                            
            fprintf(mFileH, mStrLine);                                                
            fclose(mFileH);                                                           
        }
    }

    //Show End Message
    Message("\nEnd of DumpInfo.idc. \n");
}

⌨️ 快捷键说明

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