示例#1
0
        /// <summary>
        /// gibt eine 64-Bit Adressierung zurück, mit Leerzeichen am Anfang (z.B. " [rsi]")
        /// </summary>
        /// <param name="index">Index auf den Register (z.B. 2: "rdx")</param>
        /// <returns>fertige Adressierung</returns>
        /// <param name="ext">optionale Zusatzinfos</param>
        static string R64Addr(int index, AddrExt ext = AddrExt.None)
        {
            int constBytes = 0;

            if (ext.HasFlag(AddrExt.C1))
            {
                constBytes = 1;
            }
            if (ext.HasFlag(AddrExt.C4))
            {
                constBytes = 4;
            }

            string t1 = Asm.RegistersR64[index];

            string t2 = constBytes > 0 ? "x" : "";

            string str = t1;

            if (str != "" && t2 != "")
            {
                str += " + ";
            }
            str += t2;
            if (str == "")
            {
                str = "0";
            }

            return(" [" + str + "]");
        }
示例#2
0
        /// <summary>
        /// gibt eine mehrteilige 64-Bit Adressierung zurück, mit Leerzeichen am Anfang (z.B. "[rsi + rcx * 4]")
        /// </summary>
        /// <param name="index1">Index auf den ersten Register (z.B. 6: "rsi")</param>
        /// <param name="index2">Index auf den zweiten Register (z.B. 1: "rcx")</param>
        /// <param name="mulShift2">Shiftwert für die Multiplikation des zweiten Registers (z.B. 2: "rcx * 4")</param>
        /// <param name="ext">optionale Zusatzinfos</param>
        /// <returns>fertige Adressierung</returns>
        static string R64Addr(int index1, int index2, int mulShift2, AddrExt ext = AddrExt.None)
        {
            int  constBytes = 0;
            bool skip1      = false;
            bool skip2      = false;

            if (ext.HasFlag(AddrExt.C1))
            {
                constBytes = 1;
            }
            if (ext.HasFlag(AddrExt.C4))
            {
                constBytes = 4;
            }
            if (ext.HasFlag(AddrExt.Rbp1ToC4) && index1 == 5)
            {
                skip1 = true; constBytes = 4;
            }
            if (ext.HasFlag(AddrExt.Rsp2Skip) && index2 == 4)
            {
                skip2 = true;
            }

            string t1 = skip1 ? "" : Asm.RegistersR64[index1];

            string t2 = skip2 ? "" : Asm.RegistersR64[index2];

            if (mulShift2 != 0 && t2 != "")
            {
                t2 += " * " + (1 << mulShift2);
            }

            string t3 = constBytes > 0 ? "x" : "";

            string str = t1;

            if (str != "" && t2 != "")
            {
                str += " + ";
            }
            str += t2;
            if (str != "" && t3 != "")
            {
                str += " + ";
            }
            str += t3;
            if (str == "")
            {
                str = "0";
            }

            return(" [" + str + "]");
        }