All pastes #189624 Raw Edit

Mine

public text v1 · immutable
·published 2006-10-03 08:47 UTC
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();
}