GNIDA.mediana.get_disp C# (CSharp) Method

get_disp() static private method

static private get_disp ( long origin_offset, long offset, INSTRUCTION &instr, int op_index, DISMODE mode ) : byte
origin_offset long
offset long
instr INSTRUCTION
op_index int
mode DISMODE
return byte
        static byte get_disp(long origin_offset, long offset, ref INSTRUCTION instr, int op_index, DISMODE mode)
        {
            byte len = 0;

            switch(instr.ops[op_index].value.addr.mod)
            {
            case 0x0:
            if (instr.ops[op_index].value.addr.bas == REG_CODE_BP)
            len = instr.addrsize;
            else
            len = 0x0;
            break;
            case 0x1:
            len = 0x1;
            break;
            case 0x2:
            len = instr.addrsize;
            break;
            }

            if (len == 8)
            len = 4;

            instr.disp.size = len;
            if (len!=0)
            {
            //instr.disp.value.ab = assembly.Image.ReadBytes(offset, len);
            byte[] bt = assembly.Image.ReadBytes(offset, len);
            instr.disp.value.d64 = 0;
            foreach (byte bb in bt.Reverse())
            {
            instr.disp.value.d64 <<= 8;
            instr.disp.value.d64 += bb;
            }

            movsx(ref instr.disp.value.d64, len, 0x8);
            instr.disp.offset = (byte)(offset - origin_offset);
            }

            return len;
        }