From 0537d14aa2d6dd543a0eecb8e49c17db51f59201 Mon Sep 17 00:00:00 2001 From: Fare9 Date: Mon, 11 Oct 2021 00:40:57 +0200 Subject: [PATCH] Added vm tracer --- tracer/README.md | 17 + tracer/example1.jpg | Bin 0 -> 56902 bytes tracer/example2.jpg | Bin 0 -> 77218 bytes tracer/output.txt | 1612 ++++++++++++++++++++++++++++++ tracer/vm_disassembler_tracer.py | 300 ++++++ 5 files changed, 1929 insertions(+) create mode 100644 tracer/README.md create mode 100644 tracer/example1.jpg create mode 100644 tracer/example2.jpg create mode 100644 tracer/output.txt create mode 100644 tracer/vm_disassembler_tracer.py diff --git a/tracer/README.md b/tracer/README.md new file mode 100644 index 0000000..71da168 --- /dev/null +++ b/tracer/README.md @@ -0,0 +1,17 @@ +# vm_disassembler_tracer.py + +This script takes the values obtained from *miasm* while applying symbolic execution, to follow the control flow of the program and generating a *VM Stack* and *local variables* used during the execution of the binary. + +This will be helpful to follow the execution of the obfuscated function, as the obfuscation works with a virtual stack, and virtual variables, we cannot easily watch this on a debugger, this tracer allows you to follow the execution watching after each instruction the result on stack and in variables. + +* Example 1: + +![Example1](example1.jpg) + +* Example 2: + +![Example2](example2.jpg) + +## Execution output + +You can see one of the outputs using as input parameter the value *5*, in the file *output.txt*. \ No newline at end of file diff --git a/tracer/example1.jpg b/tracer/example1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3450b2b75ef45bff155a653d67a91e627355fd87 GIT binary patch literal 56902 zcmce;1z23m(k?u>dvFcGA-KDS;O-8=AvlEK7J|FG6WlF0VX$DqB@o=*{U5R;d*8E< z{oi+Q56|>k)wQa<>s?hfJWM})1E5O2kaz(A0|Nu-gFb+VIeL1RB`GCjdSG3;+%RYU%F;2?Y)T4F>Zt3xNHDez|VV%r>uN z6OmDwQax2O)u#H!H5+mzL+yXfS}K!xrC+3N;eIr_=}F+ej(r@t}Q%4Y^3L%^^1%kg;#E3AUS}45w-2S zy=AudBJBppko91uUIw{Ny-Cy30`Uj$!Ku>bZo{_cQkP3|!O_H5J>s*Xrgq4Gwmk&9(b-m<9MBPeA1t{;CIbfjqjj<0jHIc^>Ek{4@RcHMXFY&hQYqC^V1= zNk#A%y$OPy$-VXk89#;!P-5ru(a8Ha^*_E{9h1S1vaF0=wqAWqWeP>>Tc|3LDan7wD4 zqY_Xwa@Pdaucc%G^L8JY)uu3r8_gS&r@jNi8kO;w#=@#4)|@nsyrif_>7Hp zRnBjF#%WoP(va9PgwkAn0vxv}V5-es3)DO^3+MwHM zM9JPS@S!bTJKAcbR|Wv!Mo<0sK4$F(<%0Tv?hy?72BQG=$2o#1W!k)_V51(mFmlM* z{-cMWOkLC}3ghMPdjLwwiPF`z)`HFU?fjiEB*#bnr*9;}pTr%xq&yfPe-)a=5bODKsYaX zCr2W=@WvHfWo1EAyF|HV{y9PIomGnVjvNZ80LAL*NjvCK#A(piuf!uBSh|OTqBTnd zgY%0BK$@GadK{V`38LoB+l9mgg!Oy>Bm=MMOWEfQ_a-Vo^jso?h|*evf`Q0eLaF{Qs59-AD}c=f5!d%CNm==XlY7Bm6U z?J`dedRr9z=7wkr%qM@csVA~wZOa?R;DBTrmH)bIjjqlZhQ28y=W65!D@0RX!-_-G zhFcozJ&|Bs^Wib%P&5psLp`AaH{Zug!QT>pUHzU1w8kI15R4g5w`HM2y(=a>OzG+V zmtVX9{&Mu{f=;s6ih*0Gba(mL`%WrHze~YQ;;mbOV|5}(n)$9YzxxE@0G$B324z63 zjYL-4SMtD{~{tMuO!X!sIk}RNmTt;}~>c)AC6 z%Xv2Eyu?{2jVFSCJi)z*p6QtCP9I3`Q10Ub+}>;q-zWDhh$OdxMm5%z>IzSy#iVq| zr)2T|gCE-JkNl5s!kov0%kS$R3Pk8{I`rP2XZP>h@3Sc_6{rcC(idxjzY7+_cTanM z-vR*F!)yW>c`fVr<%7fHB(l+6@;*lV2|;x;`wDK7Ln*77KbR3dv*btxeOXfH4Qpd` z#rIe!bDlHIb01FrQC^8=CFMeuD6Yu z{ATD~@^I!*b9-l#V+;gt48QI6?)p*!&u0&<>DZ5}WWm+f zJ2kiRagc*HFc>#~WLmu=Ulgl1Xk*D$3WEAV2GSbebqEsY>FxRD++R-w1lX`>Qu7~O ze$2qm(k;9Mq}&GY^inbk1=GmiWq|`d9{{mhRu@z)c_yvAKbXN>-#MDwack4QV5;9e z#}(!@Bd(#OHbH>pojYhiU^4?Br^+ynTbhzdHrTpGnPk$xpBZ zJhos;Fb*PjWyz7tA)M(yf*3z%&9fXj2LgWUi!>r_2{-raXC;ekR`gS}D8E!Mos%iH0yANT zPrNiQVpRwt#-Gm5>qTmZ{_)fKgy}8I3f`iM_#TMf&NwGhlrEutmn{KPa zY;V{$Ht|lXgAg%z<9^IMm?KEfK^Uq3Nj>}=6g-ReKe`J8!nN2S^!*o93tG3}5Z^H^ zI4X#3GjWS8j@}!z{W1YyPac;w0Dz`n@qI^vLj`+l7=p@R)#>CP3s4(XzH4Q0OoS(o zw;F6I2F8QxfC>!7ZvPrUfJxDJHZUwW(a{t^P)#&+^kz^`<*5MRitqtq0b);$0e}GC zPH)h|Ug8=}Us}9J0ln5U3#9xrP))EWlVWH#-vnG>zXY!O5b=G>*^q1|hDv zG?I$O@hU42=PNO&Oi%{s4Tyal2mo#f0zxJzcPNUN5!PWUj%AD9H!e}pE<%!r7NydB zWC3)4KtN!991kNAZc%lLwHQ0}>{$Q=jU)nOCU}S7pJXCEvV%n-P-lX2hoa=c?{$DE zV5;6A3IwVAb5I6=^w+`^e7x|b^X;a3>?N*pUVwKdXdsnHzk^c#IJcDge0XQ9qhX z_1G2wz*rFrQ`j4{)JQYO>EHnX5`^SnP$d9pDh;#8B?xLidOwyoD2E`$QvBX$6FR!8 z&Bqczmox(WxKt+S3RhJyd1%QDbmgn4=>NEu!4lP#n?U!EJCz<4@c8}-4oYAUkf3)_ z00ig_6bu>z@B|$bO&=BOsXPf8lOU-rISc!^}(||QK8eY zNoM-gJ7keDn{1uBi7CgAP}uf64KptBVS^6>Kh^OuvlA(Xc8f zmozQz{=GyEh=b>8uaFY8LHXBHq(q&q>8+Np?ALlTUoLL$Pl%Rl`a-&JeRoqlmY=7vBix$DJA;+y#AIDH5r1ya@$uxv2#3LI*Pv&7mWqGdX}#jP;@G-qau;CN zWr;^izUX{2x4==4Qfk{hB$1BczVX#&Z1aZv%&zWg-ZC`d3PQU4t0N3a6Gs~M#%P_@ ztz?8U{`}d6@lb7;sm7FRc}361#eK^9rbVZ(E;{?6I|V(ACWFle`L@qtU?{|aa~pPL z%zCSI1bF+MhA4W*5j~9;F_*IM{e|N)(R}Ui9{?ue=dEtdPZB8+!ghF;q&g3q7aFTZ z+^0wSw=TlD*TuF5D84m}X`_e$;W~`-D?1$MFnBQz0+YX`^7GqGae8L#VFz@Dg*H*m z(8JX)QuMSmc-XK?%S0TY?)vXbOxH*Dja*D=kGvtOdj0-&9h0NTs|K9pSDcfO9ZcR0 z(_AG!(GiJUfh|@h3+&9OT0=c8rfzmEG30aPqsRkvF3DWIx?5B1L@-t~x6$9ev!Du#J!h0AfO_ZW{SZ#gY^7MO@QF zc20Xwh=P|C9sVbrw9lDm98J`p1|5bm>q7YJCtvm8FZFv>>DeGHd-Vt;oe9Kkk4WY9 zqp&x0j!9+ELHQ!CRI1ZqMk(6BtQ;Jb*Y}_Rr8GZGV?bw54oz^&q8gj8%hYX;yK#2K z;_-V~$`yGCv<^?+l->Y`XBe80w8Y!JSn7AMo{8UJ1K0Vv^ z=_!TsO>p93C7bZYWw(K(vzRa>&9{g*w-Y(`lkmVe8Q8_t%^UQ#1h11jMX%^4-*#wK zXi_#XCt z#WcuxSu#u-UjbYZp$aUpr12*an%I)b$#UjJU+$U}o94nvbKC@?n>`zELvcGc6UWBH zHF}`YBcX5uT2~x-qw3q`&r~3yuUOW18W$i&VEXmov#|knVRuPyIPj1WYXYT7gc^F_ zMkE|lKj8;Z3v63x}#!ZhWm9vBTy68D(5VF7V(IN?K zog&Z+q9@!H4kkLB_8Kp0ZJFc)D`n!y&ZziY-Xg@M); z$wwubH}c;kYmzlY>Ws}INO0B_YMkV+C;NCXkMGCm(@4LX?`KPhjYK|rmZj%uDs+Kbu6LaoHU)Rg4*(x4$~wW95`}#T7E>$}#otQc|+o$*FD2#EyKs!1Z zh+RyV3A+5IORVJ*>*ofHwr!~@A&2ZwaHkoJ7@F^wMbW)KJM@gi$OX^`Hn#6cIJtC5|@=bp) zIe1vr*L3a(F+0)Ly5!5^iu$BLxFz4lr7#$QIQ_P-B`iPZ`AjxMB(0q~kM%kxCge@B zB8mV4b^%<+i2-93AF5jqKTLN9b2bBVoy@1ygQMhpS?@~)E79rt^b@ZYoQ0cP zBfbN#E`GY}{?sP!Sq93sFQMAfcVq{+PG{{_6@{KwZnzv_8_kQiZQ;#f>$ortB?9ed$W$- zb$=~&wvTxMBdNK#EXKJlD1uT5-Pk#{H^76b0lb6|5w7KfDKc{`jyozLqQ{(qK4gw? zLzW7eSgZ4|C}*>ZS$2jPl+Ec6ULq#QjmEJ3C}$KP@c@{(ykk5u$9(T(59J;gb|;J9 zQ*;vd)%F1(uj8i{aGW^E(GBK1@hpOJ3{J?jf9GtrraP2!#8oE4flr;_rBAWt6g^(% zve*Wlod8ZO$q{M1wRYYL!wIpHc%T}ITA%vj_|om$GFP1`lryMlwl_A^p=0jyIL{S1 zk3AS;vE0krbc&_bJ3U~cH}{Qnw2z$YBqM2h>YHfZlJKKtVI1-f8ZU~^n`SQ5;m~K6 zsjs{M^7PxcnU8s7y-m)J(i5>zy&q5YbHck7boo};aIZ?HI9q#W(aEBr}k z6ooMIT#B1rTt!S=p@d6jy)t7(;Dl>@_;)}T8&Te%b{Lbux-lvHq6ONauK>U=!e$mL-~yZhF+jHnnRQ`u|Au^R_uIZ11)-lff^#ZphAg7H5O3^t^@mqev22T!n2&{K$fC zGL%>}a+UPOwSB9&2cv;gF*|Dcs!QDYH7&bA}B4d+QX_mbQ4TNCHgRw7;Bc5@-$53}LB93*%3GfadNFta!kd-+Tin_qh z2ac!^oN!{Kzt{<>Lx<(Pl*;94w2oEgA6|8IRz5HPmVmPAlC=5u?O;r)E8zu1CW}VZ z`vrwnQ#5c(WGf?(Xw(X{8HZ1Y#rLG9qJX(VXBfd3_ zxR)$WFGejq?F8;{zGeYJ9*+Ke9t1FiWVDI=dB%IG}@CRXsLKw;*~gGfj% zY9j%kl^$MyzdmuyJES)pn#hRFf3JLZJ#5DRMz_7^Q28#7^dH5A{Sw#l?{v9#gbvza zxQw;Cm#ku^WeL-3=JhX=7$^u=-Rf-+2104R=gc?5`%i8>1hx`x5e)dMAna*o2H2l) z2+hAx_rkBp0gO~)>Tgb=lf2~ZRKp|uR6&4Jp|Yr4mAvy!E4Z?z*1xOs-cFUFeOlgB zza_NwdFG_DMrAc+JVpTM%`{yc811jmtB`-uAXZ*^-sA!jA5~|zqwt^*%?Yz&MQSY z(;*p9AkC0s@kR;*q@sMfHQS?#A+C7IXTcLx5Fhc`G-J!fe$1PeCWIhZ$2lUeHq38` z(KP?OHaubtM^+Zxm_1-Y{zzPLAfwBIspU<|LWv7fp~#2j&vjK$16%qjz{(aQjRQ6; z{SVA`NokPgFS@bPIwOn_4uG3>tIAlNUJ=rGY1k|>>|BZ{CMA_;GS5!3*v0%D-M;xP z4<{*L2Wn9)%ew4501&V*(+Fo7?4BAWQJB)fhdvX^Mp$zc(2yDTXdONo^5Waz7g!F< zOK1yJ;^G11NYhnZ3x4rrb&i#Yn9e0ig;HMwtDKJ&qVDtdcbnlS31QU+4>3xn9l=*a zKqW`;+YWPpSyW>Hp`r*oM3+S!Wc*gX&r~^dYJ$XAKKrRK!wTf0sYEr!*4xSYI-Gn~ zv0TCCuMmWGY_`O<@@0{+r?Z3Ml_Y#w$b?30@%mVrDk>RD5aULv7mxOzhTrUDb-DC3 z20SrN-h@~l;T!Y5+9oTE@tcgZZc&m(D1a%A4rG#{^D*PIzN2bk?Q3tpVJJ(EQ{YeY zpKVajq0)rH;Ynq7+aw=*00dQi>I`q5IVD$4kl8)3An7~lPTYr=1*G+$y1jtq%xW_C zBrPdwf&&L43l+(4$VwOleD1D`f4WC{3ox#NTqzUOS4`ttRpok5rhYumOiPia|n zD9Z_k*WwXIAR~Mj?$meWy5DYKj<2*FI_I17O9W5Xp*FG$LT*(oH;} zU&d|}p{?g+aiwjTTtd+|;-D$sJ&)~!iKO&DyAcVUrb z;7_VDD+assnx2(b4H>ieJE|E=&&9*NQ}VVn#oCbXY_u_FimRlOenC4x+{AGed5^@+ z00Yvhq^oQAr3x)4mUgQYEaoQHYR-dPTE}?P8YKuD&&%LPIL`o2&WD5tBuqb)e8neU zGOBGV8RWzAcmQN(T&d!Uoy5n!K#A~#rx;M5q8ILEy>75eke;{>NWA6`Wuq|I-+Eqf zJ6{m^P2~Pr3xCW6(Z6^ga*Dgku-!7jilPKWJ`9IU34yd<=%d9de9_UfEO0- zyK?Da4j@V=2G3%M*Uk3rk@L6`w(~GVtAb0(N2nlKy2Ske8Pc-854Rsyiw@0%5Aa?t z64jDapljPJ_bF8nSvVmptHEBbkwvBi%(@ZKy;U6DpkxQXaDo5O9JO4$aH^~G060Bw zeaQ(p?DaT-sJmTP0b=R9EeJ#m3(%`3k2V)dcnC6aa54*Z2U5f#YbxOI^IcMSzVj%G8lgy+dH zjh(q*neh4a9z#63kD{|v>g{6{EG zm;5`5GyNMB_vEts5VI`5RoUq!+#r}b1Vt?+#Ix7$vZWzzA@FRvrcqsQ_a#49F7quP zfa%n&Zil%_W;)`Grj9U>$Ihn97GKBmrZauoX8~&W-O4CnrdvG#;6A|1RIwpusED;= z_Km~n806qarFzmJuUeb(9J$0Tvp=DaztJf2j_7s;%lA=b8ZKon~j` zBz%F~lpyE5ly`OLPPZ=Jf^g8R(czP%_oeDt9)qJz@^s1#!1JlsVwA4EMKX@{EWqR<1Nn4WH30ZcN>rSZs=ILz${eN%}>x6`P(@C88# z&v}~OHumHvjV=$8HQ^JK?o=eojzaC*59s!NvDxwsbCD)+A~A3Y$(o3rH0ai(7m7$l z@G{{FO(^MHzQwvlvy>-`_$Y^^7LbloHX$zT+jZebbw*Ws z5aFM|EzKX`)&%VjaEt!`AKYG7&`zl1>AZao`;@Dr)au0o+krsN=-y(%KF9Y_u-A2e z9=y(utSPhGY#i#RzZBH|0ML&RNJ&`vxQ)S{swCBa0Od*EW0bw%utqq)$_O%W9wGCh z6rWwyK4A&$h1j{h4e6;Tn7-!-55&E#Prc3b*YR9d_bq3wkNC{1J9l1rX1WS?6a?&h z1*o{B@62DQrF#+3o(KZcYz!wM9c-)8ZnbptBI6rzB48KPS&9ts{a`!HC=rY!or9R2 zZ|>VDPK)>;p+b3CMm}J%`>S`1-}>`2an7)MV-Z75E6+{ly&q}7u;~NY#_#PKu$qG+ zobyuNzfC5tX!8E)M{KkpPcFXK}HPlVUaaI}WF(5bk^zGix?3FrfJk)Zqax4VSri z;T|WOKP_3A2&VYd zIkaxKtr!%ia#oq@g0Y$GDlND{xZ4k%cs&fmxdm+mrQItNAO2;GfB>$Jdi zOO<_t9mh!rp)JE-dxT$C5SS&ILW1)fmj^G-?WAQ}GaKQoj>5|v7*GQg61Da@L>?_< zFhzv~34IwHIzxv<-u#M}ai|SYH8xjiT^*GxO>!TnK3`_jgOz4FxYUp6I+>_wxsC9? zRi_ciBz|>|mO%Xgcq)Skx7IEEY5|C;{AQ$b$fae2Yxsg8{0bme70+@>w4~Jk#szS} zaO~K77Y?I?|A~axSX!y+!+U2>nKZ(w%?ALd3%o{ra^GiH{*0%Wv(WMqPm+6FkMxj~ z`^)&Y%Igxs4K}g%}P8^PFINRqYQUXP8O{(VdENS~$6C zSk`ZjSyU&FD1ayBM54^74reN}SI@emjG>ShwQf_DgX;P}JperN=u>VN6@}utdO5gz zChw$L?>kG_0no9e$(}lJpVkSKefM35c6hIpdW=w9yfbt<5~HX&x7ZbUt+TM0(1Rvz z@26e$@^>t5SlVKu*s$YYa`(WMxuhNNi>CC)wwDczh7X4o6%8;Wr&$TC#8P;#+vE^E zwoGlZ64bIqP|HjkuTzlRQ&zT#@X9^Qs`Db?I11!l&Q52?3nh5FTb(`lZ-voib!d1p zq;a3H4!@QDI+!1B-lt)o&oHhc*D3`k!Dj;=rL9rB(mSZ9`6&f|*xePiFMVU%itX4Y zqVSDH%XQOGJTKWon$Y6Zn5AMC*$LLw%<0V$tOS>1;l2msD^vxxI7Qak_bV03nUF~l zIi74HD+6wma`7JAN*M%tg&a;}zXpS$M3XL7D<{-u{&mX+Ilq zF@W8zng%mFH0L@Mwr`i6>dlqF_!-?2vV2X2IzKztE`4SBUV;`+G6*ni-h2EcuOPs_ zY#?H$5NB9cui)Nf9Phm*^j&&y9JHSd&i$Z!fE>o2tVf0kkirevX}$Ayu!$f?)lX#q zPOWG;=8o~LE_|LedyRKs-f-7AaA{D`gI*HP?+J9l$xN3_AscE9(hc{^e~`ug7g<|; zs%9MpElj{I{hl1CRdTp@oBoAbVP|>v?=`oyUxl*|kUapb2Qwirb+K%du7157LMW#@ zt5K{Vkmk7d#Nlb5QinnLTxEyGBGVG}Bbr{(y9sMjq<#J29JvYY7SE(mOiZOK%>i^oqxs1RMVO`1I z*V?gc&{Rlr8`bYp;h(#aD&rxs8r`rRWAe(?a-Dmm;3OU3!_}AWuy5LjX(FL~ zJku=>mOJg(dP5V(IQs>hC_w;42|thx?6i@}0#P0>W7rglJ#$=mgkyK>mnilCoaKZ1rK| zUa-=gSwvUte3~O&=aN<1-+MK7Oop(H>l+EBxyL z>7|OQgl|$_Y4=d~-xbK52W%PUmbNC@_BL^B_0z{}CS$d#6i{vA=)cmUJTok5Z_yoz zA!gxzH%&A1@{Zeqs_p9$nYz)sl8yA8c8P9Ujn2zd42wkk`%0Sc$SCQ51sN$!5h`ah z+FX2!cZr*;Q=3wWn97d6SFO~h*;dT&)RiA<$ddExM$w3tL5rce)oB0Xju$Z8A4N%* zBuS1C)(EX1%f*=FnwL31nnm%2!HJn}Qt>|nZP;YF(bLmd6l{0eGBseS!uk!sA&>Wl zqxGXv7s34R!&1}vWVC&l!3*4>I;kgv*4Fp zv{oC~)>+~9l8ct3H#J<*5?U~@jn+u3$EqkIpXUVI@S+PLvJF>H94ljSUdrmFw1(59 zU~$Zy*iGcp*y?|5l}1}-+p}hofUrrM z7XncWrdeA%?6S41F7wFVgC_mYT*aeOMd3=gDkJ)NLxtPLjX#Ikkbz`E6|+BO_y-eX z+cwXlW$Ax!V#HgJ@L<$OP_+`)>ph^|J5{yvf?9R)H%fI%>2qCmX_%T@Gr0%eh94ng zacH#Q?!=pgkUED@65p;yV2Q-ZPJBZkDLJk5(`!OR)+Yq<1R&y}Rq=(;gdAeRA?lP|&M zKAH)#SeT!qgu2pC?rer0*!JOj>&Tf@-@L;j(#zwXMu}tr|GtE`9uUZHQz-rMJDbZ>~%G=S>OHQkk>^^D`XmYx)mWbkY8etjl%s6rZh zdmsD&>2$dQ`I72yD96_QyWRFri6d^Oq8o4=C`sp}&Lo*5sFaHAN=|eQn$MS1wkBv1 z8At0(5QXDj1gA(<5j_APoo|&iVijoIWfo(d#*4}>p>C&-Z>RP$S?cOCE}-;dx1hRO zle1$W&KoIx8zOw`Ns^B_sW!K9_N+ z{@o#ByB3;z5CrQn-XJAvq3FJokN^0#1ha9w23Fmg*{b|ym*M_oDL#B4zLoZTf3$EU zAcpFJe|5CkliQ07ai%4{Fd7 z;Lw*2LnlO6wzS37Kponv&J5Adi4d&DwNB++m^qL|*CC_X&*Jy})%Vc&H@=4f-3oU- zLoBA=q9tIl+7p4A=7!H?0+i}BWTrTG@Vbgt1hgx0=w?I37i??_zg#2CAlHcY+~2rH zYW~x6aBVA7S%YMUY}l)ScGYDJ8e6m40RCRwRnI27+USzuS@Sc3m68Ri;b$$t)MsQ1JL~W>!S>F4w1+p_;iATLxhuv+A8fraV zT~x*;wrjF_{kCu;sXg_WLt7^^QfQ-7=jqo0tL&_EuV*<`1+`v~4gZmI3HcNwHOaqLfdZDS{{qadd>;HL%7KG)g@^| z;OhahJUmy_R(X{Gu6rheIu(EJ0kQnygxi@@8r>U-7H+?c^8Cp>VTtwUC)HaQ%c#-z zTMF~n`n_5CZeL9HtyvvpB?sb|JhO{Dj@2b4c8s0`FAtUzy|B2RB%5AvTj_l#eIcM^ zP#)v%A=0ICFfr*^xkPcgjeOslq8SHAnOHwGT(J0FSYjYg++oX)^j*?{L`q}L=pYv@ zy>j<;@P~`uZv_li@9k+rSlyjD@G5*EZJwuFNrZd|CbSK^Rb&ec_)@@B9fA7#NgnL# z$Et879kw(0dNqR@ZP8f-OH{J-Bw|<5p2ZbsUIWYx##s+b0oF6sgLUb=)OmV%j(CY57Py1FpVT_;9w{xbJYx=2)PgO6G)-xmOfJ!r5HW zo(F}a#helxI4oGEJpi09{lv}g&-v4gVpc?P8P z<)pVeq{)a&hr5Z}w!W4zOCT|0<2fll*rM2-B3CFYuM%~k;caZJ%R&t$IHIhaHxkWm z-K&jJOa3;Bwo3d^R=Sck6ts(ic_*u*DPGSHaioLFBPc7A$AxpqxEJ@nUTb8A*xi~! zRGxHmvh2?lXUs3BXTa~SG~dNGI$0OlgDHdYxLhu&8@tVl>vF8ziHhU6d+pqx%T3?& zu}OOXkNG)21T>iyzo&3CV@Q5qcfwC>g+KL{cspdoL*a>3gB?nNfKa64+!^6JTuMm? ztK6HRyVTnAumhfOMz1PoNu~5O3gl;L=PylZ#=MeN%By-<2Y3KeqkSW{GsBgzTI{E+ znU!RlFkkhfCFhv?ExW>)zLMlSuGCO| zDN!=f#BXhMuE?Fo`?PGB=d=+)0LnCn)PLoi|0nwApCISoZCs4fam3dtDoqp^b3uXb z3E$$g(PLSD5Auom3@$7RxlSahSRV);ZRr=@dwaxOzR)hX4Pa%YOu&STal=tjSP|~w zTDVBv5SVY}Sp~!DS0Dc779dBxG!HS~);IR-oRiSe2G#p0j!AYq|LM#XyQ7O<&h64X zwTY%BCDZD)d*F&0t`M1`CE-T5JDUyD#sSDOdQe_RgU(%nXO}VB!+$|ig0dkUvl5d_J zCG-Poef_pyMzM`kCzc)TJ^(%oA7h%z=~Kcvd(Ld;WM}6xMhLka)J{=IIWB!($Q)v^ z)`T}AlJ~agG!n3Fc$ z*ot@#!ZDSj?mfgJogSv9Be5lq^@c7-BQV$=u&&+3C{cpm7N?w_92^C7iwL0`b zgWxN8)~gtwj@kc_Uce;NNPx>TLSd4Zt^U} zk?Tb%bl{h_>Hrk;{ktbJc7T|cmk%h=V=_X*m=SBb=SsS zq??NcR84Z(W|~*BxiJ*lP*IkzRl~(lLfPr}EJiB|?drM*KYt*jhJZHHAiK5~19}W1 z@M-3ja38VvHij!b+LcNX#=9l7{%Th$mQ@&GY#*tU+wRuzdE1gj!EfS(RH0H8b?vyW z;B~V6vZCj6{zB4qqk0RESyL1z#RMbAouRhI=WOse;RA=|ApyK|Djg^F>foL1F9G{p zST1|qZQ~53@2lTk3-t%A6Nhl($@$4QUMZ5T#ZZf8+0~PLMh~RGU|_Am^;agF72D6D z=l&q7zjzQtcYsiDRbEz1TrNg_TWQ#&GM*>n-<*|ZC!7HjOjJ#l{ER~7vf3y2k_{mv zj#O5IIaU%I-yX5O(B6RgL`o=8OjssYcl(t@N$!8vGrJIEpGfv0?IMU3rZ?J4VjrRne0%IB@j!3@$~MI&aOzw+(%z za@27~kO&6z`gS%Lw`&#b?A}vsWiDLXg{Ma(^j>SoQ(l<9&5lk;Em^B) zoruBuM*X__7;yP%_;)9G(}3KQd`S|tl2p!n|6Snnu) zGSh~uUoF9~2f0J$5p+d+J}M4=;*)h%CLy*@#w0x~$t0>Kxjg;~E6ZCEMm!-c!KKwl z?riVd%`SxclB{{PZ!t(3LTHOahrH>hnaUW>*TLJQ%$Y}?AmXgXdd2WxMqAI%|BSYV zRa=C4Wu{HcU29uD=Awwof#PxQs`a&Fr)_CU_Nc*OCv6evo_DUwSp!vN;L5Tzd)wa8 zju#ZhC(0ITtDbEoO}B4Klt-1MqNj!1W5*v<5c>()ZsBvLc|^$}OL(No$e^D?>VAf8 zdGlDnkiDd%j6`{r)k=zUP#XF(3cDeYBrZ|5)VI~5(}^1MLwu47%tftrEaA%@7;@C_ z307K?1jmRqzHJba3}&T3Z*YC(-O}|)kV>_UGfS+Gel_F44)z)z>sT}J~8EPnL9^d)YN)LQqB`mLm0vY=xxY854(~k#g*Z3l1 zp8EXSYmDI%tJCcj^r}jAycN}JzlPw7dk%vaU|EJV9iujz`DsrGtI zBXdi5n1I{m5q0Jc=*7u14UZ6`6!##57E zmz`NxHFHF)GG)5@O2o7?;vpDx2SDO(hk*-*uhpN_+U$r`BuD>KM%o|G%%=Awyr!9qI<^D?|Oo<_V60I84hsbHGQ>Z^)7H6G7PtcdLV z_&91y9KEPI?QJorYv_*ygPY>D@9`DFc0Mhf88ui76Ut#3*GAIoNkJ~Kh3()CyB1bM zNyLPH-h3v>PF1u2#0^K!lS3qeG_wxk_O1T-rfaf!Wq+g_n{h;uIdK|X6&-%gA|x@E zd;j}p?imhrhc>-S^_I(6EL=EQ6E$hxL~;v4_;)ndWq~`?O%Vtn_`$nzvf!|CPc^II za_PhpQvuJ~Ie?Oj^s75t?JD8&_=J6;=&6aY;w>@Du+?JiRCQe0Enu~_mEiIX{Do7D z9!~c64FCJF=6{KXoB9{gaI60q4afEjd<43doPdo1-x?~|v+BduJ;eY9Joky|NSvY$ zM|De~ALTHXQ3DevxC?>M9**GhyRE#-6KO3)qk*cj6roj@RL-Q1@_+sKPvtQRF$vFI3Ca10@9o?wp2*z`2eEHoCoowcZ!;f$T zFYK+K2%t2CAUpuVhBDbIM$!4PGnV#<^r+c-MCl&@#KT_UpecwWmxLE+Z4#;~3Tx1X zQVBM6dhw=ba(nF}U4<=_q{5Gsx_~tXjF3D@iG9u2Aod&HO!vtq&pCAcI7f@C3LYF{ z6Jo5SoX4Ieb-u&4T6oh=4?hPMqCqbqZWr zu+mhmG!giOoG2e;yp_XlckrpDUytrpMxPyEE^jGvVq}F6Jy1N}J zuxkPv?XiRkCc477P0GjVdPX-H$CCm-=GG;g*ryZwpj>S?vg*@!D~pa+u+0?{Rk1hl zCPL>c$Cj_gxrqs{kiWzY@Ax)BVVS~Flf+XF zgqm|s^?>CsGs@!eCN`K#uJ{4UcU0~lL8g;E_efi?rO2Cg7`v-M+EBXoi)Jt4bWiP4 zrW{xK=xcAo*S4?xLXc%>2!3@_fBn@uSN&IvPn%i%ov*Cr4_I+^V(#@{N||=gYw(cF zk$vmZ@WV2!o-RyUIJS5>kyJvp?~$%#IzOxmgHB>Gdp7W{kTc44fItpN4$J#8FGY>| z%>d|Mpo}g}^kN>Xa-4B`5f!JaId$C$IV0)f_ZzV;K7mG14(H8~CWp$PEuXR&!(z-3 zT4VS4e5P+l`mVHGyTQUQ2s^d%)2*Sr-=|=WTKk01w$C0iM1y)Ly$IAl&m9Xlwkw${!dA(3qD%Add zoEKPlJq~FrO~WTW=~|(BIYr-?DQ$?iB-#fEwmjcdf&tCEOJD`ajeLaXQx%ly?TdIn zY~4jR%vOKGXX(*RWJh_%e0#JSzwxERMxS0b@=#k%g^f$T{?jyB#^^w`m>bFo7hP0|wde%A@5xKPd3L%i&E zw=QnhuHZ9CF|*g5^hx)1x(K-kg;GsrNHi8~O)NOnsXwEf3Ht1*cUnvz)37iu6tkor zuR|=ETaV1zW8%Re7`gb>s+|9-*VD#2UQ9j(K(}6DQ__>Odo2M9Y*|p4jA4+hJmgN__nLbEwC@4mSE$TfjCgJLhj7ITD(36#yKD5U=yoHN6=T`yIBLqb^pFnS6{uYY zoK<4kF23ZFZ|*uWg^)P3z!snpO|3Gfilt{?#r2h6?KEDG_hSt9PkGrg?q}f}V-)+^ zZzEj4XsW0#==K8GbxW)1Lx?`R{B^LuG^g3R9AhVAo9hAK66%80@$LfO`~h$h_%~4h z)pw|$FP7XdNUcnN!B4kxRBjkBr4qtf*7Tf8cO}ZybFBDI_(A3f(Jw zy?2xlcfP#$ul2$Y3Z-Z5WEg0h$uAQK!$Vw$V_h5~2kvD)aUOD(W3P|P4-u1~l%E_k z5Y0OnH7;-ym>w@U9Q&fx-UJ!KH-A|WU_5fOneCa#h=c)B;!{L|cYXVaobq{xf4tfbMJZhc5oSI=;AJx{6--GlKW~=^!V_$`mFwG-FNLS5Sd53m z!nrSJ(Tre}j!_@M|CjIJU-=L4FVpsK!2fW9qk-L;zu7{Op+x_J1Z{OJ7Fv3Ew5Wgz z^2)LjVC1dLl*H?B$vLj>IWwaqVg1x^xW#GV<1o+etnuGWXXkV5%E-6eGpXCBMalcX zH#}PqU^APq^{vcPxwC6lY_k)Fl zCi_R+TJpb)TZ8yh+}iE;xHZUs9=8@lg8G-ZwVQtyw+2x}^)qe_*@uDTIz~E>EK}O+ z^F9$$1mTyr3$3QzsJ2Mf5GgIKz9+@ZMRN;2D_=Sk?f^HGhoOyfSMX-~a`ZG96z7aZ zIlzE$hn54bA+N??zoNW=Pgm+{fNAuK$rsDtx*~0Ie`i_|vfjT@F+j&jS0lG3-y5S-Z ze}?B%I7<3B!r^?xU_8?{ir4F7;;gGBjY`z+&44B6zGX?-f<8JmYCx|I#z z(W(fATgHcqslHbJtfiuh?Hz9Q!QPrA+Q6vw5y15p(c~ zhBbfv@Fk9}aLM0Ct)>3gQENSYy6WSuk|j|xemDBBW8R&Q0^HU@mWyTm_DrptcYqh1 zqq2eo1BoVZY`$v8MX_TFik!oCM_y!c{~vL084zchZQ-K9rEn?S-QC^YgS$)NBm{SN zcPF?63&GtrKyW8mkU;R<>OLcVW=_xa$i4R;^=H2YAJn_|TF+j@Qb`6_H}Cl%s?Ybe z>sSt-E+AVUvVbik4m%V{CTPE@Br36jd1;X*V=|3_M~yt|m4?{7%lhm$8%<8(w2K8Z z4=P&6Z6)AQk2pQ3QUj%il3~)b3&nA zQ|_BjR_my0RZ@jN{Hi!j<~K5S-RsR~gRU?_`rXAfnT8(b+9jFXYdK{IEtC9P4*r1J zmv@~t?Wg-^2qMRB*3!Ie)W)IXO1mG`VNc)I@9Fa7e88I;VX{X=>X-)n^HFI_X=hF# zSpM`s*xHBR!`7+;!hauI`+r9pMIoDRZf)XE+#2P-$gOSsKDUPbx7^yY`Sij5 z-T6bvWI5K{)yH1rNYL_8YtFrl7awx>-kL-_bkwt-qZIP?6~qIWS0}$b8)g>B-7OsQ zXF3$2CBrptOCznCWZJz(!)KJ9=>p2Hb^NtFJ~3LeKM;r6(BE!!gi7A^s}37w}&;CFAH&Ua(@?TJl=i(62kB; zxRH|?E%$Ys&exBX@Py%AkAgMlTQ{2*C*|I2d^c0yc7@d+8Gx^$R#-bTFV6f-Otw%Y zhw_RDhIkp(xT$fxIO5e)6yMj?#O$`^OU{p(!SQ~xQso@}?2SJx%VA^H+dk!`(x$Uv z+jq!E#ZO(bw89OV{3tmU2}tHW1Xs!_BA61=`^T!M+h0`AJoh@`@zN7+0H6>L2wf0kjiL zKL`u=V!PTU7Bx{7_NKFI553VuN$7m#BMhLv@H~xOIB^2;ZBa8sgF$ha1xa7|B6twh zLtG74d|n;uKCC5u>vnNM?t8WOF)0hB$K8N4UFI|Cy5?&J3?lgP-7ZmpLut$lTs-g! z1C0u(^POvJ9V~rb{hsvMt^RAd-e1eX{#)gkQ+_2%epOQcRPNVz*G}9)u?@`na`%#x z8?vNpwr2T@yh!|8d9n5XkQb@{fV_zJtGtL1{Ey|u{cJ?Sf^+g}k=SLm02|$?dUyLs zbV_1VhFH`cT~xSb`fu;`l)!l;gSy~|jKF^ukx{5*4V@UJiu3Jh@0SFH06*3WKS%E2 zSWNr$46Na?TeY2mae>S5OM|QD@gEL-^wkyYo#l|yujWM24w4)Yn^_j!gPA0w-Z4%= zaC1Vrh+tk8Hy0`T4U*nC6FFq?;hS32v*3A^mT>Fosif>Tu-*Zhg{~at=h&c7cC!cO zolK8jbhm7Nku2F-m@j`qU^y~=eB#d>eb)Y$)FS6mR7`C|dEh(sQE%Ndrz#E=seJz< znis7wHQ)VGK=AHnP-Np0&-kn;QCEGA)k5v{sK68R^0B56M@&f1aK`klqh!wEH)8`sm?h{h@2u{}!yBQ62Uz*P0{m zmu!p=>5g!BBP+u_bTn%7vKs2=p|DVyzx8LZLE74@Y05Ed3F8}OcvmNLK64;Pr3w$QJtK!S4TsbcBBdVE8Y1buH=t7G3@;fbowY5w6ap2a_J0>gAB` z#0{O*qw3`sq>*p%!@MUvN!KIaKy|HSlh3jDL_0u6r=~Y-PjS~mXexS*9^K>}N8BH^ z^jZDO>R#=N^`<3!4T0yu+vZ1LPRa+jzp(6hx3THaD-9 zyz=oBe*A=x+3*W3k@jk=ZvXc9cS%K3f0tDBNO0lQ48-?A%@F&iSIlod#7qC@LwxdY zKg55}BZ~P49#KD-wkYUP#&9?>-eFr(Qbm#$$=LI66?|^|=qyB#YR2!^#yHm*8Of3X zY4Bf-UT_o7nu4RiDqz|?KK5>6st$C0&?Q$@9y>IdWG+w-ZUHy(b<5PG^JxS9ThcQ> zro#{dyL*Z^crNpC-dQRe5;@{Vi2M?x^Rig*)*AA9K~9YZu7-Z~O<4x6GMYXWs#%sE z)XbaJ2emi0$-$wwv_(NFb0#sP=~Q)-TUZrSQ!< zAnuyc-2df7p!wj;kG!phP@S{aB#U#YhG+Nv%HRB{gQcCZpkFm%I1R-CGS%)+ zpZlrE=p>ZvZRW%p>TVOe$CSuVL)}D&#gIYdxI3 zHXFh`5-gi;&#OkI6kYsql8&MZBEL@K&5w~s_fAycu2sKGzmKmh?ypK<*sFFvc6kxf z5v)B4e+W7y=wwM5vhAWp#;FAQ2xrKn39Fdb>J|uE3I}DXt9K`9ona$I*#&KtcYMGK z-%O;P)DtpIV~hRk0uSBTy{Wx`s@Jh{k*Wu$kWkcCLIYRh_5Gj@F9J5i>-St&(W80z zC1w#F$A6A10`vce59lS@^q(9wUVl0M#rr`h^W^Nzip454dMia2V1jGL+rsXjJMC+4 z`l-y9<1j~Yt* z95>DnnK=&`I4g?V!xPN!BEovSX8pxu2fMn%F>CWtREpOtb{NYxaE<(EpeHnZuCDVW zRIxJk3vR#LnJVS;+3cZrevm_IjiY||$aeSQ^VEGQyE$&8NK|1^okXAXis%cH-%?l( z3uf#O$&Gv3iuge~$4-t0QF;TFvB*x2#ZH?_yZKcd{GAtG3#9#-j*Kruh~S;0bWF^Q zZyCf+)!IFhhj>@lle=$7Bo9~XecBSC84;%PssB{*MV_AGQeNK~`BW7#9rLQl8TrPU zfc|y!?O>R9cN{*{y*qOmcSBH~tqs+{z=6O4O?DM_J%DdWu-oQ2?(pQ(XLX*7?`k0R z8)fh#?IxF#8swL#`E>SY(uR%Etfq&F(gF1Wq($rh`mohVz?|s@#Ek~SgO8kO?YYdo6D|wZ1!dgT7wBc_X9KV=~ZCgxB1{4U1nCtT}Zyb8XM{j zPUuY6twQD@BWJxOu1T*fI(f6xGU^ry;HmR9pQlpFA+uBx?%S!jcQB^2Ub8NTTb!u4 zemTIMUQnN5Qy%_gp0dPDW7QvJK`pr~(t$pXLyaui%8&{*}^BHu(S$GFf)gSSz zVw)e+PY4Yx8?HplaAkw%AD@PKR(YCnnX0>SVRc|g?o%zQT}(P!1quG?LKJvxeM4;Z z1@>+sRg?%5=P`=s$e2?E>pEaJ1_f$MGKn(9`II?gha2y`+ zy2%U!jJrBJL;kOt#lNX(f(&j=IDR^58VIW{&VBo-CK*GU5 zgY$I3;jtK)WNc!vYU-xwSmYpV3U+Z5*Fe=GQc(#F7x$#XVoHw0rsT%?KZUQNh(K5& zkKi54USqwvSWg%6)f}%bce{zFzAl_iNsyxX>PCTM+)&UPoFq3=?$8jsr>bJ`HR%Jv zabPwX+=n+f(nw;_FpM5>(^zjZ)=K3@mjx`lUi^XP)@H*bXCB+U+O!yo9TJ)P|{ z$7T`Juqbyd{)D5Qxax5JR_(ZA589~2fndsOHP7#RIKAHJ@Rx*rxx`2kJ6|~bq0Kkn zoxaSKMM>nz?Fm)f%tp-vTWb4hHp=6}2bf~TPJT>6!Bc#2%)J$`{w8@SbZwOGNuK?l z0loaGR0%6wFnQ#yP8Qp1mM(7I&FOC{@pUmH{m(@9A?A^8qkJX=aAYY7Hr%U0Zux?< z$8{6{Lr&CQo0p!$*Ae@yhetHyW0@`dBmI;=iWmD^HcvD>JY4a9LNsU2W=T`|Ef7-k zq_)rE>F^*g*NJ&D$h@zr$66O}hnPJEjLpJeREzNy&Qy}lefRXF^l#>O8myWzjQY%0 znE0W1fg*L1_-Igx=a_yE^G79H8!|XF?~N)JZ(`tr=g67*N8)Pn;8`8MJ$n2kCAXNP zl|lSG${B#mXr+j5l(gukuO><}uPd)b&c5J##q-&b5&d&1 zrC|C~m%9TbpE+p?9X(z4f}?_awc{&3PcU!eORm~*x)(y^(xpY}a^>V@@{~=}^>*ne z1P{1bxGZ-#0ZwERKbUi(N=ED()2wM`Y-nZncds2Z<*_CPKi{6Hy+ji0Fn62TibyCh z@EJF7meW(E<{*CU-DyQTtD)`~{pi%;YCz(&u=0g7wGa4+Xgqh>piN>%7pJ#JwfsEF z^)4O63Dn8vaPgM?3DE?dXE*otVuCxiX73W2No1yUMbzW*2!&T%`lkp7@>MltDLhNLCXY{{`t*M(~&! zYy0ze3qO8zUQ-dL@@>ZXr@izbh(YW}-2U(1)h^#Q$0@$EB1JEtj;*P0=IH;>!6(U* z(u>b^XD0^?ga~#08i^S~SeG?F>Ct)ds()7z%24&HverEIWn#IC1G6Fs6-km<0}wj> zZGYOXO-ey`iU-pjL^gz2OTRORu@cPDqyk8pX!4s0FZv0A-RgQf&5mP(|FKkPY)y`R zPxiEPiDrZ#wZ$?7%isrZB`NwSK;6u{4~D)cs|hcNHW^SLibk6Pg?rcE_((<8==*%g=eIe?%SO& zrlx-@*$f{U8b@i;L!~cR8)9u{Ippd;CWBfn0GKOFQ2_Odmw6Fw<{F6BU$A_Pcrx#x z85m<@;xdJ0aZE1*AGqbQl3f%NXO)icL+Wnix2H~L<<;s^fV#JnDZx{c$-|QBNWc9AjvQ1B23?0o|!m16DZBH_juNYk!mtYrv%5xgiE{5A2 z)4=rlKryo<)gUx$>l{u?K-Oj#waI`D@74#tOdUG%T+Y~+Gep$@mt!qx1C z0RTvtLv>Vvi=9!(xi~w3FY53DQM~=tOUTkfdE#^_0XuJ#bT(1QuyA1~evsz-sjJ^4 zmbIyG?#RLlmJZDupokq6>%q!uzQ?bHQ1k&%E87fUh7Pq2x#czud?`lB7+Avdy-%jL zrP3j@Y7+=tRGuSnFq6#kWOxyb5eYYzCMM!o|Gw}TL{E5W=1zH_;t)Tt+JYdFDs--Idm|f1^Y5r)}_Q(cA9PZiP$rc_jIc%6z+W?w&mE4 zTsC|rFL0i3QVcTpoc)Ojx9)UOxnxj~QC>JF;s6rHm(p;ie&}SLV#1dyU>duMZ?{vT z3Nk8Z2LnBiY>G9{1Lg$UcNkZoo(50St~u859B+(*EW$`vsnT)7ItO1;z9A;B@`FKF zU@?2B#H#Dj2g*XO@aWWOw+UbCfvwJuglmtZdl1>OKmYdpbf9dwB48_@j1IO>9 zB#rF!dPL}omdhEJ`7^Pq%4F>Fmiz3 z$f|NWhh#n!HX|7WFg&A6JmBja-a3SrrgxTjEhxLbteF@IfN^Z1=4g!DsU=EUp?0kk zV6iAMD=NgG9)V5+oy>W9-|kKw>eIE zNyhf>seT(dXwKMxr<&}@LC@EA;ZR_~8b&?z8e$)kcGG*DjSYbAbu{}4(b1wEqpNR= zPU-R%!I))yRG1|CW2fbayAqZYRH8cHPUe1uglmi|pUAw@R^32^yf>2oWJa;?UR0|# zKmygnusu1QGRamKBSshQmVaw*C6uv_jTOLv5o~oQVT+Krkcydkw!;Rab)wVQ-fE)N zC7PfS;~TBB145zHt;J4NyE?8*kolzGOq?hPIy#JLM*`s0^`8gD0YQ@bA)U<-4Ib58_zQ-tO){WMI z$O{?-_yHi@dyG7=zNX0*w~7i*6(GiW@P)w_d|NBPFZ3akGYca5)s=H5<#)w5O+737>U5D0e zz{H-Q#n=!PcoEO?fx^h~B^CM9660DJBSS)Bo_|IVr8N~fyz(i`3@YkS8kZ2wJfh+z zPFcABTeXGyh$;f_y$L_>XO58tOHt3=dxR6Jfh=8A`=CJ0#R@_T_)vqMUHIf?-oxlqO30X zz4zFl+*Tn0zc#i?Y8o6Y77Uvt-b1o|HoF_RuCg2`dm5(>=cwzU5vXP&8x5T%zRrzZ z_QVYRtxl;y{S{kbU_Y-~az!PO94>Il$|;JSFU!DkFL2i9F;TWOb7Q?PKp;8F61leJ zTnuZSn3pJJ?)Unp(624@qC=dlyw-^99@rEiq8I$9le5w?911a=3H&S~u5?&U0;_GR zaIPT5!qm^}Bjnk|!_bXcG8V200(SlHa}cAUBz1v}IA7~)c(z?g-o0^*N??mcM#b-o z$(6zknCrU?QgN>EM>A^VTtd`;l7lEuY5QUySRsUEPg;qXD#6u*5V#!4?j}u|!^}0r zk#m+uy@=;9MBUbZIFZRAN8gUb)w_oJ-ZNo#h{&qVjP3LapjZNjxt7#*XA57@#%$dV z`{`az;rH7lR)Ig%UHrSf3+jMeauyrRHmH^@=g{GjyQ1HUjcbTR*kUvbEq6|DE#E=* zROHYJSlXz#|Ju`NR9pk#TCTeL-WvS(fU;0XbbnYXL4u0^Df z{7*(eYc6{%btQq1@C)*g$}3d@AdXJUsE#CDgv6y>gU*ToYtz0VSCP%oo}-XtLKETm z@x*?_=0gw`^WYA#1+PJry;eKU`?Ddo#&0tLC`PZiX9PM%$+YRdeol=_+>?@WWIR6# zl86X%d8J)b$iex8*8BkyI;$LWs_xZ{0^y5(+#wC#5Zx+F-;}ud1Uq7`S0ovGnguw4 z&ZhZP%OHl1VFCIqD-BvuyZR8E6;u6+-Yr5_T2La#RPcnxjcnF@nB1r+afby)+@Yg| zpM!=z$SU5~zU9;9G&tIqEjyyniv{m%4u6dTWEL-_=MKN8U`m{a=Xrt@Lz^`%Xaydd zu#x{Bo0szxTMd^o-$WRr1-Je&-&AAFOy&dQZiI*xJRBDiY)T5RxH9XDCYhW!#DwvQ zVc$!vn+|Jcapc76*CY`O3(Yxx(v0y2Hgl0ef`S}zi=CKv_(B?X?eCzaEfK?8_Gj(n#O={=8S)O@Uxz6X!?z7yp~4fAV*UMD zga2-4C)>#9&K@F$$Lz@%u<)%vPT!NU^cmPgx?q98lq5b!cJ(zrwhbv2--pWgC|cHK zh&Hq5ai@q>_Dc@655$HRebrD9_xfU(7<3yKt9f`#)s?!>t0H!ohDHpL&0v%2I!qY8 zD?2(i9whvEwnAS=C6~lWPEZ;k%)ufnOk1KaHs^}>04KegoSPl3k&Uu(0U-wGpR7=A+|HZ(mAu*lN9L zVra>TR~)safls1DMHIL1yGvCD{0x0Lx|q-rZOyM)4#$a=o+2h6s8>)!4NT>Z7VZu% zSsi`*S~zrYB3n_zg?eC1NFq;AfY7H4=EE{bB5! z4AgskNfSCjdHYCVGp!K*iQ*I3ieY5tRuuv%mx{nQ3M1E88`wDJBU#XV9_ti4)*v;o z9^gVQRl#pgn=;RWy%q`y$1yS6uCQ<)IUCIF&VYxQ8*8{aiPGsZ(fBblteuP>QoD=L zIb+V!Hcv9zkQ1vx8FtiFsU(&G%Sv&lEe3xv_!ZwV{E2bMhX1qs2HtUl{60)bhp7*` zt;qlY1oc#0&V#B_aSb!ShW-!TPOCAaTz`B$Du z;rMUD<}igS>1jAt2h8BBKG#{gIrUWe29lQJ-QyJRz+V~kx<Tb=+O8%7dzOHJN}}A=iB=8+cR?@fS3oaFc&t~5(o;Q;$z>DB3$&z4?SHzJRt>c;}1?W!`H}MOHYn(D_^9vayKndvjOu#KG^QyEpUN(>S zyW5aKXhe+8_75=`RNf+%K2qikq^YjgJB-yJeVO#go~e!~VixSvD(FaU&IoftRH<0O z(%m@^_IkGs;esbemb+`(pAhRKfzZ!^SY51yKGx{&(G!bHV;QBX18QRzu5M{ZuakSX zTQWv@b@kx^GxG4oSY;kO#?5@a{c133onYH zR|QW9izDQ*xAWTV>a%%V#(4v-(_MER;KmjY7Jj^MTX@rdJ@^VA+sEQ^^-CoCy=jOB zuGaS4<{Aens9roWCO&jJTm{CN0Y+)fb(D*tN85-OFcO(GLRHrbo6$X`YT)zj_JOC& zifX$<&tq7z!&)&*{~k}u(c@ZIJUCCGi=G5E3@$pV)8t52M8-HYH+xwINBUGhNnWG~ zQ~bof8076Z0cP_e8^bDnT=otegEy+tP9;-PV(!cHDJ$n|~AQL7b>Ulq!0mQ=#oo&up z%q6H)mXfi2kO`QBI#sM$-X`gAS6b2zw+=V|gR|79HR`p>!UF|Z>%wr;W4U}gVQiCaOEu*-3_ig6R$J}qyM?Gc2AO4G z@FbEONi6Ikvi1LjXpP+T5*_|3k)y_2C15)S8&Ex)Z36F={^OD!Z_GgI@x}Z$#KBx5 z>upuS^jkX`YouBTK|b2M5QU+SEf@vJG4iDFcNGN^z$<-dhy1LnR3&;5)ZEm$Wu|%t ze6letBHAfv-#{+H!>Z6^d|(pLP$>j8a`IV zPYAxnHCtfF4WxkxebR<5yuV^q;a62zB8h8*ctNw&{znVo!t_TaTs+}{y~O4atxbkZ zQ)x8XE2?o5O;#7PkF<*K1F(s1Mo6FrKg5X_|8>l6lP2THU1KpW$x9gquiU9T*aG?M zPi5q@)R=~05i{4k{5(KV{XM!y%{@NXAc_h+e&>#v{+`1;AFU)MjQubL?F z2)d3qDQJIIU$ZfUX^(!NHdlwEC?$+k8L`U;VL=i)0kjylTq_sxGe+2w!GsEe-%CYq z7|y49!K&&e;lv-|L$=B{;kIm@XO<1 zRbr^=kD~ym-_NtvD7|TM#_okpk~t`MAJSZ4DaRj!&xeCUhzSHoZDKZmW^C(|zswl5 zi_%X^9VQ*+l^SGZl^i6q?jOV`e8w+RSB-GFC+bP4mC~h*njgcBXTBfyi&V(;ncQFT$7P9EzOVhsYb&?fE@Vg%2m!Y(Tn3+uwYL5l%8C;V!p2+mYmbm4B z@(f&4PavEb(s_SE*y6GCC&5#+l>|_3mr}}ak30F{v;@JZ)xoZy7s)CaVhGB1v0r{i zz?Sn%mOOQ=?uvx-5Nsk$G=lhFPwj=(X3gE~1*)V_eZCVNbZ3xe!`x<1LJ#bltDvvP9BepzQ+XDBrh4=83jBWk7?KR@oyGQ%jcd>~x zPrMb^;&GbtxDC}NoN>B=qWrR%L!;y=cK6d6ZD~@&0O&qGxe5Jg^;WFcEr(k)#uvi*Asx~dTXAiY5jI%lCp2R*2B z#8yL0Rgvh!!7{O4NviR50$=61MJo0~z%T`;Nsy576mK6vOC!2mo@l+NlkVA6LEesx z5LTr75WT{388TaKMNC;8sid^gASJ4s`ig-#;x$>R5-fa~^gQxUh-`diJ&LKqPx`}Y zTlCFIG*kqIylU!QJGk&>;=?p(If*|Z;7;u~?+JnvHqe|wo1agSGz;rw8fAN;}9X596!fyA5&r9bK*<) zu}$h;7r@bZ^K*=BF(Cw8(3ioV5FQRS@C)d^7>kc@#^(;nI?2E6cGoOpD!H7uUqstp zl|OdRKTGi`A%I_S1RgPk)Iu0`!?z5rS_7FrfPZ~qvh(|xlJS8}cn(68N7M1}E#XMF z(%|)($|9YlJE;%d{;%1{V;mrek?e7w7aN-?RK+e7bk0s#6mr5YqTj~7w3@um+Fp0t z#+lz&`Qcpt5apVMxs5Yt4LzfeU;y#a58xQvGR3QJ|1yWbBNC!d&CX}Vy8K3NHlG;a zh>Cj}4@SH+Wblx-ac(zXB+XD=*2dTNY2IlPZh3u)k z#Zd3B2F=MVr6uAUUf6rU{b_S>cad1*obnMH*!b9D`9Y#3ts!<-T4ZjzzHE9DKw><| z#F5*O$IMv?6Pj{YTAUoXvS63;12Gote58{;7CiVJq||YPeS(L4NpsEyHki8)DZ$T@ z23a;KNrFbB0&nzO8Ty>4^y}IE6=Z0jn<^G*M_%anx!?yv2jOaEoJh~fj>{vqe1mDcW2#*G#Kzu;Dk|M<)fuFMOrOw##Zt^EJH z5Aw&Y3N_wDB>7<-qn$YRcm~#e09Y1DIX%%zqLO!(rcJHtc4lQd z81>9L36nMyJD2)qzjbATUm;P328dj@@;MfQjU%A}vNaK&ajg%VUHXE6IsaxtZSIDAg%L-bhjf zWkorsb#CJ6eMkGQdBqRke;_r#@F~21z%mswa9;PjOMXE)KhON@zLruAa#R&EW|Y@d zO})JyktGVXcFJQnZuUfd)onYZ{$K7YO;aT5e8epwCxwoJV2I$g#*@{QnVg}`k+=h2 zVm#}RmA=U367%r|#>sc&`44vTjfMx;HZebm#^>1w>*yd`GPg&F4_k?y-v~xMF;tLe z#JIz`Jky^KI$8jVD2o#WuJ&Y2wG~+Xm~rI%tW(0%L@RtnjV3H5Q3rJpqYB^e>Y3Y+ zMsW{#AWhpnv}n!?j?6YM?ZOo-|&7kEUp0 z?394UwW^;GxGz=}#G@l1_5>07k-dFK)x`WWn`strREx%gXEG5 zHvAq}TKPmnefH`?uA@uIJxBcSvkarYduBqY}*o*A9;Qx6=&PMSQA}j_~_EJGs;DM5m>94l* zA9af(e&ZI)Upr$p=U0B0=1{;ySBch>6CWTj0y&tHB^y2bFL&{0u(Y`qr11rn{!^6vmkJ3e{ zZbg^3&ZZdwMeVbpL;cG;^c+H^D`J87GVfN;!}9J)vD?OOpW7pf@a2heR*=?hZpA*xDynb}8NH0btZc`GcEL^Vj8 zXwgNE599=oX)vT;Yx8&f zzyhWC=!MgJ(2vYDzz}F6R!})W(7hp-AA^-Wqc~we$?Ztiz-Dht4Rq}cvlk=5jas$+ z%{#PVHEER9g?=(0=-=LPr^BJ7n?zjvFbv;sqseM?)j;+V)y(FSNCcS1z9Gbj)xl|4 zqaTkWhkLGz4~(J{j>|}ej{gbqC01Yj+|o4%-v}9B4GSf#y{y$Ic1k}SPr2f$kwmaT zeVU!O$pnWrV@L+&n4vk6^n+=e49xyZcolDI(kz~Duh}-db5U_~nsJ&J3F}m38#G&t zqYehd&i>FI@z;#G(j2n4EqET^3bspS_@V?Vm+_3@zEBm~Bj@w9fyZi6@K{}g{OedP z$%ZGAa>IB{5zP&0ju2zvvQhL=HVH|aFvLaK_~=bjq#hF>d;*6VJ?w#AK+f{s8gz|( zlpVlT#B$FxfA(IW)6iHgxeH8G zr%KL(Zlj9t!QhF)1?4kVRMb;S1&)(BWh2sc$hb!j4MGIH9& zvdVkdA}EbS`?+YVfR3nyN=*&}hzz2LWExKLz8>mq@r^RZiJ=1Z`hE-;+1{%PYB|yC zg@d{SnT*LYaw)S1YJ}BX31WwQq(QxK9e?X8eK9E7rJ&OYHAmyt)Zj_M-X-tVQ^ObTxqLJ;RO%VU+LjdVfqR$ATaXQOmJlx>_JM9)q=AGrEE z4*QtO$MVlNRc^5MIcfTsN~YinS}@umJ)g)|2_17>T9%$mFq~xmGF@RniQie^`2UEE z{0Wg8<7Ylh$X>S=mk$geW2^V`y{vmpq%KL@|HQ>Nz!%#f1VwbB2(}-Br*$qYy(hS ztE?(*9gk43bW@3LVZ6dm%047!@X7h;vXBhL=44?NA4iECPZ>V|4F?*eTo5LYr)&44 zO^l?4k%ax+c4hwt^CaUz?oNVhyhy)*T2Yq20aPOrYbZdD{B=l^RP*9>zkukVWlRy1 z!q&{>f)sZ=xvBDMD0$nDe8nkBhkb$frM`Othh;n^Z6P?B|nduD9HA;;=7g-vr&BW_sI*PcQU!?Iiahya1QgX=2$VA zk30F6f7a0Vi|WM&ci^ranJZ=c9X(kK%%Xl|zEQ}rzTC>*vs!i26x z(aGi3HS+64MpvuVL9Hb3C`=W|L@9Uo1CDlerzzA@Ay?z84m)<(?ZZf7?;osZL|FLB zSJ~@GB!{cm=10&|cDEs)&zj9sk@vpDW2hZW!bbpOWzXeL8{%iEdqVW z?B;w!0x2Z!ErPbRadf&pM)LhPsxt-2B=F*dg@;AHaA8&DV#YVUMIL~~o{C}SCLRW; zod9#*g>UMPlqM8lfUbJnLDklY6=MNs!;9DJAbhTVw4tYGjw6!vocXg%o%ka2#f-0e z@baLGfS21ZY-8cFJGpUMeQxUge+< zr}14^(#U0oNhC#yk~n!dI(#0sWEzZ&q@seWI8*6 z+%x-s^b4g&kqorh6wUF~)!d%PN{X6eJKC^gSNJtBzD5j=t zQt;t3pNH~I*%gm0)eG_@NsB$M4j968Mwc8DQ&@Wc!lOxvv5WVqW}a^I6+S*ucfGaL z_Yw=JKy?{$`&=y|$qg2frh$!wNsAv+S_yE)n9Yt$o2v$s0V+YqX1r6P_;A~9aQJL1 zUUbu&>3!aSfu4dOJ}L=D5cbe8sb&(p>?fqLRk!e|CHSD#GUmhF-iYdW};*di^#&9gQ6N3w_qiG~)~}`j7-5_+I7T zXinmk{?eR$r&8b*|KY%TvMJUtALoYUrBTn?h1RTK%z&KFYv9{vt4TboH5sEZOp#)v zFp~W>28#aND>83WHLb%dopkOat?6vTMlvCunJw3J-iJS9h8orqp2CL8LVG>Mlb*l~ zpUNXCf|kg&v3*|lPCWJ^T0#^zC8uk`oK{rUT(x@(VIQ-C<}`~y+}Sv%!xt+W+iE>f zNa`+I(ju^xi6Krb$>X2t+SGqc*XFo)l~zST!9{a2m-N9E9C2tX-j<%@o8p~j=99k( z;7J|N@o$d7Cz68!tf`A)xXdL{yX?1$ApP~?rLK)6rZmR)et?N8>6R<{}c81AB^&URey2H z+Pn(1%B~@g-EB}~o%tj?dUoHnt%z^5Elkb#kF93&(k^PK*)2}qrzTQ&JyvB_p zOV3I`6PA$GRsVZHB+1~u=-0-?j=Yltde*@mK!ZEd62mH1#%eI8T&?d-b?P>Zz~MNS zwD?#|IEnd_W#A~7I*0R@47U6iHB!2B03mqjW)}M)_WgO1&d6~mE%`<`V#wCa4B^tA z4(=hMopYA%&swZb$eMhs@l)HxSDh|Oc-tTSl#Em^oI1y{#cwSxl`uf4NlstK8N_=X zGgGH=bmd_&!|{9VI>WT%_{tRYG$iJIT$}$!Yv%aB&SSv%lh#bvlq9G=1-Ud!x?)S? zjt5pVTyP)b-xt#rJgLvJ)t{fT-t?f=?WAQ+El=YTXaxEgoolxc@EB+w3{y=>6DTZbkoMFnNiU|T!#iPmFhaX3JtUcJ0fN#H9)bo)>E z&BVsoxT$!!;(v3LJl*!_feWW1L67ua^6b-uOpKI-B*DglH_uZraZJ9}a;+?t*`9Cg z(1&e-HK*hg4=%;;aZYUkNV~1{#&SsSS?GO<(0$9dJ)EfEIa06xCE_rK?tF);*xLD? zgjU%4B+^ylqVkFNW9eW)lC8ccK1$ykFxK(yzlwF>hQi?72J!7`IfV`=XeTIfb=LPa z@Z(7@Q@sgRU+x#2S3w**pJ!f+JSgzxrjTn}efJV#`qw7ScAi0~#F-RruTKoWDwGAY zRmsVR7Mt1Nf?853`gKQBTdNWtbBgU-s zx@{z8{R8h@K)4h)aISkof@PvqdjC&z=N%SRmah9E=P04bp@>D!g=8e>BIle%C^9G@ znF5OpMUWf>1W^#lDqxY3te_&2Ge}Y-ddu!J(>-&#Pj}DEx%cu1&)&P9XNR@cUSWUl z@BK*gb}Fs?YQMsVd=an|V=j4F$npwcl|I()>eZsGHq{AFZoaYYh$o+E%c&RhweqXR zW!d3Cu1Bj#6_AXpwHx(@JyL1{%LdK%%o7n*p*iq985(7tlyw(cM>eut#vZL3n8^*vLtN#2v z-K)$hZC->?gf}=gw98IiH2w`yMc=PP6=`{spf^fm7gPUvL{dsU1*j7w*0^gX zw$H9Xd|&LGfWnhb#R$&W5I5$w^2g|azWCk_2+D&a<65_i8a+UQx6Fkm{tF$5C~^E_ zbYO?;AJ74=I-{vaeAJ+Uq@?#2A1AOAD2Nw`A6Y58dh8kWA7kQ4=y4a?l9V8&E?SsI z^+XUx%>;1;vHiKu)Ym^#D!cFxW=Nh*c+5V0Azbm;fUMcmocO@tBW z65}$#x~3G?O{B}n3j~i-J|c??h&sJ{Rk3QIGx0e&Xyygl413X43{5z!E;ETGnAF&d zsbit8roW!pTCSE0#VZ$sBQnzET!Yzz`$i9-fgV$r)^OePa2OO%S@wKwR z7jLHs z%}t)iDZ2QsQON+_|IAXY{)E_tA`KyGbJvRvd)S7A#QEXxVWo9^&M{;nu;_v_LzIk`X{Q@ zE);sKervRH#cAI@M7BY5GR#KdO$o$~i3MaY!0gz`H9c-=B&&uGJKaH!qjjSAOx-mx zjIu6v8JPnT6lt8vY3WxN3^*rsob64Qb(TpQezJw2UF2dz{w!Fz_*+V(GsQnP_y|ZRtL!dmxD)@p`fl4!_}g zlu_d5{~DIPZu<66k9}b$B|X*l74CBiwjhP2x9|6pn2uJHa^<#_?5;w5I*r~%{C;SNUrnk%*)ENd!*io}h z)kJuaU*4~@LR+@fL?uY5LCo|;&_v$it=z{Mt|tEUy8XnFM-rjoxjTJzU7uSEYBnpa zo8|r9FH$u*?}TREoiU4`V}#CWf;*Ls@wY_r*p3$_Wsj_f32=pvUcd+s9}|Uu5T(R) zPHTH2TN2Vq3=&b<@I+40y|X{Y1_X(qDL@op^O7AT_bD zS6$-mL02M8$tI%ANT<`xj|!V{OiXQ6$Y_mQjriSoojo{6BG^Y<^5BN((4H&(O56sH zWyr69QC`OaqKuXM()6Z0BYC~PK(Sg}V*hE1w=W4g(dlhBJ4N0&W)Be%1oRxTPIklD zmvBzi^}HF2p=$(Ht!!6%Dk4o0EmJ&I5765|UZ#vu%E}=WujKX}5R#k!TApmAE-r5R#{CjOjn|wV8-32F)zZ#jjD+oTeQ?~K zwXelsiHOz{jU?0(buGWo^y-{Mw9ws>tF;#M5)CrezUy*dFha98%5N^$5bVhRH zMO7;3e%jM2HdB8L-)8bpA_fJ%YwqtYQ^2pT4W?7BAHghNlDt(O?-eVjjj$5tX7i0w{F2$sgoO z`=;ke;KY(^lTi`0DEo8RbiPCyIdw53+JFgnI{%A6-Y9 zzvm|H^5-D@q$gNq)4nW!_v{c6TeJ0eAZgjRsq6Cgb^-d!e{^DAhWwCS&3C|*FdCs2 zVEw$2=GBzhPK@RUAVin_Z=hM@5xnlXv%x{Y+Y5Lz2iiL8UT*i2!Afi{^1SXV3qgVO zm2y4hZoLAW1M(a4#ch>*uR9GVBdR8VulaS9|LuvWXkr}%Q> z1Kk65zK{tNm*mzapS)t$S@Q2Jn15pdJM?dfvT}d|OF=nImlPza2mWs%tAVx=T@z}` z(1vVp9qAy67ZT($q7LxYE}5&!xW--WWf_2z&Tk*}lh`Lzbu6zZvpU@o_d{?w&UcZTbq+F~U?k z4%W^V&{$>Wch_&sKzEbbR(fa^Dy0g4x3z5tOi&L@(Crw`kVC(HLY z-`NO6f52?WU@TRdL@Y=ReZVi5-dX6&EB6!S-&Nt4E7)HisBCvO7uZ$t@1r{LrJQJN zxk$}o5&ME_WBX=&#b`6RG_EQBsDn6uQBLm7K=AWt*Ph1B0GJuG!jw6eZ9Whf;Hq(w zV}}`=Zv3|eHTaLNTpD7ahCP z4*9UyK(E{P;qx(w@E84nUY^A+C=_s)ixU5}HE&3vUuEQxI!2tXKcmlA*ItVzy=Z)h z0C}j68m+?19Jz;!)B;YBIo%0V0ubCjDBvNSFDY^{kmrScq@` zfK!$y#ocqV*aLo}xiUu&=pB*jN0y&fpM>b8o(&_81g7&_kQU^K-8|od;=_to&EbfJ zflBq$(fVbL74B-n#ZzPCVb_f_7aKCIXvHm-{FTsUs(O|WtZV4?to{GIo)vTYgY~Q& zm;kFf;%53f!m#zOS4@81iAUKo-fTgJWLi?ks_);|wDF|GW-bKT2AJh9+OQVPo6`r3 zUH`5~n88PJ`FF%^A7@VHu5>hOeh27+5=@!kn?_oktqY|_GAW-&>sif1fU=M`3TiR3 zNyf8F9f>V|RbWjstelG(xGOiwm<3W7NN7jp&OR4S(oSvaA2m%&)h_OJFhTVU98 zh<%SyQ;RrO=W1F1Ngh{#XpMnBJ2|xd)Svnl-^zCLz!2?1l11U}91m6-q^u;5&4EYf zE39Dr^6HwMT;rpTk}hLBh_m#zDN7lH7r}$|6bq6;&-X)C$wVbNB7uhQO_m1XRo#Ii zjBc#NG5c*Xh}@lyto6^si?aAj_6ACf8Kp=_(y~(;Sd)&!tH3IoZe*^F*jUPgurjgF zB#QI2Z|%>B_jUTR`4@>kK6&*x9FGJnJp%ox*VXe)enNoA-1+o*|8PP w4yBpG- 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 S_pvhs!(9P_=u8OT-~As^oCc5p literal 0 HcmV?d00001 diff --git a/tracer/example2.jpg b/tracer/example2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0c56f724e7f955d4b7c157a5d36672d9fe9bd62 GIT binary patch literal 77218 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

