#include #include static bswap32(value){ return ((((value >> 0) & 0xFF) << 24) | (((value >> 8) & 0xFF) << 16) | (((value >> 16) & 0xFF) << 8) | (((value >> 24) & 0xFF) << 0)); } static SetupSections(){ auto currAddr, i, szSectionName, dwRawSize, dwRawOffset, dwVirSize, dwVirOffset, dwFlags; currAddr = FindBinary(0x40000, SEARCH_DOWN, "50 45 00 00"); currAddr = currAddr + 0xF8; for(i=0; i<0xD; i++) { if(Dword(currAddr+(i*0x28)) != 0) { szSectionName = GetString(currAddr+(i*0x28)+0, 8, 0); dwRawSize = bswap32(Dword(currAddr+(i*0x28)+8)); dwRawOffset = bswap32(Dword(currAddr+(i*0x28)+0xC)); dwVirSize = bswap32(Dword(currAddr+(i*0x28)+0x10)); dwVirOffset = bswap32(Dword(currAddr+(i*0x28)+0x14)); dwFlags = bswap32(Dword(currAddr+(i*0x28)+0x24)); SegCreate(0x40000+dwRawOffset, 0x40000+dwRawOffset+dwRawSize, 0, 1, 1, 2); MoveSegm(0x40000+dwRawOffset, 0x80040000+dwRawOffset, 0); RenameSeg(0x80040000+dwRawOffset, szSectionName); DelSeg(0x40000+dwRawOffset, 0); } } } static MakeFunctions() { auto i; i=0x8005A800; Message(form(".pdata found at 0x%X", i)); while(i < 0x80061378) //strstr(SegName(i), form(".pdata")) != -1) { MakeDword(i); //MakeUnk(Dword(i), 0); MakeCode(Dword(i)); i = i + 8; } } static main() { //SetupSections(); MakeFunctions(); }