📄 dumpinfo.idc
字号:
#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 + -