ollydbg的CmdBar插件中的mac宏执行命令一直都觉得是一个非常好用的功能。 该Bug是指,有些情况下明明我们已经在macro.def中定义了命令,可是cmdbar还是提示无效的宏命令。 看代码; 引用: int LoadMac(char *answer,ulong parm) { const char *nomore = "NO MORE"; int i,j; BOOL IsMacName; char key[10],line[TEXTLEN],buf[TEXTLEN]; char *pdest; PCOMMAND_QUE pnew,p; pdest = MacroNames; IsMacName = FALSE; while(*pdest != '\0') { if(!stricmp(string,pdest)) { IsMacName = TRUE; break; } pdest += lstrlen(MacroNames)+1; //这里应该为pdest += lstrlen(pdest)+1; } if(IsMacName == FALSE) { wsprintf(answer,"\"%s\" is invalid macro name!!",string); return(-1); } 引用: 02B92A95 |> /53 /PUSH EBX ; /Arg2 = 00000000 02B92A96 |. |68 440BBA02 |PUSH CmdBar.02BA0B44 ; |Arg1 = 02BA0B44 ASCII "dialog" 02B92A9B |. |E8 44230000 |CALL CmdBar.02B94DE4 ; \CmdBar.02B94DE4 02B92AA0 |. |83C4 08 |ADD ESP, 8 02B92AA3 |. |85C0 |TEST EAX, EAX 02B92AA5 |. |75 07 |JNZ SHORT CmdBar.02B92AAE 02B92AA7 |. |BE 01000000 |MOV ESI, 1 02B92AAC |. |EB 13 |JMP SHORT CmdBar.02B92AC1 02B92AAE |> |A1 A4E1B902 |MOV EAX, DWORD PTR DS:[2B9E1A4] 02B92AB3 50 PUSH EAX //这里修改为EBX 02B92AB4 |. |E8 359A0000 |CALL <JMP.&KERNEL32.lstrlenA> ; \lstrlenA 02B92AB9 |. |40 |INC EAX 02B92ABA |. |03D8 |ADD EBX, EAX 02B92ABC |> |803B 00 CMP BYTE PTR DS:[EBX], 0 02B92ABF |.^\75 D4 \JNZ SHORT CmdBar.02B92A95 cmdbar有源代码,这里就不编译了,直接放一个修改过的二进制文件。
ollydbg的CmdBar插件中的mac宏执行命令一直都觉得是一个非常好用的功能。 该Bug是指,有些情况下明明我们已经在macro.def中定义了命令,可是cmdbar还是提示无效的宏命令。 看代码;