Skip to main content
Glama

ida_get_function_assembly_by_name

Retrieve assembly code for a specific function by its name using this tool from the IDA MCP server, enabling efficient analysis and debugging workflows.

Instructions

Get assembly code for a function by name

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
function_nameYes

Implementation Reference

  • MCP server handler that sends socket request to IDA plugin to retrieve and format function assembly by name
    def get_function_assembly_by_name(self, function_name: str) -> str: """Get assembly code for a function by its name""" try: response: Dict[str, Any] = self.communicator.send_request( "get_function_assembly_by_name", {"function_name": function_name} ) if "error" in response: return f"Error retrieving assembly for function '{function_name}': {response['error']}" assembly: Any = response.get("assembly") # Verify assembly is string type if assembly is None: return f"Error: No assembly data returned for function '{function_name}'" if not isinstance(assembly, str): self.logger.warning(f"Assembly data type is not string but {type(assembly).__name__}, attempting conversion") assembly = str(assembly) return f"Assembly code for function '{function_name}':\n{assembly}" except Exception as e: self.logger.error(f"Error getting function assembly: {str(e)}", exc_info=True) return f"Error retrieving assembly for function '{function_name}': {str(e)}"
  • IDA plugin handler decorated with @idaread that resolves function name to EA and collects assembly via internal method
    @idaread def get_function_assembly_by_name(self, function_name: str) -> Dict[str, Any]: """Get assembly code for a function by its name""" try: # Get function address from name func = idaapi.get_func(idaapi.get_name_ea(0, function_name)) if not func: return {"error": f"Function '{function_name}' not found"} # Call address-based implementation result = self._get_function_assembly_by_address_internal(func.start_ea) # If successful, add function name to result if "error" not in result: result["function_name"] = function_name return result except Exception as e: traceback.print_exc() return {"error": str(e)}
  • Core internal handler that iterates over function instructions using idautils.FuncItems and idc.GetDisasm to build assembly string
    def _get_function_assembly_by_address_internal(self, address: int) -> Dict[str, Any]: """Internal implementation for get_function_assembly_by_address without sync wrapper""" try: # Get function object func = ida_funcs.get_func(address) # Get function name func_name = idaapi.get_func_name(func.start_ea) if not func: return {"error": f"Invalid function at {hex(address)}"} # Collect all assembly instructions assembly_lines = [] for instr_addr in idautils.FuncItems(address): disasm = idc.GetDisasm(instr_addr) assembly_lines.append(f"{hex(instr_addr)}: {disasm}") if not assembly_lines: return {"error": "No assembly instructions found"} return {"assembly": "\n".join(assembly_lines), "function_name": func_name} except Exception as e: print(f"Error getting function assembly: {str(e)}") traceback.print_exc() return {"error": str(e)}
  • Pydantic model defining input schema for the tool: requires 'function_name' string parameter
    class GetFunctionAssemblyByName(BaseModel): function_name: str
  • MCP tool registration in server.list_tools(), associating name, description, and input schema
    Tool( name=IDATools.GET_FUNCTION_ASSEMBLY_BY_NAME, description="Get assembly code for a function by name", inputSchema=GetFunctionAssemblyByName.schema(), ),

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MxIris-Reverse-Engineering/ida-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server