Example #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]