rendered paste body#include <idc.idc>
static pktsearch()
{
auto str, num;
auto ea, ed, opcode, arg;
auto cCounter;
auto lHandle;
auto fName, fCounter;
auto getBYTE, getWORD, getDWORD, getString, getBuffer;
auto wantBYTE, wantWORD, wantDWORD, wantString, wantBuffer;
wantBYTE = 1;
wantWORD = 2;
wantDWORD = 1;
wantString = -1;
wantBuffer = -1;
lHandle = fopen(GetInputFilePath() + "_search.txt", "w");
if (lHandle == 0)
{
Message("Failed to open log file\n");
return;
}
//ea = ScreenEA();
ea = FirstSeg();
ed = SegEnd(ea);
Message(form("Beginning search from 0x%08X...\n", ea));
cCounter = 0;
fCounter = 0;
fName = "";
while (ea < ed)
{
str = GetFunctionName(ea);
if (str != fName)
{
if (fName != "")
{
if ((wantBYTE < 0 || getBYTE == wantBYTE) &&
(wantWORD < 0 || getWORD == wantWORD) &&
(wantDWORD < 0 || getDWORD == wantDWORD) &&
(wantString < 0 || getString == wantString) &&
(wantBuffer < 0 || getBuffer == wantBuffer))
{
fprintf(lHandle, "%s\n", fName);
}
}
getBYTE = 0;
getWORD = 0;
getDWORD = 0;
getString = 0;
getBuffer = 0;
fName = str;
}
if (fName != "")
{
opcode = GetMnem(ea);
if (opcode == "call")
{
arg = GetOpnd(ea, 0);
if (arg == "fPacketGetBYTE")
{
getBYTE++;
}
else if (arg == "fPacketGetWORD")
{
getWORD++;
}
else if (arg == "fPacketGetDWORD")
{
getDWORD++;
}
else if (arg == "fPacketGetString")
{
getString++;
}
else if (arg == "fPacketGetBuffer")
{
getBuffer++;
}
}
}
ea = ItemEnd(ea);
}
fclose(lHandle);
}
static main()
{
pktsearch();
}