@We0Ge*V3na-%XUR~+2{-pU) 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 RSP + 0xFFFFFFFFFFFFFED8 ==> 0x0 + ====================== + ========VARS========= + ===================== +0x4065: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x0 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + ===================== +0x406A: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + ===================== +0x406B: PUSH 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + ===================== +0x4070: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + ===================== +0x4075: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + ===================== +0x4076: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + ===================== +0x407B: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + ===================== +0x407C: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + ===================== +0x4081: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + ===================== +0x4082: GOTO 0x4087 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + ===================== +0x4087: PUSH 0x0 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + ===================== +0x408C: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x0 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x4091: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x0 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x4092: 0x5 == 0x0 (false) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x4093: VM_COND_JUMP 0x409D (not taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x4098: GOTO 0x40B2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x40B2: PUSH 0x2 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x40B7: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + ===================== +0x40BC: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40BD: GOTO 0x40C2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40C2: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40C7: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40C8: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40CD: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40CE: 0x2 <= 0x5 (true) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40CF: VM_COND_JUMP 0x40DE (taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40DE: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40E3: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40E4: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40E9: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40EA: [VM_STACK] = 0x0 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40EB: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40F0: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40F1: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40F6: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40F7: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x0 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40FC: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x40FD: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4102: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4103: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4108: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4109: PUSH 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x410E: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4113: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4114: [VM_STACK] = 0x2 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x4115: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x2 + ===================== +0x411A: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x411B: GOTO 0x1000040C2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40C2: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40C7: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40C8: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40CD: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40CE: 0x3 <= 0x5 (true) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40CF: VM_COND_JUMP 0x40DE (taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40DE: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40E3: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40E4: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40E9: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40EA: [VM_STACK] = 0x1 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40EB: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40F0: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40F1: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40F6: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40F7: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40FC: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x40FD: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4102: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4103: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4108: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4109: PUSH 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x410E: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4113: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4114: [VM_STACK] = 0x3 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x4115: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x4 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x3 + ===================== +0x411A: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x411B: GOTO 0x1000040C2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40C2: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40C7: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40C8: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x4 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40CD: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x4 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40CE: 0x4 <= 0x5 (true) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40CF: VM_COND_JUMP 0x40DE (taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40DE: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40E3: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40E4: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40E9: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40EA: [VM_STACK] = 0x1 + 0x2 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40EB: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40F0: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40F1: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40F6: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40F7: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x2 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x1 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40FC: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x40FD: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4102: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4103: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4108: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4109: PUSH 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x410E: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4113: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4114: [VM_STACK] = 0x4 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x4115: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x4 + ===================== +0x411A: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x411B: GOTO 0x1000040C2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40C2: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40C7: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40C8: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40CD: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40CE: 0x5 <= 0x5 (true) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40CF: VM_COND_JUMP 0x40DE (taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40DE: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40E3: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40E4: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40E9: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x2 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40EA: [VM_STACK] = 0x2 + 0x3 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40EB: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40F0: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40F1: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40F6: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40F7: PUSH ADDR [RSI+0x4] = RSP + 0xFFFFFFFFFFFFFFDC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x3 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFDC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x2 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40FC: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x40FD: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4102: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4103: PUSH ADDR [RSI+0x8] = RSP + 0xFFFFFFFFFFFFFFE0 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4108: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4109: PUSH 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x410E: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4113: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x1 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4114: [VM_STACK] = 0x5 + 0x1 + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x6 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x4115: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFEE8 ==> 0x6 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x5 + ===================== +0x411A: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x411B: GOTO 0x1000040C2 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40C2: PUSH ADDR [RSI+0x14] = RSP + 0xFFFFFFFFFFFFFFEC (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFEC + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40C7: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x6 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40C8: if [V_PC+1] == 0: push [r8] (0x0 == 0) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x6 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFED4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40CD: [VM_STK] = *VAR + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x6 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40CE: 0x6 <= 0x5 (false) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> 0x0 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40CF: VM_COND_JUMP 0x40DE (not taken) + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40D4: GOTO 0x40D9 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x40D9: GOTO 0x4125 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x4125: PUSH ADDR [RSI+0xC] = RSP + 0xFFFFFFFFFFFFFFE4 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE4 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x412A: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x412B: PUSH ADDR [RSI+0x10] = RSP + 0xFFFFFFFFFFFFFFE8 (push address of local variable) + ========STACK========= + RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + VM_SP => RSP + 0xFFFFFFFFFFFFFEE0 ==> RSP + 0xFFFFFFFFFFFFFFE8 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + ===================== +0x4130: POP VAR + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + RSP + 0xFFFFFFFFFFFFFFE8 ==> 0x5 + ===================== +0x4131: GOTO 0x4136 + ========STACK========= + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + RSP + 0xFFFFFFFFFFFFFFE8 ==> 0x5 + ===================== +0x4136: PUSH ADDR [RSI+0x10] = RSP + 0xFFFFFFFFFFFFFFE8 (push address of local variable) + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> RSP + 0xFFFFFFFFFFFFFFE8 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + RSP + 0xFFFFFFFFFFFFFFE8 ==> 0x5 + ===================== +0x413B: [VM_STK] = *VAR + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + RSP + 0xFFFFFFFFFFFFFFE8 ==> 0x5 + ===================== +0x413C: VM_RET +================================ +| Result value: 0x5 | +================================ + ========STACK========= + VM_SP => RSP + 0xFFFFFFFFFFFFFED8 ==> 0x5 + ====================== + ========VARS========= + RSP + 0xFFFFFFFFFFFFFFDC ==> 0x3 + RSP + 0xFFFFFFFFFFFFFFE0 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFE4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFED4 ==> 0x5 + RSP + 0xFFFFFFFFFFFFFFEC ==> 0x6 + RSP + 0xFFFFFFFFFFFFFFE8 ==> 0x5 + ===================== diff --git a/tracer/vm_disassembler_tracer.py b/tracer/vm_disassembler_tracer.py new file mode 100644 index 0000000..c829873 --- /dev/null +++ b/tracer/vm_disassembler_tracer.py @@ -0,0 +1,300 @@ +#!/usr/bin/python3 +import sys +from miasm.analysis.binary import Container +from miasm.analysis.machine import Machine +from miasm.core.locationdb import LocationDB +from miasm.expression.expression import * +from miasm.expression.simplifications import expr_simp +from miasm.ir.symbexec import SymbolicExecutionEngine + + +# hardcoded list of VM handlers taken from the binary +VM_HANDLERS = set([ + 0x129e, + 0x1238, + 0x126d, + 0x11c4, + 0x1262, + 0x11a9, + 0x1245, + 0x11f1, + 0x11e1, + 0x1281, + 0x1226, +]) + + +# program stack used for the operations +stack = dict() +# global variables used during stack operations +# here will be stored the values extracted from +# the stack +g_vars = dict() +# number used as parameter for the function +fib_number = 1 + + +def constraint_memory(address, num_of_bytes): + """ + Reads `num_of_bytes` from the binary at a given address + and builds symbolic formulas to pre-configure the symbolic + execution engine for concolinc execution. + """ + global container + # read bytes from binary + byte_stream = container.bin_stream.getbytes(address, num_of_bytes) + # build symbolic memory address + sym_address = ExprMem(ExprInt(address, 64), num_of_bytes * 8) + # build symbolic memory value + sym_value = ExprInt(int.from_bytes( + byte_stream, byteorder='little'), num_of_bytes * 8) + + return sym_address, sym_value + + + +def disassemble(sb, address): + """ + Callback to dump individual VM handler information, + execution context etc. + """ + global stack + global g_vars + # fetch value of current virtual instruction pointer + vip = sb.symbols[ExprId("RDX", 64)] + vsp = sb.symbols[ExprId("RCX", 64)] + var = sb.symbols[ExprId("RSI", 64)] + r8 = sb.symbols[ExprId("R8",64)] + + # catch the individual handlers and print execution context + if int(address) == 0x129e: + first_val = stack[list(stack.keys())[-1]] + second_val = stack[list(stack.keys())[-2]] + + print(f"{vip}: {second_val} <= {first_val} ", end="") + + # check ExprInt values and push if true or false + if (int(second_val) <= int(first_val)): + print("(true)") + stack[list(stack.keys())[-1]] = ExprInt(1,32) + else: + print("(false)") + stack[list(stack.keys())[-1]] = ExprInt(0,32) + + # clean one of the values from the stack + stack.pop(list(stack.keys())[-2], None) + + elif int(address) == 0x1238: + print(f"{vip}: [VM_STK] = *VAR") + # retrieve from the top of the stack, the address + top_stack = stack[list(stack.keys())[-1]] + # insert the value pointed by a global var. + stack[list(stack.keys())[-1]] = g_vars[top_stack] + + elif int(address) == 0x126d: + + # get the address pointed by vip + address = expr_simp((vip + ExprInt(1,64)).signExtend(64)) + # get now the number in that address + number = expr_simp(sb.symbols[ExprMem(address, 32)]) + + print(f"{vip}: if [V_PC+1] == 0: push [r8] ({number} == 0)") + + # if the number is equals to zero, + # push a value from r8 and create it + # as variable. + + # R8 will hold a pointer to the parameter + # of the fibonacci number + if (number == ExprInt(0,32)): + stack[vsp] = expr_simp(r8) + g_vars[r8] = ExprInt(fib_number,32) + + + elif int(address) == 0x11c4: + + # get the address pointed by vip + address = expr_simp((vip + ExprInt(1,64)).signExtend(64)) + # get now the number in that address + number = expr_simp(sb.symbols[ExprMem(address, 32)]) + # address of var + local_var = expr_simp(var+number.zeroExtend(64)) + + print(f"{vip}: PUSH ADDR [RSI+{number}] = {local_var} (push address of local variable)") + + # push the address of local var on the stack + stack[vsp] = local_var + + elif int(address) == 0x1262: + # get the address where to jump and + # calculate target + address = expr_simp(vip + ExprInt(1,64)) + offset = expr_simp(sb.symbols[ExprMem(address, 32)]).zeroExtend(64) + target = expr_simp(address + offset) + print(f"{vip}: GOTO {target}") + elif int(address) == 0x11a9: + + first_val = stack[list(stack.keys())[-1]] + second_val = stack[list(stack.keys())[-2]] + + print(f"{vip}: [VM_STACK] = {first_val} + {second_val}") + + # remove the two values from the stack + stack.pop(list(stack.keys())[-2], None) + stack.pop(list(stack.keys())[-1], None) + + # push the result + stack[vsp] = expr_simp(first_val + second_val) + + elif int(address) == 0x1245: + print(f"{vip}: VM_RET") + + result = stack[list(stack.keys())[-1]] + print("================================") + print(f"| Result value: {result} |") + print("================================") + + elif int(address) == 0x11f1: + # retrieve the values from the stack + first_val = stack[list(stack.keys())[-1]] + second_val = stack[list(stack.keys())[-2]] + # clean the stack + stack.pop(list(stack.keys())[-1], None) + stack.pop(list(stack.keys())[-1], None) + + print(f"{vip}: {first_val} == {second_val} ", end="") + + # push the result as 1 for true, or 0 for false + if (first_val == second_val): + print("(true)") + stack[vsp] = ExprInt(1,32) + else: + print("(false)") + stack[vsp] = ExprInt(0,32) + + elif int(address) == 0x11e1: + # calculate address for bytecode + address = expr_simp(vip + ExprInt(1, 64)) + # read from bytecode + constant = expr_simp(sb.symbols[ExprMem(address, 32)]) + + print(f"{vip}: PUSH {constant}") + + # write value on stack + stack[vsp] = constant + + elif int(address) == 0x1281: + + address = expr_simp(vip + ExprInt(1,64)) + constant = expr_simp(sb.symbols[ExprMem(address, 32)]) + target = expr_simp(vip + constant.zeroExtend(64) + ExprInt(1, 64)) + print(f"{vip}: VM_COND_JUMP {target} ", end="") + + if stack[list(stack.keys())[-1]] == ExprInt(1,32): + print("(taken)") + else: + print("(not taken)") + + # clean the stack from the boolean value + stack.pop(list(stack.keys())[-1], None) + + elif int(address) == 0x1226: + + print(f"{vip}: POP VAR") + top_stack = stack[list(stack.keys())[-1]] + value = stack[list(stack.keys())[-2]] + # remove stack + stack.pop(list(stack.keys())[-1], None) + stack.pop(list(stack.keys())[-1], None) + # create global vars + g_vars[top_stack] = value + + i = 0 + print("\t\t========STACK=========") + for key, value in stack.items(): + if i == len(stack)-1: + print(f"\t\tVM_SP => {key} ==> {value}") + else: + print(f"\t\t\t{key} ==> {value}") + i += 1 + print("\t\t======================") + + + print("\t\t========VARS=========") + for key, value in g_vars.items(): + print(f"\t\t\t{key} ==> {value}") + print("\t\t=====================") + +# check arguments +if len(sys.argv) != 2: + print(f"[*] Syntax: {sys.argv[0]} ") + exit() + +# parse file path +file_path = sys.argv[1] + +# address of vm entry +start_addr = 0x115a + +# init symbol table +loc_db = LocationDB() +# read binary file +container = Container.from_stream(open(file_path, 'rb'), loc_db) +# get CPU abstraction +machine = Machine(container.arch) +# disassembly engine +mdis = machine.dis_engine(container.bin_stream, loc_db=loc_db) + +# initialize lifter to intermediate representation +lifter = machine.lifter_model_call(mdis.loc_db) + +# disassemble the function at address +asm_cfg = mdis.dis_multiblock(start_addr) + +# translate asm_cfg into ira_cfg +ira_cfg = lifter.new_ircfg_from_asmcfg(asm_cfg) + +# init SE engine +sb = SymbolicExecutionEngine(lifter) + +# constraint bytecode -- start address and size (highest address - lowest address) +sym_address, sym_value = constraint_memory(0x4060, 0x4140 - 0x4060) +sb.symbols[sym_address] = sym_value + +# constraint VM input (rdi, first function argument). The value in `ExprInt` rerpesents the function's input value. +rdi = ExprId("RDI", 64) +sb.symbols[rdi] = ExprInt(fib_number, 64) + +sb.symbols[ExprId("RCX", 64)] = ExprId("VM_STACK", 64) +sb.symbols[ExprId("RDX", 64)] = ExprId("VM_PC", 64) + +# init worklist +basic_block_worklist = [ExprInt(start_addr, 64)] + +# worklist algorithm +while basic_block_worklist: + # get current block + current_block = basic_block_worklist.pop() + + # print(f"current block: {current_block}") + + # if current block is a VM handler, dump handler-specific knowledge + if current_block.is_int() and int(current_block) in VM_HANDLERS: + disassemble(sb, current_block) + + # symbolical execute block -> next_block: symbolic value/address to execute + next_block = sb.run_block_at(ira_cfg, current_block, step=False) + + # print(f"next block: {next_block}") + + # is next block is integer or label, continue execution + if next_block.is_int() or next_block.is_loc(): + basic_block_worklist.append(next_block) + +# dump symbolic state +# sb.dump() + +# dump VMs/functions' return value -- only works if SE runs until the end +# rax = ExprId("RAX", 64) +# value = sb.symbols[rax] +# print(f"VM return value: {value}") \ No newline at end of file