示例#1
0
def parse_operand(string, location, tokens):
    """Parse instruction operand.
    """
    sizes = {
        "dqword"  : 128,
        "pointer" : 72,
        "qword"   : 64,
        "pointer" : 40,
        "dword"   : 32,
        "word"    : 16,
        "byte"    : 8,
        "bit"     : 1,
    }

    if "immediate" in tokens:
        imm_str = "".join(tokens["immediate"])
        base = 16 if imm_str.startswith("0x") or imm_str.startswith("-0x") else 10

        immediate = int(imm_str, base)

        oprnd = ReilImmediateOperand(immediate)

    if "register" in tokens:
        if tokens["register"] in ["e", "empty"]:
            oprnd = ReilEmptyOperand()

            oprnd.size = 0
        else:
            name = tokens["register"]

            oprnd = ReilRegisterOperand(name)

    if "size" in tokens:
        size = int(sizes[tokens["size"]])

        oprnd.size = size

    return [oprnd]
示例#2
0
def parse_operand(string, location, tokens):
    """Parse instruction operand.
    """
    sizes = {
        "dqword": 128,
        "pointer": 72,
        "qword": 64,
        "pointer": 40,
        "dword": 32,
        "word": 16,
        "byte": 8,
        "bit": 1,
    }

    if "immediate" in tokens:
        imm_str = "".join(tokens["immediate"])
        base = 16 if imm_str.startswith("0x") or imm_str.startswith(
            "-0x") else 10

        immediate = int(imm_str, base)

        oprnd = ReilImmediateOperand(immediate)

    if "register" in tokens:
        if tokens["register"] in ["e", "empty"]:
            oprnd = ReilEmptyOperand()

            oprnd.size = 0
        else:
            name = tokens["register"]

            oprnd = ReilRegisterOperand(name)

    if "size" in tokens:
        size = int(sizes[tokens["size"]])

        oprnd.size = size

    return [oprnd]
示例#3
0
def parse_operand(string, location, tokens):
    """Parse instruction operand.
    """
    # print tokens

    sizes = {
        "dqword"  : 128,
        "pointer" : 72,
        "qword"   : 64,
        "pointer" : 40,
        "dword"   : 32,
        "word"    : 16,
        "byte"    : 8,
        "bit"     : 1,
    }

    # Immediate operand.
    if "imm" in tokens.keys():
        if tokens["imm"].startswith("0x"):
            base = 16
        else:
            base = 10

        if "size" in tokens:
            oprnd = ReilImmediateOperand(int(tokens["imm"], base), int(sizes[tokens["size"]]))
        else:
            oprnd = ReilImmediateOperand(int(tokens["imm"], base))

        if "size" in tokens:
            oprnd.size = int(sizes[tokens["size"]])

    # Register operand.
    if "reg" in tokens.keys():
        if tokens["reg"] == "e" or tokens["reg"] == "empty":
            oprnd = ReilEmptyOperand()
            oprnd.size = 0
        else:
            oprnd = ReilRegisterOperand(tokens["reg"])

            if "size" in tokens:
                oprnd.size = int(sizes[tokens["size"]])

    # Placeholder operand.
    if "placeholder" in tokens.keys():
        oprnd = ReilRegisterOperand("")
        oprnd.tag = tokens["placeholder"]

        if "size" in tokens:
            oprnd.size = int(sizes[tokens["size"]])

            # print oprnd.tag
            # print oprnd.size

    # Temporary register operand.
    if "auto_reg" in tokens.keys():
        oprnd = ReilRegisterOperand("")
        oprnd.tag = tokens["auto_reg"]

        if "size" in tokens:
            oprnd.size = int(sizes[tokens["size"]])

    return [oprnd]