Created
November 5, 2024 09:44
-
-
Save cassc/f2205b9276610abfd2dab3414fce23c6 to your computer and use it in GitHub Desktop.
opcode_frequency_word_cloud
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from wordcloud import WordCloud | |
import matplotlib.pyplot as plt | |
# Mapping of hex opcodes to user-friendly names based on https://www.evm.codes/ | |
opcode_map = { | |
"60": "PUSH1", "52": "MSTORE", "36": "CALLDATASIZE", "10": "LT", "61": "PUSH2", "57": "JUMPI", | |
"35": "CALLDATALOAD", "1C": "SHR", "80": "DUP1", "63": "PUSH4", "11": "GT", "14": "EQ", | |
"5B": "JUMPDEST", "03": "SUB", "81": "DUP2", "01": "ADD", "90": "SWAP1", "91": "SWAP2", | |
"56": "JUMP", "88": "DUP9", "8A": "DUP11", "12": "SLT", "15": "ISZERO", "82": "DUP3", | |
"8B": "DUP12", "50": "POP", "73": "PUSH20", "16": "AND", "92": "SWAP3", "97": "SWAP8", | |
"96": "SWAP7", "95": "SWAP6", "94": "SWAP5", "93": "SWAP4", "98": "SWAP9", "33": "CALLER", | |
"20": "SHA3", "54": "SSTORE", "86": "DUP7", "83": "DUP4", "43": "BLOCKHASH", "42": "COINBASE", | |
"87": "DUP8", "51": "MLOAD", "1B": "SHL", "3B": "EXTCODESIZE", "5A": "GAS", "FA": "STATICCALL", | |
"3D": "RETURNDATASIZE", "19": "NOT", "0B": "SDIV", "89": "DUP10", "85": "DUP6", "84": "DUP5", | |
"7E": "REVERT", "1A": "SAR", "53": "MSTORE8", "8C": "DUP13", "30": "ADDRESS", "8F": "DUP16", | |
"8E": "DUP15", "F1": "CALL", "00": "STOP", "34": "CALLVALUE", "04": "DIV", "F3": "RETURN", | |
"64": "PUSH5", "02": "MUL", "17": "OR", "7F": "PUSH32", "55": "SSTORE", "13": "SLT", | |
"05": "SDIV", "07": "DIV", "1D": "SAR", "67": "PUSH24", "62": "PUSH3", "70": "SWAP16", | |
"6F": "SWAP15", "6E": "SWAP14", "06": "MOD", "8D": "DUP14", "09": "SUB", "7B": "REVERT", | |
"77": "PUSH15", "9C": "SWAP28", "9E": "SWAP30", "9D": "SWAP29", "9B": "SWAP27", "9A": "SWAP26", | |
"99": "SWAP25", "66": "PUSH22", "69": "PUSH25", "6A": "PUSH26", "0A": "EXP", "3E": "RETURNDATASIZE", | |
"37": "CALLDATASIZE", "A3": "LOG3", "7C": "PUSH28", "32": "CALLDATALOAD", "38": "CODESIZE", | |
"74": "PUSH27", "18": "OR", "39": "CODECOPY", "6D": "SWAP13", "A1": "LOG1", "F4": "DELEGATECALL", | |
"6C": "SWAP12", "3F": "RETURNDATASIZE", "68": "PUSH9", "47": "BLOCKHASH", "A2": "LOG2", | |
"FD": "REVERT", "46": "BLOCKHASH", "65": "PUSH6", "A4": "LOG4", "6B": "SWAP11", "58": "GASPRICE", | |
"7D": "PUSH31", "71": "SWAP1", "79": "PUSH30", "75": "PUSH16", "76": "PUSH17", "78": "PUSH29", | |
"3A": "EXTCODEHASH", "9F": "SWAP31", "31": "CALLDATALOAD", "5F": "PUSH0", "40": "BLOCKHASH", | |
"48": "BLOCKHASH", "41": "BLOCKHASH", "08": "ADD", "72": "PUSH18", "F5": "CALLCODE", | |
"7A": "REVERT", "45": "BLOCKHASH", "44": "BLOCKHASH", "59": "MSIZE", "FE": "SELFDESTRUCT", | |
"F0": "CREATE", "FF": "SELFDESTRUCT" | |
} | |
# Original data (hex opcode and frequency) | |
# Complete opcode data with all given frequencies | |
opcode_data = { | |
"60": 153.0, "52": 32.0, "36": 5.0, "10": 7.0, "61": 99.0, "57": 48.0, "35": 7.0, "1C": 4.0, | |
"80": 43.0, "63": 28.0, "11": 11.0, "14": 24.0, "5B": 80.0, "03": 19.0, "81": 50.0, "01": 39.0, | |
"90": 61.0, "91": 28.0, "56": 47.0, "88": 10.0, "8A": 10.0, "12": 4.0, "15": 29.0, "82": 31.0, | |
"8B": 7.0, "50": 79.0, "73": 16.0, "16": 29.0, "92": 16.0, "97": 5.0, "96": 6.0, "95": 12.0, | |
"94": 9.0, "93": 17.0, "98": 5.0, "33": 4.0, "20": 7.0, "54": 11.0, "86": 18.0, "83": 23.0, | |
"43": 1.0, "42": 2.0, "87": 8.0, "51": 19.0, "1B": 22.0, "3B": 4.0, "5A": 7.0, "FA": 4.0, | |
"3D": 10.0, "19": 6.0, "0B": 38.0, "89": 12.0, "85": 10.0, "84": 16.0, "7E": 1.0, "1A": 3.0, | |
"53": 14.0, "8C": 4.0, "30": 5.0, "8F": 2.0, "8E": 2.0, "F1": 4.0, "00": 1.0, "34": 2.0, | |
"04": 8.0, "F3": 3.0, "64": 4.0, "02": 14.0, "17": 9.0, "7F": 5.0, "55": 3.0, "13": 3.0, | |
"05": 1.0, "07": 2.0, "1D": 3.0, "67": 9.0, "62": 1.0, "70": 2.0, "6F": 15.0, "6E": 5.0, | |
"06": 4.0, "8D": 5.0, "09": 9.0, "7B": 8.0, "77": 1.0, "9C": 4.0, "9E": 1.0, "9D": 3.0, | |
"9B": 3.0, "9A": 3.0, "99": 3.0, "66": 6.0, "69": 1.0, "6A": 1.0, "0A": 3.0, "3E": 2.0, | |
"37": 3.0, "A3": 1.0, "7C": 3.0, "32": 1.0, "38": 4.0, "74": 1.0, "18": 2.0, "39": 1.0, | |
"6D": 19.0, "A1": 1.0, "F4": 1.0, "6C": 2.0, "3F": 1.0, "68": 1.0, "47": 1.0, "A2": 1.0, | |
"FD": 1.0, "46": 1.0, "65": 1.0, "A4": 1.0, "6B": 1.0, "58": 8.0, "7D": 1.0, "71": 1.0, | |
"79": 1.0, "75": 1.0, "76": 2.0, "78": 2.0, "3A": 1.0, "9F": 2.0, "31": 1.0, "5F": 38.0, | |
"40": 1.0, "48": 1.0, "41": 1.0, "08": 84.0, "72": 1.0, "F5": 1.0, "7A": 2.0, "45": 1.0, | |
"44": 1.0, "59": 5.0, "FE": 1.0, "F0": 50.5, "FF": 1.0 | |
} | |
# Convert the data to a dictionary with user-friendly opcodes | |
friendly_data = {opcode_map.get(k, k): v for k, v in opcode_data.items()} | |
# Generate the word cloud | |
wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(friendly_data) | |
# Display the word cloud | |
plt.figure(figsize=(10, 5)) | |
plt.imshow(wordcloud, interpolation='bilinear') | |
plt.axis("off") | |
plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment