BOOL __stdcall addresslistplugin(PPLUGINTYPE0_RECORD SelectedRecord) { char x[100]; sprintf_s(x,100,"Selected record's description=%s Address=%0.8x",SelectedRecord->description, SelectedRecord->address); Exported.ShowMessage(x); //show it using CE's default messagebox return FALSE; //return TRUE if you edited anything in the record and want to apply that to the table }
void __stdcall PointersReassigned(int reserved) { //Check the "Pointer to pointer" objects and decide if you want to redirect them to your own routine, or not //Usefull for implementing your own read process memory and overriding user choises //(e.g when they pick read physical memory and you want to focus on only one procesS) Exported.ShowMessage("Pointers got modified"); return; }
BOOL __stdcall memorybrowserplugin(ULONG *disassembleraddress, ULONG *selected_disassembler_address, ULONG *hexviewaddress) { Exported.ShowMessage("A Plugin function got executed"); *disassembleraddress=*hexviewaddress; //make the disassembleraddress and hexviewaddress the same return TRUE; }
void __stdcall mainmenuplugin(void) { Exported.ShowMessage("Main menu plugin"); return; }
BOOL __stdcall CEPlugin_InitializePlugin(PExportedFunctions ef , int pluginid) { ADDRESSLISTPLUGIN_INIT init0; MEMORYVIEWPLUGIN_INIT init1; DEBUGEVENTPLUGIN_INIT init2; PROCESSWATCHERPLUGIN_INIT init3; POINTERREASSIGNMENTPLUGIN_INIT init4; MAINMENUPLUGIN_INIT init5; selfid=pluginid; //copy the EF list to Exported Exported=*ef; //Exported is defined in the .h if (Exported.sizeofExportedFunctions!=sizeof(Exported)) return FALSE; //rightclick on address plugin init0.name="Sample plugin: Addresslist"; init0.callbackroutine=addresslistplugin; addresslistPluginID=Exported.RegisterFunction(pluginid, ptAddressList, &init0); //adds a plugin menu item to the memory view if ( addresslistPluginID == -1 ) { Exported.ShowMessage("Failure to register the addresslist plugin"); return FALSE; } //memory browser plugin menu: init1.name="Sample plugin: Memoryview"; init1.callbackroutine=memorybrowserplugin; init1.shortcut="Ctrl+Q"; memorybrowserpluginid=Exported.RegisterFunction(pluginid, ptMemoryView, &init1); //adds a plugin menu item to the memory view if ( memorybrowserpluginid == -1 ) { Exported.ShowMessage("Failure to register the memoryview plugin"); return FALSE; } //On Debug event plugin init2.callbackroutine=debugeventplugin; debugpluginID=Exported.RegisterFunction(pluginid, ptOnDebugEvent, &init2); //adds a plugin menu item to the memory view if ( debugpluginID == -1 ) { Exported.ShowMessage("Failure to register the ondebugevent plugin"); return FALSE; } //Processwatcher event (process creation/destruction) init3.callbackroutine=processWatcherEvent; ProcesswatchpluginID=Exported.RegisterFunction(pluginid, ptProcesswatcherEvent, &init3); //adds a plugin menu item to the memory view if ( ProcesswatchpluginID == -1 ) { Exported.ShowMessage("Failure to register the processwatcherevent plugin"); return FALSE; } //Pointer reassignment event init4.callbackroutine=PointersReassigned; PointerReassignmentPluginID=Exported.RegisterFunction(pluginid, ptFunctionPointerchange, &init4); //adds a plugin menu item to the memory view if ( PointerReassignmentPluginID == -1 ) { Exported.ShowMessage("Failure to register the pointer reassignment plugin"); return FALSE; } //Main menu plugin init5.name="Sample plugin: Main Menu"; init5.callbackroutine=mainmenuplugin; init5.shortcut="Ctrl+R"; MainMenuPluginID=Exported.RegisterFunction(pluginid, ptMainMenu, &init5); //adds a plugin menu item to the memory view if ( MainMenuPluginID == -1 ) { Exported.ShowMessage("Failure to register the main menu plugin"); return FALSE; } Exported.ShowMessage("The \"Example C\" plugin got enabled"); return TRUE; }
int lua_pluginExample(lua_State *L) //make sure this is cdecl { Exported.ShowMessage("Called from lua"); lua_pushinteger(L, 123); return 1; }