{"library":"smda","title":"SMDA: Static Malware Disassembly Analysis Library","type":"library","description":"SMDA is a minimalist recursive disassembler library optimized for accurate Control Flow Graph (CFG) recovery, particularly from memory dumps. Built upon Capstone, it currently supports x86/x64 Intel machine code. It processes arbitrary memory dumps (ideally with known base address) to output a structured collection of functions, basic blocks, and instructions, including their respective edges. The library is actively maintained, with the current stable version being 2.5.3.","language":"python","status":"active","last_verified":"Thu May 21","install":{"commands":["pip install smda"],"cli":{"name":"smda","version":"sh: 1: smda: not found"}},"imports":["from smda.Disassembler import Disassembler","from smda.common.SmdaReport import SmdaReport"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/danielplohmann/smda","docs":null,"changelog":null,"pypi":"https://pypi.org/project/smda/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import os\nfrom smda.Disassembler import Disassembler\nfrom smda.common.SmdaReport import SmdaReport\n\n# Create a dummy file for demonstration purposes\ndummy_file_path = \"dummy_binary.bin\"\n# A very simple x64 'ret' instruction (0xc3) as binary content\n# In a real scenario, this would be a full executable or memory dump\ndummy_binary_content = b\"\\xc3\"\n\ntry:\n    with open(dummy_file_path, \"wb\") as f:\n        f.write(dummy_binary_content)\n\n    # Initialize the disassembler\n    disassembler = Disassembler()\n\n    # Disassemble the dummy file\n    # For a real binary, replace dummy_file_path with an actual path, e.g., \"/bin/ls\"\n    # For a memory dump, use disassembleBuffer(buffer, base_address)\n    report: SmdaReport = disassembler.disassembleFile(dummy_file_path)\n\n    print(f\"\\nDisassembly Report for '{dummy_file_path}':\")\n    if report.functions:\n        print(f\"Detected {len(report.functions)} function(s).\")\n        for fn in report.getFunctions():\n            print(f\"Function at 0x{fn.offset:08x}:\")\n            for ins in fn.getInstructions():\n                print(f\"  0x{ins.offset:08x}: {ins.mnemonic} {ins.operands}\")\n            print(\"-\" * 20)\n    else:\n        print(\"No functions detected.\")\n\n    # The report can be converted to a dictionary for JSON serialization\n    # json_report = report.toDict()\n    # print(json_report) # Uncomment to see the full JSON representation\n\nfinally:\n    # Clean up the dummy file\n    if os.path.exists(dummy_file_path):\n        os.remove(dummy_file_path)\n","lang":"python","description":"This quickstart demonstrates how to use `smda` to disassemble a file. It creates a simple dummy binary, disassembles it, and then prints the detected functions and their instructions. The resulting `SmdaReport` object provides programmatic access to the disassembly results, which can also be converted to a dictionary for JSON output.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-21","installed_version":"3.0.1","pypi_latest":"3.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.4,"avg_import_s":1.45,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.41,"mem_mb":45.9,"disk_size":"42.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.75,"mem_mb":45.9,"disk_size":"42.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.94,"mem_mb":45.9,"disk_size":"42M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.24,"mem_mb":45.9,"disk_size":"42M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.72,"mem_mb":40.1,"disk_size":"45.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.03,"mem_mb":40.1,"disk_size":"45.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":1.43,"mem_mb":40.1,"disk_size":"45M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.7,"mem_mb":40.1,"disk_size":"45M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.39,"mem_mb":39.1,"disk_size":"37.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.52,"mem_mb":39.1,"disk_size":"37.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":1.21,"mem_mb":39.1,"disk_size":"37M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.8,"mem_mb":39.1,"disk_size":"37M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.2,"mem_mb":39.1,"disk_size":"36.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.38,"mem_mb":39.1,"disk_size":"36.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":1.14,"mem_mb":39.1,"disk_size":"36M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.52,"mem_mb":39.1,"disk_size":"36M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.37,"mem_mb":45.8,"disk_size":"42.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.7,"mem_mb":45.8,"disk_size":"42.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":1.08,"mem_mb":45.8,"disk_size":"42M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"smda","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.55,"mem_mb":45.8,"disk_size":"42M"}]}}