You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
(33) |
May
(1) |
Jun
(14) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
(10) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
(1) |
Nov
|
Dec
|
2003 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(11) |
Nov
|
Dec
|
2004 |
Jan
|
Feb
|
Mar
(3) |
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Andrew G. T. <ta...@ib...> - 2001-06-09 15:41:57
|
> > No I am not sure the interrupt vector will work under SMP. It > looks like > > your code is much better. > > I come to agreement with Vines to replace current code. I'll do it in near > future. Attached is a draft (not yet fully cleaned) new interrupt installation code. It need to cleaned a few and moved to CVS tree if everybody agree. I have some problems to determine thich function make in pageable area - so only one (actual int handler) are pageable. Can somebody build and test on W2K and NT ? ============================= Andrew G. Tereschenko Software Engineer Integrated Banking Information Systems ta...@ib... begin 666 src.zip M4$L#!!0``@`(`*.2R2H_+&B_#P$``%X!```+`"0`<W)C+U-/55)#15,*`" ` M``````$`& ``76;-]_# `0#(_OI=\, !P/-<UI0QOP%%D%%KPC 4A9\M]#_T MP0=]J#(VQA#Z$'.O&LS2DJ2502%HK5+FVJ"MX+]?JHX])=SOG-QSHHE<HA;D M$R/8'?5Y:WWO,4N(7D5QU]JN_1OIK\3)),M0^I[O,4%Y"JBBX6A.% *3X[RJ MBQZI.)74$:S;\\TV5=U>)H6U0>Y[`RAWW5&5YVM5E*NF^;Z3P:"W^1XU@ LF MG#6$5# :`P8A*"T9U>X"L=&H='!?__KQ;C9$"B:6AF.&/)INWGK"F5BC- M. MENZ=GZV=#4?_I<;Y<$23M#\`UO.4<4"1C?-G_XG3![VIJ@_-[%35Y24(]WWF M]F;+67$-IG6S+P_;[M2>JMTC]C/\"ND:P1"NC?N-Z.474$L#!!0``@`(`$J1 MR2JB*_<L2P4``,8.```)`"0`<W)C+TE$5"Y("@`@```````!`!@``)9:3/;P MP $`R/[Z7?# `:"'8=:4,;\!K5=_;]LV$/V;`?(=WC"@E3+7=9JN:..Y0!([ MC5<W]FRGQ8 !`F-1,5%:U$0J3F#DNX\_)-G)W!0M8D>R>+P[\NX]GBZ[.R]? M=I[D8SW!W7BLFW/[Y$;[[]Z]PY]2,9P*F3-53[C;B8P9M,2"ID56"*H9^JEF M>5YD&EVF9CG/M,PQI9>"*<@4-V_?(,OEC"DE<U5[JJZG"N97GJ0Q2Q#UN]/H M+#(",^(I6PO\]TG3]\W/)QSA!&,,,<%3KEF'1;K]R='QH!?USZ<3\K$__FN M*.IR*6*>_RNBJ(U_=G>^M;V/;$RY8GVC&>"L_^$L&O0^]P8-/+OG`^&C7B*J M%F2%K%#S)"9W3O9]]9G@=N35OZV]CK1WO@Z4K)R73&9)O/;R:*0#N62YB_1> M;&';L^'AJD9R/L6%8@IZSI!((>22IU>XIJ(PPD3FX/JYPL&K%Y=<(Q%40S'! M9KJD]P9*QE5T,B%!Z^9M>$]X<3*!D>X?WQ=WG>ZK@_O2TPFL\D$K?$H"&T?$ M?C;#G^)OC-!#UURGF#PM<UU>LIQ>+2@R.OL:..8T,!KW^MTI3'#Z-F/V#"N= M%S-M0S<3NSNKW1WR93CNDN5 #A/5)L2 9&#%%YG'D(D#JC\9&U!DDBBF:_U) MB4O;6GB-"JJF^:BY+$2,2X:W*-*8Y69)8UND7*98[9#2RZF@5^6J[G%M2<5" M*FU^EO1663^O>ZV6HTC)CIDME\;9^;1I'),RL%5-5T(N3LZ.QBAF8Z98?LWB M]I:YJ<G+X>MM,T=NY=;A_K;);B8.7VV;&.5FL51;*T+NS,U>/M8S7F?XC-<) MOI]<^[4.+=7]+Z9SKC"7\JL"36'A[*4ZO[5OBDSR5-L'BI0M2R<V&Q82#<'H M=7G69D6>FVW9MX4V&%D0C*KFZ97QZE1NO1G-61-'<<RM#A7BM@&3ZYSI(D_+ M8VM/I5_*+FU$WE(:T$PPF-,T%BQO`E-I%S% +3+!-!.W;I<;6_"&B04>A6*8 M,!V$!FLAE\UU'HS6M>0QSDP.`HP^#_M=Z\@DLU&.LJ&(S;!S?C$86+*3%2&6 M$YN%W/DA/$%0J>.7#FH+0O:"4=<"%5;3'1)XS/[X8_]-B-_@SPC:WI4?$=*! MM0K\CD)8W.O#829=F;),(63-1"-O53++0.NE==.K1"7U-K6ZF;!*!]6XY)D1 M.:;YC=:;"0(?2KFI]^]M`.6^-VJ^&=[]&./H0S2Y[5!L@W)%-:M!PT4J^%=6 MEIG#0P==V("VGME-)OB,:^-!,>U)9:V?J]I\S9$&+J6>@^I:#8)=,X%GX(O: MSY(;'<?$TH$K#E4]0D:58O$62EG"E1R2EDXV:9Z/(9SR:CN-'F O'?"[6Y%W M4E?;8/6=<R_<#IFL\7H$,.(3"YFQG)K5.D$IV,LC'FMW!+ZW<Z?YXGU9^!]N MOIJMR_PZCDUC7[]Q/YYJTA>\+4%8@2\IV+.4:'\WKA\,J_E85,U'@VH^$E/S M)T+R+XCJ=/GS=?3A$/WG"Q2IFLN<0<\=O[F"^;NF@L=P#-ZT-OZ.A\,!^NJS M50A"HY$J7:6D7#M 6;-"/'MFGJM(.QW'QA!AO;&[\G0VL#?R3^W_-1$RV^PA M?JY%VN@$^_B$$0;HF=\>SC'%D;GZ&)KGGW.]WO&2YBE/KP+$7-E_D'"(UZV# MWQ':5\S4YD8F"5)9OLM\SUE9^<C<3C\PVX':8N,JWR55S'4=#]ZB_G\N;\53 M89OI,HLDBA*J](P*89T9R;'Q$82NV7+-NNVSL0(6\AJ,WC00C4[&^&AN3;LD M[HA!I\)^6X0LH870=81E_\?2F"<[_P%02P,$% `"``@`P&L)(:+?A;_B```` M"P$```P`) !S<F,O34%+149)3$4*`" ```````$`& ``A,&WW86[`0#(_OI= M\, !0 YCUI0QOP%3YN525G#Q5_#S#U%P=?$,40CQ\ Q6<//T<5545%10<$W) M+%'0BRG.+RU*3BW64\A,4ZC,+U4H3\PK42C)5TA,25%(5,A++5> J `9EI:9 MDPJ2*\G(+%9(SL\MR,]+S2O14U (`0F 97-3BU)S*A4R\U(RBU*32XHARE,5 MBE(3<Q1R$[-3P<I AI5D))8H`+459R06I:8H)%4J).;D@-6F%&66I18A+"A6 MR$\#2X0#C<TO+U;P"U%P<?$&&L++Q<NEZ.GG[!/JXJJ@HN$7XNOH[>KJ%Z89 M`[(*9)->2FH:+Q<`4$L#!!0``@`(`&:.R2I,B@T7S@$``(,%```2`"0`<W)C M+T1B9U1R87!0<F]C<RYH"@`@```````!`!@``+ 7H//PP $`R/[Z7?# `6!Z M7M:4,;\!M51;:]LP%'Z>P?_AD,+(1G#88]@%G#AINK:QL17&GHPOQ[&H(QE) M;A?&_OLDV6FST4=70K?O''_GZ#O"\_G749KKS.=@IR _$)&UD>"%]&H#6?C3 M8K& [UPB;!HN4#X;[*2]%5>G%B6\AQ(KRJBBG$GH)):0GX"K&L69&R3O1(%P MY&6'C81G'C/&NH_K7-&*Z5P@38/E-8G]*(WB<)6DVS351ILEOFXT'7\I% PF MJ\EO0\6*IBL1OC!5E@]>_>T2>Z(FC@7_7."3X;IZ\>K)*X85/QXYLS;3QZSE M.]/@LEW#'82P!%^OR;A"OW'J$<0Z<V+'3WU:CYW_\)(W@A\AP+P[)"@>:8%; MSA^D5[1M[^(Z.Y(0G^QU^!M&E2EABV+ZX;.Q+</PSN!294WS/\O4=<ZW,7Z0 M&[#'^J]?7IOK/'):NDY +,D!A8DS!.E-2T'9(>!/[-\,WJ@,>]A!H,5?Z=V] M%G^GR[#6"$"B=WO8Z#YN/2[%"'Z$<> ZMYB@\BO[8SF16F!6]II&MV0;K_U@ M9D_6&[+![SZ3O<AG?5Z(=<:4*=@1/[IQ'=EJ154UA:+.!'S,NZI",8."ZVH. M6,7%,5,S\#QOH+M"5M+*=?X"4$L#!!0``@`(`-6+R2J3X(IUCP$``#\$```3 M`"0`<W)C+T1B9U1R87!#;VUM;VXN: H`( ```````0`8``"5],+P\, !`,C^ M^EWPP % #F/6E#&_`:V1WV_:,!#'WY'X'TZ=M(&$((P7>.A#YK@E6Q)725II M$I(%X6@\@5W9;H'_OB;\;,NZ/7!1+.ON\OG>Y=OI7%\DZK5.!ZHCF#SF>OQ$ MU&*A9+O<Y*I\=S 8P$]E$&[F2J,Y%*J#*&G'0AJ8XDQ(8862I@5V_80NX6YH M"R@J)$R4+<$JL"7"[7T(7V&JQ0OJ`VS_7FJS>NV+F$DW!_#@QVV>^G><L#AF M"2^YJU43X]G:YKGH'_YKQ. #@1089'#AW7?[!3E_H&D6L@2@X:VZGN<U-\8] M:XW2@C/ .--@B=\T@KLTAN*QA,G:(@A3F56OP2?A6(OQ'Z7WI#9$:OGF^X60 MNW*[>3K931A1'M"'D% ^9.Q7F.0`WLH-Z/5[GG?:&C*21U7347B3(2R@C3.< MEN/T>]T6Q#0?LH G-,R'-&UM-?WD-_<)H5G6?"]QGYR*_%OB^_]('$62?$]) M_)AN1:*KT2C %U'@:!0)^;S*UJ88S^<I3H7&PBI]=>(FRSX0*H R6X;Y!.(P M**=B5J^]`E!+`P04``(`" "8ALDJ:!*@;*<```!=`0``$ `D`'-R8R]$8F=4 M<F%P1&)G+F@*`" ```````$`& ``N(MWZ_# `0#(_OI=\, !P/-<UI0QOP%] MCT$.@C 01?<DW&$"FW(%<2.65*(+A;HCF6@<2!-LM.#Y8ULDDAC\LYG^SNO\ MQJK1-VH`D4OD>786N$,,@]B:2M./[\HR#N&9\*?/))='H_3 X-ZWD( 3O[:C M%]E.FLMC!5&2VHLZ#&!9$^9?FND_E7ZWU=JNF6?;5%5>2BS*TX%!Y].-%H,] M"1JV+V-(#X5Y=BR!M1OQ.'4]+?]Q'-$WU<R#39YMWE!+`P04``(`" !@CLDJ M",_B?J0&``#M$ ``&0`D`'-R8R]$96)U9U-E<G9I8V5(;V]K<RYC<' *`" ` M``````$`& ``HO"8\_# `0#(_OI=\, !8'I>UI0QOP&U5VUOVS@2_KP&\A_F M4J!UKJZ3]/8.;=W@X!>U\<:U!4OI9K$H#$H:V[S(HD!2B7V+_O?CD)(L)^D" M"^0$V+(UG&>>>>-0IZ<7SW(=M4Y/P7Z-HE4H6=Z-\YS^VV?G[]^_AU^$0OB4 M"HFJ%MBO\29/<8.95L#2%/0:(18)@A:P%N+6/A1+F(:O%(PP*E:@4-[Q&)59 MR[016)@-NS5/"F/$++[C#%@&/-/P-ND"U-;H\UPNO^!9G!:&Z7'IM"]%K+KK MXZ:()]H^>4[#IZ<_T07-ZS-,8 8#Z)M[\)S&CEJC7V?SD3&14/ #%_NO&&LA MX0+.MN_.>D2 ,IEIE++(-=PYL<E&`M'.INBH-9C-)K0R^A4O36*-Z (^]2>! MUR/EOD2X1YMR(]FA[G;ON5Z#$ALT7T5*$--P,1Z%`")-S-WK.;LSR5<\8RF0 M##,M=[ TUJF2+.<5RJIFR(3$/&4Q'K7\K[,Q.49HP?P16#"W,*,'$,V0;-AV M4"R7* /^7S3NO/WGO_Y^?O;VYQ+K"]N"E8@EB$("WAEV$%D-:&-TLD>*:I@> M/+PH.K$N#*<7A!3M--I>$3'3)E9$$J,]5%9L/!,$CNI)*"*%3@X\LU%J\CIJ M707^>+J8S(973B=*G\1QCL-$Q+<FE)7QG&<);A\K.!U?<*H1ZFW;YX649-GJ M5&0J&O^WCAG#%_!A`IZY>S"%$/KF,X893)^W<:9A$/;#Z^"H-<ZXIATB1]DV M2?_CJ.4"4MV!%G"64JWL8P"IC6USZ17N5P8FUA3]-KR,4CCID4E:(U$7,@-G M>Q%<#X=>$!CI=Q=3NQ=^DHA0Y+8JM2-F])3Y&U?[\YW@R5%K('FV&HG[[)!^ MB?8BEVRU8:X8%QJWNGWL]S][QYU16/4-*1HE(T/#ZGAX[*!AD6"<JASC=L9N M,:%>.-!I!$IIIGD,58TU+[53L;%^R;(D1>EK6;:>SR3;H#&I(&>*]J&RYAI= M3/H+IC;NUQ\T)NJ$#-<8W]K6"GX+AOW)9#$93[T;;[BX[$]'$V_N5L:;W-) MMNW V<CKCP:>]VGMA+],/7 )6:88ZT7)M;+R9?;5BD?!AT=>=, ;W+AEX[D7 MCDCGJ/4`Z(-;X%\'EW3W^C<-!Q2GN0J*95SO("9W#LV:Y9TG;;MEPR_^?ME9 MZ9#S!S*Q6+OEE<&:P^#FH7OF4:=,G1_.X7<O\%^_^U;M"!)90G-"I@80O+$/ M2RDVE/&'?!]!=(A;A:-06VV3Y=(A*"G"(T+])PB]/G_[S0*M""AX3".X'NRU M?_YS:@16LC.(]Y)KA SO+>Z/-?LWWVS:]]NEG5/6+9$9SW+:_>M8E=P<7B[* M.HRV[H'[_D]5GENNFRG;)_##`WU6ZN>%6M/]S3_>P0\N0Y"D%Q?@36?!;P$! M-PWMH7\Z@.82=>)^?B_WD7I?"M=<P:K8`;,#+]T!SXRC::IL\]H#H<CVH[V> MZ^[$T;4@<[L!*@CGUQ[P)<W\&B[A";!LI]<\6W7<\8.69$)WZP,B3&>A]\%Q MD:+0/$-HI_P601C#LAR;1IA(?H?R!,Q/HV*>V6I6;(F.R*R0<+\6U(9%I'9* MXZ::>88*;G-#6@$#9<B81;'(M#2KY9OR`<%1P@Q4.RHTQ"R#-;M#V!0ZY=3> MMK:D:L<F7R<GW4/.:BV*-*%@25P*B19(9,9T9(R9<&!"X>6)B8\)C,J9CM>U MMFT`"O3GZW$'A"SGLP4AIKC55(]V3[6NO5)P+^0MC7<7"#J%CVR(Z#RRLR#7 M62I8TG6A=F="&H\VQZ/&`9-.B&U7)-5ESX\1">KZ"V51ORA4V31_)6[$'3KM M_13QR]-CSA,]8(K.:]/KR:1'TD<#N5_6",$EXM^'<KZ$=O,8>U'2.BDGR9YW M.8O+8VYYU;5O=X#0ESS3;6@?$X8Q>7QBA_D#0A-!+6K<DO:-*)<B1J6$5/#2 MM<6/>N(0B29:&^(UDQ#GQ<59CVX?KW!:;"*4?HW:@]>OC:3A4NV4?Q5>SKW^ M"/+0Y?D"KO SZJ&K;/>P7;E@#RT!ZOYRR6D4E>)*N0/G'S]:0[V&B8JM<]U@ MNWZKG7ZE[%D_HBRR))'FX5.ZC4P;#*-!?]K.4KW();.9OP?:OS_UYO.M:RL4 M#L\L'7CI7B:,._M,T^:7*OSKX$VLBO'W_8RO:R.P`<*R[TQP6!EL$Z'XUG9$ MD=&^>5@YASA_+:U_GM.V2>KCFCIY<]Y(<X/_5 "U";6;)9R)^VZW:U_\)6W- MU(B'2LUWR+_5?WK[,)6-1R.@.OK^#U!+`P04``(`" "WC<DJ=B,+9+P)``"L M(P``$P`D`'-R8R]E;G1R>7!O:6YT<RYC<' *`" ```````$`& ``"<C=\O# M`0#(_OI=\, !H(=AUI0QOP&U6?]OVL@2_[F1\C],<WHM2)2T=WU/:J.T(D!: M]XB-P#0Z/55HL9>PC=GUVUV'<E7^][=?;/P%D] K==0"]LSLS&=F9V;'QT>_ MQ1S=+!&L$*>$WC0@) +-(@QOX?7O+U_!ZW^_>@VO7_[G9?/XZ/3T_""7E@3F MOSZ5?!TS0J5H!W&L[YG[K]Z\>0.?F,!P&3&.Q>:!^:_+J$2$"D!1!'*!04A$ M0\1#P$H>L?(`?XMQ('$(LS6X?ALZD6 0I*Q&3L9.*)$$1>1O) FC\ R""".: MQ(HZQ#!G'$).[C"'1D*;$4.A`JJ]4>>0N/Q&:! E:M&3WNS&YR@><A:(]N+D M^$C__=Q"FO^)N:Z@`UT8@0?CGQ=Z4-5 73[\!4/H0T_]NSR4AFG\]$;.Y_YH M.O8[?A^(@$38`&$)AZ[V^B2&>4(#$PB208@EYDM",:P62,**\5LCATB@&(=" MT\PPA(SB-G2$":<T6 *VC"/%+A3Q<U$-LA6V<FC \1)3:8F$1%()`F<.B +F MG'%@09!P`6'"";T!I02B:Y!D:05TTU -&<[W@U83$AHRS6$5Q\_OK)J@B)72 M4M\U.Z5MP3D^DNL8AW@.F";+$E#'1]^/C[1GS*^IXSJ^TQFT8',I/:XQL!4% MRH!CH= ,]*;->3YVQA>3R\O^J%7BT4HII5F ]$;53L!W&HQ9,I]C7A'0ZW]V MNOUQJRI (6C8D?+6'0F4(K.O.) 5[H'C_EE5N<PMULL9BT@`$:&W1>XK3UGL MC1SW0YF;8U@P=JN8%8S,^A[/DIL;Y7V!N=;E^.C^[+![]P,,P(,+Z*C/@^R- MTI90EXG!,V/C&./RC@F)"!(A= "C&;O#AS/L4ADU@FMEU@AZ2@N]^;O*1/V[ M`SXXZKE[&(/Q-XDYA9/NR?&1ZVO#)DINS^Q:4Y :UOF."\/4>N_B4[_K@Z7Q M3'BU<J*)ZW2]7E]A9&)DA&^(4&*&2"XTB25LGATF56Y#9T/R4D$T`.W!L0+. M,QD43(Z?&/A<]7M\R,4W.?6*W6%A-F^PP/COM8T@6*)@H1/G9F]0!;Q]9ED) MC=3S<@`JCRBJL29J-#=Y!TY/IT@L];>(!;<Z:V:"C ^H<JA^@$,GRZ<-: P' MGONA^<QJ8^'7U!S+1+G?AOGQT7VI/NQK2\SQ'6&)>-R>84I9M6EODWKXYTQ2 M"L2(IU:EM<E6K83J9@:';? 71$" J+X;H"C"(<PY6^I2LUI@;DL-91*^)D(: M`"PO<)9(HFL?=.@:YDBBR)8M`2L214:8HE?29WC.4D$B)IQ$NC:%;$57NG'3 MI9:Q95J+[A@)X?@HK6WI=M37`_LQ)\HQKFS,A))K0O_XW45+/):ZG)X9.DO< M\X?JED;Y)"NJ%HJG3T^@64!;K(@,%M!(8Z-I[W[/%0B0P%NEXVW^W#I8<4=1 M3]>+L:T5'QF[;<!E9S#NF]5JQ*5UK")+]S58MQK&,[IZ6>\9A]N22)7)&F1D MOQ%J2 T:YHZ(4:"\6)8[DI%#B9Q0HAMABU@#GFW#V(*>-Y[:^CQU.U=E_8VY MS&HX3FOL0"E9*ZJ \[;M:0>P;?XEH0K,M;+6P% PG%6"HZA,SY T2F'TXIV] M:W\]J(UM:&J4X=AT65H+R5$<8UYMBK+K0IO<8ROJ6[K&SO72IJNRFHW \S)- M!?H9Q^@VO6<RP[U-#K^F#-G+!1^@;SY&\!? $#Q3@OQ#EZ#-BIMT]Q'1,%*( MZV.;3C[.:#B]^C3M#KQQWQ)E-5_Q]/QNQ 1NY&7:%'T;R&F2B7M>J_!0R8/8 MX7&ALIM\DV7U[!,^Z529'0+,=M.LE/&E#M4RN1;XXIW#=)%(1-M^I'Z=C*?C M2;?;'X_/,C58-Q4[PO]+L) -S=\"QYNZWM1QNZ/^5=_UH6D82B5B6^!]H504 ML4MQ2['H>JX_\@;P;(/GJ&_*FSTZE"#M$1$C&2P.@:I)^I\]IZ<CC- XD1?F M:+#Q^SFXDT$6\AM*EL@MTA)E[]H;564.,+TQ'=LYO*R2%05F=#G9QOP'+F%] M6KHV#G8]?^I<#0?&;_U>YNBA\JBBZ/XY'7C=CN]X[A,-TEBBX%8Q.^P#EMV$ M<TQE=GN@SU*$41,260#41*?BM(V,/@+:CL".0I29I];:]!0&B(;V=!H9PW-1 M]EN-5\YAH^:+=T/$T5(?HT7;IE8=OE1R%K7]=8S_<'+^%,X:[YVG6V0B,"_1 MUOAOW]6=*FO-\JG,?45Z6ZRIS-IM[M"YS@9F'J"#"6K\E&TFF"$]JE"42_25 M<9@'U(RGLIJ=L63-24'?*\UPF0XUFBG]=ZB4F=*^?@O;=>:!A%0N-7G2J0HO M)Q.]R)-*Y[6#L/&OL'G2VM>OV;>NPJ>YU8HH4'-4%9Z.U_4'57NW4=Q_P;*H M[Y7?.29ZW>E'S]/MW),M(#9/3[9-R"XRA\;N3M(?3?JZ<:WG_5Y_VZ2S_ BV M8^'[7:SUY+O"IYXZ:U@>Q&WBILC]$V32'OL?0%,YS>V&YY! [ =TB.<HB>3; M>OK34WC_'J[U80Y"$MHS6<"6V!X5WK_?3^$=A6H?S>]WY(K\=KT%/ZCY#VK\ M>$K>V4L7TG4Z#33SU161"W!./>"V.6L#C'# ]"'7OJK0ZK&Y[0@5&3)YN0T/ M=X*6KY!;=6U@]+F$&6-"0LP)XT2N8;7 -.WV]'%*$!I@BYED[!8B(F6$S?RX M_?/M9*[5?=IFV#_=AYE><&+&!)L3_,,CM8Q*MWY0=RZWTI19U2-Y-BDHB3// M[XMJ92^[=.&<"GS3.-%'II/FKY\#5GO:M+\K]\1A\>19:E<W#68*^*[QABNK MLXU]9R#;8!> R&9"+\#D4KA(2!0^-84)ZMM+)WO;@>$F8C,4B4J;LN/@^I @ MO6&*+P:*LLP>T;3%@_2F$#QU_2S5-BRU4AVVYC;%"1!+HE#O+I*O'Q&:?#,G M>A#KF5@+B9>5XKP[#C.*\L8IG,KK"V\AQ6Q\I-_ZF)<6Z1N'K3E'!LSN^4TQ M3EJ@T*F;W>2X,KM>.B^I2?DU&Z)TO6S!CJ)T;;*F`CH1.'^#HT?T5+]FJ)&U MI7\-S:4SZ&<VZ3[!<?T?4\ME^4OE5*=@@3@*).9$2!*(NE5U6]&J$V?FJ\[8 MO-3[%D2)4'"E<NLL+":"FN?5X-@=XWN%>% -II\.ZD?#NM3(U.SZ,9;9!"W, M6O4Y#43U[%F>W)4..O\M'6B^Z&-A/IHXVY]=SXV^@&4WPZ+]><NGF"^/:V!_ MV2IGJ.W7LUJ,TAQ0>6]I9C?:E1\F3A&MQS+"WA/=K:Q0'NGN;IVSO;NUDC[] M/*G;V8\(R\N_W@`U\?_#X5]"\M>E]F+HU_#=US0JRI3_`U!+`0(9`!0``@`( M`*.2R2H_+&B_#P$``%X!```+````````````( ````````!S<F,O4T]54D-% M4U!+`0(9`!0``@`(`$J1R2JB*_<L2P4``,8.```)````````````( ```%P! M``!S<F,O2414+DA02P$"&0`4``(`" # :PDAHM^%O^(````+`0``# `````` M`````" ```#R!@``<W)C+TU!2T5&24Q%4$L!`AD`% `"``@`9H[)*DR*#1?. M`0``@P4``!(````````````@````(@@``'-R8R]$8F=4<F%P4')O8W,N:%!+ M`0(9`!0``@`(`-6+R2J3X(IUCP$``#\$```3````````````( ```$0*``!S M<F,O1&)G5')A<$-O;6UO;BYH4$L!`AD`% `"``@`F(;)*F@2H&RG````70$` M`! ````````````@````* P``'-R8R]$8F=4<F%P1&)G+FA02P$"&0`4``(` M" !@CLDJ",_B?J0&``#M$ ``&0```````````" ````A#0``<W)C+T1E8G5G M4V5R=FEC94AO;VMS+F-P<%!+`0(9`!0``@`(`+>-R2IV(PMDO D``*PC```3 M````````````( ```" 4``!S<F,O96YT<GEP;VEN=',N8W!P4$L%!@`````( -``@`\0$``#$>```````` ` end begin 666 src.zip M4$L#!!0``@`(`*.2R2H_+&B_#P$``%X!```+`"0`<W)C+U-/55)#15,*`" ` M``````$`& ``76;-]_# `0#(_OI=\, !P/-<UI0QOP%%D%%KPC 4A9\M]#_T MP0=]J#(VQA#Z$'.O&LS2DJ2502%HK5+FVJ"MX+]?JHX])=SOG-QSHHE<HA;D M$R/8'?5Y:WWO,4N(7D5QU]JN_1OIK\3)),M0^I[O,4%Y"JBBX6A.% *3X[RJ MBQZI.)74$:S;\\TV5=U>)H6U0>Y[`RAWW5&5YVM5E*NF^;Z3P:"W^1XU@ LF MG#6$5# :`P8A*"T9U>X"L=&H='!?__KQ;C9$"B:6AF.&/)INWGK"F5BC- M. MENZ=GZV=#4?_I<;Y<$23M#\`UO.4<4"1C?-G_XG3![VIJ@_-[%35Y24(]WWF M]F;+67$-IG6S+P_;[M2>JMTC]C/\"ND:P1"NC?N-Z.474$L#!!0``@`(`$J1 MR2JB*_<L2P4``,8.```)`"0`<W)C+TE$5"Y("@`@```````!`!@``)9:3/;P MP $`R/[Z7?# `:"'8=:4,;\!K5=_;]LV$/V;`?(=WC"@E3+7=9JN:..Y0!([ MC5<W]FRGQ8 !`F-1,5%:U$0J3F#DNX\_)-G)W!0M8D>R>+P[\NX]GBZ[.R]? M=I[D8SW!W7BLFW/[Y$;[[]Z]PY]2,9P*F3-53[C;B8P9M,2"ID56"*H9^JEF M>5YD&EVF9CG/M,PQI9>"*<@4-V_?(,OEC"DE<U5[JJZG"N97GJ0Q2Q#UN]/H M+#(",^(I6PO\]TG3]\W/)QSA!&,,,<%3KEF'1;K]R='QH!?USZ<3\K$__FN M*.IR*6*>_RNBJ(U_=G>^M;V/;$RY8GVC&>"L_^$L&O0^]P8-/+OG`^&C7B*J M%F2%K%#S)"9W3O9]]9G@=N35OZV]CK1WO@Z4K)R73&9)O/;R:*0#N62YB_1> M;&';L^'AJD9R/L6%8@IZSI!((>22IU>XIJ(PPD3FX/JYPL&K%Y=<(Q%40S'! M9KJD]P9*QE5T,B%!Z^9M>$]X<3*!D>X?WQ=WG>ZK@_O2TPFL\D$K?$H"&T?$ M?C;#G^)OC-!#UURGF#PM<UU>LIQ>+2@R.OL:..8T,!KW^MTI3'#Z-F/V#"N= M%S-M0S<3NSNKW1WR93CNDN5 #A/5)L2 9&#%%YG'D(D#JC\9&U!DDBBF:_U) MB4O;6GB-"JJF^:BY+$2,2X:W*-*8Y69)8UND7*98[9#2RZF@5^6J[G%M2<5" M*FU^EO1663^O>ZV6HTC)CIDME\;9^;1I'),RL%5-5T(N3LZ.QBAF8Z98?LWB M]I:YJ<G+X>MM,T=NY=;A_K;);B8.7VV;&.5FL51;*T+NS,U>/M8S7F?XC-<) MOI]<^[4.+=7]+Z9SKC"7\JL"36'A[*4ZO[5OBDSR5-L'BI0M2R<V&Q82#<'H M=7G69D6>FVW9MX4V&%D0C*KFZ97QZE1NO1G-61-'<<RM#A7BM@&3ZYSI(D_+ M8VM/I5_*+FU$WE(:T$PPF-,T%BQO`E-I%S% +3+!-!.W;I<;6_"&B04>A6*8 M,!V$!FLAE\UU'HS6M>0QSDP.`HP^#_M=Z\@DLU&.LJ&(S;!S?C$86+*3%2&6 M$YN%W/DA/$%0J>.7#FH+0O:"4=<"%5;3'1)XS/[X8_]-B-_@SPC:WI4?$=*! MM0K\CD)8W.O#829=F;),(63-1"-O53++0.NE==.K1"7U-K6ZF;!*!]6XY)D1 M.:;YC=:;"0(?2KFI]^]M`.6^-VJ^&=[]&./H0S2Y[5!L@W)%-:M!PT4J^%=6 MEIG#0P==V("VGME-)OB,:^-!,>U)9:V?J]I\S9$&+J6>@^I:#8)=,X%GX(O: MSY(;'<?$TH$K#E4]0D:58O$62EG"E1R2EDXV:9Z/(9SR:CN-'F O'?"[6Y%W M4E?;8/6=<R_<#IFL\7H$,.(3"YFQG)K5.D$IV,LC'FMW!+ZW<Z?YXGU9^!]N MOIJMR_PZCDUC7[]Q/YYJTA>\+4%8@2\IV+.4:'\WKA\,J_E85,U'@VH^$E/S M)T+R+XCJ=/GS=?3A$/WG"Q2IFLN<0<\=O[F"^;NF@L=P#-ZT-OZ.A\,!^NJS M50A"HY$J7:6D7#M 6;-"/'MFGJM(.QW'QA!AO;&[\G0VL#?R3^W_-1$RV^PA M?JY%VN@$^_B$$0;HF=\>SC'%D;GZ&)KGGW.]WO&2YBE/KP+$7-E_D'"(UZV# MWQ':5\S4YD8F"5)9OLM\SUE9^<C<3C\PVX':8N,JWR55S'4=#]ZB_G\N;\53 M89OI,HLDBA*J](P*89T9R;'Q$82NV7+-NNVSL0(6\AJ,WC00C4[&^&AN3;LD M[HA!I\)^6X0LH870=81E_\?2F"<[_P%02P,$% `"``@`P&L)(:+?A;_B```` M"P$```P`) !S<F,O34%+149)3$4*`" ```````$`& ``A,&WW86[`0#(_OI= M\, !0 YCUI0QOP%3YN525G#Q5_#S#U%P=?$,40CQ\ Q6<//T<5545%10<$W) M+%'0BRG.+RU*3BW64\A,4ZC,+U4H3\PK42C)5TA,25%(5,A++5> J `9EI:9 MDPJ2*\G(+%9(SL\MR,]+S2O14U (`0F 97-3BU)S*A4R\U(RBU*32XHARE,5 MBE(3<Q1R$[-3P<I AI5D))8H`+459R06I:8H)%4J).;D@-6F%&66I18A+"A6 MR$\#2X0#C<TO+U;P"U%P<?$&&L++Q<NEZ.GG[!/JXJJ@HN$7XNOH[>KJ%Z89 M`[(*9)->2FH:+Q<`4$L#!!0``@`(`&:.R2I,B@T7S@$``(,%```2`"0`<W)C M+T1B9U1R87!0<F]C<RYH"@`@```````!`!@``+ 7H//PP $`R/[Z7?# `6!Z M7M:4,;\!M51;:]LP%'Z>P?_AD,+(1G#88]@%G#AINK:QL17&GHPOQ[&H(QE) M;A?&_OLDV6FST4=70K?O''_GZ#O"\_G749KKS.=@IR _$)&UD>"%]&H#6?C3 M8K& [UPB;!HN4#X;[*2]%5>G%B6\AQ(KRJBBG$GH)):0GX"K&L69&R3O1(%P MY&6'C81G'C/&NH_K7-&*Z5P@38/E-8G]*(WB<)6DVS351ILEOFXT'7\I% PF MJ\EO0\6*IBL1OC!5E@]>_>T2>Z(FC@7_7."3X;IZ\>K)*X85/QXYLS;3QZSE M.]/@LEW#'82P!%^OR;A"OW'J$<0Z<V+'3WU:CYW_\)(W@A\AP+P[)"@>:8%; MSA^D5[1M[^(Z.Y(0G^QU^!M&E2EABV+ZX;.Q+</PSN!294WS/\O4=<ZW,7Z0 M&[#'^J]?7IOK/'):NDY +,D!A8DS!.E-2T'9(>!/[-\,WJ@,>]A!H,5?Z=V] M%G^GR[#6"$"B=WO8Z#YN/2[%"'Z$<> ZMYB@\BO[8SF16F!6]II&MV0;K_U@ M9D_6&[+![SZ3O<AG?5Z(=<:4*=@1/[IQ'=EJ154UA:+.!'S,NZI",8."ZVH. M6,7%,5,S\#QOH+M"5M+*=?X"4$L#!!0``@`(`-6+R2J3X(IUCP$``#\$```3 M`"0`<W)C+T1B9U1R87!#;VUM;VXN: H`( ```````0`8``"5],+P\, !`,C^ M^EWPP % #F/6E#&_`:V1WV_:,!#'WY'X'TZ=M(&$((P7>.A#YK@E6Q)725II M$I(%X6@\@5W9;H'_OB;\;,NZ/7!1+.ON\OG>Y=OI7%\DZK5.!ZHCF#SF>OQ$ MU&*A9+O<Y*I\=S 8P$]E$&[F2J,Y%*J#*&G'0AJ8XDQ(8862I@5V_80NX6YH M"R@J)$R4+<$JL"7"[7T(7V&JQ0OJ`VS_7FJS>NV+F$DW!_#@QVV>^G><L#AF M"2^YJU43X]G:YKGH'_YKQ. #@1089'#AW7?[!3E_H&D6L@2@X:VZGN<U-\8] M:XW2@C/ .--@B=\T@KLTAN*QA,G:(@A3F56OP2?A6(OQ'Z7WI#9$:OGF^X60 MNW*[>3K931A1'M"'D% ^9.Q7F.0`WLH-Z/5[GG?:&C*21U7347B3(2R@C3.< MEN/T>]T6Q#0?LH G-,R'-&UM-?WD-_<)H5G6?"]QGYR*_%OB^_]('$62?$]) M_)AN1:*KT2C %U'@:!0)^;S*UJ88S^<I3H7&PBI]=>(FRSX0*H R6X;Y!.(P M**=B5J^]`E!+`P04``(`" "8ALDJ:!*@;*<```!=`0``$ `D`'-R8R]$8F=4 M<F%P1&)G+F@*`" ```````$`& ``N(MWZ_# `0#(_OI=\, !P/-<UI0QOP%] MCT$.@C 01?<DW&$"FW(%<2.65*(+A;HCF6@<2!-LM.#Y8ULDDAC\LYG^SNO\ MQJK1-VH`D4OD>786N$,,@]B:2M./[\HR#N&9\*?/))='H_3 X-ZWD( 3O[:C M%]E.FLMC!5&2VHLZ#&!9$^9?FND_E7ZWU=JNF6?;5%5>2BS*TX%!Y].-%H,] M"1JV+V-(#X5Y=BR!M1OQ.'4]+?]Q'-$WU<R#39YMWE!+`P04``(`" !@CLDJ M",_B?J0&``#M$ ``&0`D`'-R8R]$96)U9U-E<G9I8V5(;V]K<RYC<' *`" ` M``````$`& ``HO"8\_# `0#(_OI=\, !8'I>UI0QOP&U5VUOVS@2_KP&\A_F M4J!UKJZ3]/8.;=W@X!>U\<:U!4OI9K$H#$H:V[S(HD!2B7V+_O?CD)(L)^D" M"^0$V+(UG&>>>>-0IZ<7SW(=M4Y/P7Z-HE4H6=Z-\YS^VV?G[]^_AU^$0OB4 M"HFJ%MBO\29/<8.95L#2%/0:(18)@A:P%N+6/A1+F(:O%(PP*E:@4-[Q&)59 MR[016)@-NS5/"F/$++[C#%@&/-/P-ND"U-;H\UPNO^!9G!:&Z7'IM"]%K+KK MXZ:()]H^>4[#IZ<_T07-ZS-,8 8#Z)M[\)S&CEJC7V?SD3&14/ #%_NO&&LA MX0+.MN_.>D2 ,IEIE++(-=PYL<E&`M'.INBH-9C-)K0R^A4O36*-Z (^]2>! MUR/EOD2X1YMR(]FA[G;ON5Z#$ALT7T5*$--P,1Z%`")-S-WK.;LSR5<\8RF0 M##,M=[ TUJF2+.<5RJIFR(3$/&4Q'K7\K[,Q.49HP?P16#"W,*,'$,V0;-AV M4"R7* /^7S3NO/WGO_Y^?O;VYQ+K"]N"E8@EB$("WAEV$%D-:&-TLD>*:I@> M/+PH.K$N#*<7A!3M--I>$3'3)E9$$J,]5%9L/!,$CNI)*"*%3@X\LU%J\CIJ M707^>+J8S(973B=*G\1QCL-$Q+<FE)7QG&<);A\K.!U?<*H1ZFW;YX649-GJ M5&0J&O^WCAG#%_!A`IZY>S"%$/KF,X893)^W<:9A$/;#Z^"H-<ZXIATB1]DV M2?_CJ.4"4MV!%G"64JWL8P"IC6USZ17N5P8FUA3]-KR,4CCID4E:(U$7,@-G M>Q%<#X=>$!CI=Q=3NQ=^DHA0Y+8JM2-F])3Y&U?[\YW@R5%K('FV&HG[[)!^ MB?8BEVRU8:X8%QJWNGWL]S][QYU16/4-*1HE(T/#ZGAX[*!AD6"<JASC=L9N M,:%>.-!I!$IIIGD,58TU+[53L;%^R;(D1>EK6;:>SR3;H#&I(&>*]J&RYAI= M3/H+IC;NUQ\T)NJ$#-<8W]K6"GX+AOW)9#$93[T;;[BX[$]'$V_N5L:;W-) MMNW V<CKCP:>]VGMA+],/7 )6:88ZT7)M;+R9?;5BD?!AT=>=, ;W+AEX[D7 MCDCGJ/4`Z(-;X%\'EW3W^C<-!Q2GN0J*95SO("9W#LV:Y9TG;;MEPR_^?ME9 MZ9#S!S*Q6+OEE<&:P^#FH7OF4:=,G1_.X7<O\%^_^U;M"!)90G-"I@80O+$/ M2RDVE/&'?!]!=(A;A:-06VV3Y=(A*"G"(T+])PB]/G_[S0*M""AX3".X'NRU M?_YS:@16LC.(]Y)KA SO+>Z/-?LWWVS:]]NEG5/6+9$9SW+:_>M8E=P<7B[* M.HRV[H'[_D]5GENNFRG;)_##`WU6ZN>%6M/]S3_>P0\N0Y"D%Q?@36?!;P$! M-PWMH7\Z@.82=>)^?B_WD7I?"M=<P:K8`;,#+]T!SXRC::IL\]H#H<CVH[V> MZ^[$T;4@<[L!*@CGUQ[P)<W\&B[A";!LI]<\6W7<\8.69$)WZP,B3&>A]\%Q MD:+0/$-HI_P601C#LAR;1IA(?H?R!,Q/HV*>V6I6;(F.R*R0<+\6U(9%I'9* MXZ::>88*;G-#6@$#9<B81;'(M#2KY9OR`<%1P@Q4.RHTQ"R#-;M#V!0ZY=3> MMK:D:L<F7R<GW4/.:BV*-*%@25P*B19(9,9T9(R9<&!"X>6)B8\)C,J9CM>U MMFT`"O3GZW$'A"SGLP4AIKC55(]V3[6NO5)P+^0MC7<7"#J%CVR(Z#RRLR#7 M62I8TG6A=F="&H\VQZ/&`9-.B&U7)-5ESX\1">KZ"V51ORA4V31_)6[$'3KM M_13QR]-CSA,]8(K.:]/KR:1'TD<#N5_6",$EXM^'<KZ$=O,8>U'2.BDGR9YW M.8O+8VYYU;5O=X#0ESS3;6@?$X8Q>7QBA_D#0A-!+6K<DO:-*)<B1J6$5/#2 MM<6/>N(0B29:&^(UDQ#GQ<59CVX?KW!:;"*4?HW:@]>OC:3A4NV4?Q5>SKW^ M"/+0Y?D"KO SZJ&K;/>P7;E@#RT!ZOYRR6D4E>)*N0/G'S]:0[V&B8JM<]U@ MNWZKG7ZE[%D_HBRR))'FX5.ZC4P;#*-!?]K.4KW();.9OP?:OS_UYO.M:RL4 M#L\L'7CI7B:,._M,T^:7*OSKX$VLBO'W_8RO:R.P`<*R[TQP6!EL$Z'XUG9$ MD=&^>5@YASA_+:U_GM.V2>KCFCIY<]Y(<X/_5 "U";6;)9R)^VZW:U_\)6W- MU(B'2LUWR+_5?WK[,)6-1R.@.OK^#U!+`P04``(`" "WC<DJ=B,+9+P)``"L M(P``$P`D`'-R8R]E;G1R>7!O:6YT<RYC<' *`" ```````$`& ``"<C=\O# M`0#(_OI=\, !H(=AUI0QOP&U6?]OVL@2_[F1\C],<WHM2)2T=WU/:J.T(D!: M]XB-P#0Z/55HL9>PC=GUVUV'<E7^][=?;/P%D] K==0"]LSLS&=F9V;'QT>_ MQ1S=+!&L$*>$WC0@) +-(@QOX?7O+U_!ZW^_>@VO7_[G9?/XZ/3T_""7E@3F MOSZ5?!TS0J5H!W&L[YG[K]Z\>0.?F,!P&3&.Q>:!^:_+J$2$"D!1!'*!04A$ M0\1#P$H>L?(`?XMQ('$(LS6X?ALZD6 0I*Q&3L9.*)$$1>1O) FC\ R""".: MQ(HZQ#!G'$).[C"'1D*;$4.A`JJ]4>>0N/Q&:! E:M&3WNS&YR@><A:(]N+D M^$C__=Q"FO^)N:Z@`UT8@0?CGQ=Z4-5 73[\!4/H0T_]NSR4AFG\]$;.Y_YH M.O8[?A^(@$38`&$)AZ[V^B2&>4(#$PB208@EYDM",:P62,**\5LCATB@&(=" MT\PPA(SB-G2$":<T6 *VC"/%+A3Q<U$-LA6V<FC \1)3:8F$1%()`F<.B +F MG'%@09!P`6'"";T!I02B:Y!D:05TTU -&<[W@U83$AHRS6$5Q\_OK)J@B)72 M4M\U.Z5MP3D^DNL8AW@.F";+$E#'1]^/C[1GS*^IXSJ^TQFT8',I/:XQL!4% MRH!CH= ,]*;->3YVQA>3R\O^J%7BT4HII5F ]$;53L!W&HQ9,I]C7A'0ZW]V MNOUQJRI (6C8D?+6'0F4(K.O.) 5[H'C_EE5N<PMULL9BT@`$:&W1>XK3UGL MC1SW0YF;8U@P=JN8%8S,^A[/DIL;Y7V!N=;E^.C^[+![]P,,P(,+Z*C/@^R- MTI90EXG!,V/C&./RC@F)"!(A= "C&;O#AS/L4ADU@FMEU@AZ2@N]^;O*1/V[ M`SXXZKE[&(/Q-XDYA9/NR?&1ZVO#)DINS^Q:4Y :UOF."\/4>N_B4[_K@Z7Q M3'BU<J*)ZW2]7E]A9&)DA&^(4&*&2"XTB25LGATF56Y#9T/R4D$T`.W!L0+. M,QD43(Z?&/A<]7M\R,4W.?6*W6%A-F^PP/COM8T@6*)@H1/G9F]0!;Q]9ED) MC=3S<@`JCRBJL29J-#=Y!TY/IT@L];>(!;<Z:V:"C ^H<JA^@$,GRZ<-: P' MGONA^<QJ8^'7U!S+1+G?AOGQT7VI/NQK2\SQ'6&)>-R>84I9M6EODWKXYTQ2 M"L2(IU:EM<E6K83J9@:';? 71$" J+X;H"C"(<PY6^I2LUI@;DL-91*^)D(: M`"PO<)9(HFL?=.@:YDBBR)8M`2L214:8HE?29WC.4D$B)IQ$NC:%;$57NG'3 MI9:Q95J+[A@)X?@HK6WI=M37`_LQ)\HQKFS,A))K0O_XW45+/):ZG)X9.DO< M\X?JED;Y)"NJ%HJG3T^@64!;K(@,%M!(8Z-I[W[/%0B0P%NEXVW^W#I8<4=1 M3]>+L:T5'QF[;<!E9S#NF]5JQ*5UK")+]S58MQK&,[IZ6>\9A]N22)7)&F1D MOQ%J2 T:YHZ(4:"\6)8[DI%#B9Q0HAMABU@#GFW#V(*>-Y[:^CQU.U=E_8VY MS&HX3FOL0"E9*ZJ \[;M:0>P;?XEH0K,M;+6P% PG%6"HZA,SY T2F'TXIV] M:W\]J(UM:&J4X=AT65H+R5$<8UYMBK+K0IO<8ROJ6[K&SO72IJNRFHW \S)- M!?H9Q^@VO6<RP[U-#K^F#-G+!1^@;SY&\!? $#Q3@OQ#EZ#-BIMT]Q'1,%*( MZV.;3C[.:#B]^C3M#KQQWQ)E-5_Q]/QNQ 1NY&7:%'T;R&F2B7M>J_!0R8/8 MX7&ALIM\DV7U[!,^Z529'0+,=M.LE/&E#M4RN1;XXIW#=)%(1-M^I'Z=C*?C M2;?;'X_/,C58-Q4[PO]+L) -S=\"QYNZWM1QNZ/^5=_UH6D82B5B6^!]H504 ML4MQ2['H>JX_\@;P;(/GJ&_*FSTZE"#M$1$C&2P.@:I)^I\]IZ<CC- XD1?F M:+#Q^SFXDT$6\AM*EL@MTA)E[]H;564.,+TQ'=LYO*R2%05F=#G9QOP'+F%] M6KHV#G8]?^I<#0?&;_U>YNBA\JBBZ/XY'7C=CN]X[A,-TEBBX%8Q.^P#EMV$ M<TQE=GN@SU*$41,260#41*?BM(V,/@+:CL".0I29I];:]!0&B(;V=!H9PW-1 M]EN-5\YAH^:+=T/$T5(?HT7;IE8=OE1R%K7]=8S_<'+^%,X:[YVG6V0B,"_1 MUOAOW]6=*FO-\JG,?45Z6ZRIS-IM[M"YS@9F'J"#"6K\E&TFF"$]JE"42_25 M<9@'U(RGLIJ=L63-24'?*\UPF0XUFBG]=ZB4F=*^?@O;=>:!A%0N-7G2J0HO M)Q.]R)-*Y[6#L/&OL'G2VM>OV;>NPJ>YU8HH4'-4%9Z.U_4'57NW4=Q_P;*H M[Y7?.29ZW>E'S]/MW),M(#9/3[9-R"XRA\;N3M(?3?JZ<:WG_5Y_VZ2S_ BV M8^'[7:SUY+O"IYXZ:U@>Q&WBILC]$V32'OL?0%,YS>V&YY! [ =TB.<HB>3; M>OK34WC_'J[U80Y"$MHS6<"6V!X5WK_?3^$=A6H?S>]WY(K\=KT%/ZCY#VK\ M>$K>V4L7TG4Z#33SU161"W!./>"V.6L#C'# ]"'7OJK0ZK&Y[0@5&3)YN0T/ M=X*6KY!;=6U@]+F$&6-"0LP)XT2N8;7 -.WV]'%*$!I@BYED[!8B(F6$S?RX M_?/M9*[5?=IFV#_=AYE><&+&!)L3_,,CM8Q*MWY0=RZWTI19U2-Y-BDHB3// M[XMJ92^[=.&<"GS3.-%'II/FKY\#5GO:M+\K]\1A\>19:E<W#68*^*[QABNK MLXU]9R#;8!> R&9"+\#D4KA(2!0^-84)ZMM+)WO;@>$F8C,4B4J;LN/@^I @ MO6&*+P:*LLP>T;3%@_2F$#QU_2S5-BRU4AVVYC;%"1!+HE#O+I*O'Q&:?#,G M>A#KF5@+B9>5XKP[#C.*\L8IG,KK"V\AQ6Q\I-_ZF)<6Z1N'K3E'!LSN^4TQ M3EJ@T*F;W>2X,KM>.B^I2?DU&Z)TO6S!CJ)T;;*F`CH1.'^#HT?T5+]FJ)&U MI7\-S:4SZ&<VZ3[!<?T?4\ME^4OE5*=@@3@*).9$2!*(NE5U6]&J$V?FJ\[8 MO-3[%D2)4'"E<NLL+":"FN?5X-@=XWN%>% -II\.ZD?#NM3(U.SZ,9;9!"W, M6O4Y#43U[%F>W)4..O\M'6B^Z&-A/IHXVY]=SXV^@&4WPZ+]><NGF"^/:V!_ MV2IGJ.W7LUJ,TAQ0>6]I9C?:E1\F3A&MQS+"WA/=K:Q0'NGN;IVSO;NUDC[] M/*G;V8\(R\N_W@`U\?_#X5]"\M>E]F+HU_#=US0JRI3_`U!+`0(9`!0``@`( M`*.2R2H_+&B_#P$``%X!```+````````````( ````````!S<F,O4T]54D-% M4U!+`0(9`!0``@`(`$J1R2JB*_<L2P4``,8.```)````````````( ```%P! M``!S<F,O2414+DA02P$"&0`4``(`" # :PDAHM^%O^(````+`0``# `````` M`````" ```#R!@``<W)C+TU!2T5&24Q%4$L!`AD`% `"``@`9H[)*DR*#1?. M`0``@P4``!(````````````@````(@@``'-R8R]$8F=4<F%P4')O8W,N:%!+ M`0(9`!0``@`(`-6+R2J3X(IUCP$``#\$```3````````````( ```$0*``!S M<F,O1&)G5')A<$-O;6UO;BYH4$L!`AD`% `"``@`F(;)*F@2H&RG````70$` M`! ````````````@````* P``'-R8R]$8F=4<F%P1&)G+FA02P$"&0`4``(` M" !@CLDJ",_B?J0&``#M$ ``&0```````````" ````A#0``<W)C+T1E8G5G M4V5R=FEC94AO;VMS+F-P<%!+`0(9`!0``@`(`+>-R2IV(PMDO D``*PC```3 M````````````( ```" 4``!S<F,O96YT<GEP;VEN=',N8W!P4$L%!@`````( -``@`\0$``#$>```````` ` end |
From: Andrew G. T. <ta...@ib...> - 2001-06-08 01:08:56
|
[...] > The 3 major > reasons > I dont really work on line is that > 1) I get really frustrated using GDB/emacs under cygwin. > 2) I really dont know enough about linux What is the third ?? > 1) make interrupt 80 reflect through an LPC port to a ring 3 process > 2) implement the linux APIs in the ring3 process > 3) move that implementation to the ring 0 interrupt handler. Hmm...Michael. Can I ask you to spend a few time and make everything for me ? You propose to create something like Win32 sybsystem does in NT3.51 ? I.e. create native NT app which will create new native NT thread for each Linux process and make fast context swaps using int 80/8x ? What does 3) mean ? Are syscalls will be processed in ring3 or ring0 (i.e. are Win32 API will be called in ring0 (????) or ring3 or no Win32 will be used) ? Do you propose create own sybsystem and call NT microkernel directly or we will create Win32 service which will only extend Win32 sybsystem API (preffered for fast development speed, but not for fast execution) ?? Sorry for a lame questions, there is a lot of ways to implement that we need and it's not clear from your e-mail how you propose to do this. ============================= Andrew G. Tereschenko Software Engineer Integrated Banking Information Systems ta...@ib... |
From: Andrew G. T. <ta...@ib...> - 2001-06-07 16:20:11
|
> -----Original Message----- > From: lin...@li... > [mailto:lin...@li...]On Behalf Of Michael Stout > Sent: Thursday, June 07, 2001 6:53 PM > To: lin...@li... > Subject: RE: [line-devel] RE: Interrupt vector > > > > >I have a few words about assembly and current interupt handling routing > >install. > >... > >Are you shore that your IDT modification code will work under SMP ??? > >I have a proposal to fix your code by using sample from : > > No I am not sure the interrupt vector will work under SMP. It looks like > your code is much better. I come to agreement with Vines to replace current code. I'll do it in near future. > I actually ported to MSVC, but I had to stub out all of cygwin. > The 3 major > reasons > I dont really work on line is that > 1) I get really frustrated using GDB/emacs under cygwin. > 2) I really dont know enough about linux Does it mean that MSVC line can see you as active developer ? > The result would be much..much different from line and a HUGE project. Yes. It's HUGE, but without deadline and development costs (other that time) (just like in any other OpenSource project) I don't see any way to be paid for becouse of [L]GPL license applied everythere. Do you have any ideas how to make compensation ? ============================= Andrew G. Tereschenko Software Engineer Integrated Banking Information Systems ta...@ib... |
From: Michael S. <ms...@ac...> - 2001-06-07 15:53:22
|
>I have a few words about assembly and current interupt handling routing >install. >... >Are you shore that your IDT modification code will work under SMP ??? >I have a proposal to fix your code by using sample from : No I am not sure the interrupt vector will work under SMP. It looks like your code is much better. >Porting to MSVC.. > - gcc preprocessor extensions in src/common/log.h >>Not a problem if we redefine log functions/param order. >> But the biggest problem is that LINE needs the Cygwin runtime environment. I actually ported to MSVC, but I had to stub out all of cygwin. The 3 major reasons I dont really work on line is that 1) I get really frustrated using GDB/emacs under cygwin. 2) I really dont know enough about linux >Do we realy need full Cygwin implementation??? My gut feeling is that Line and cygwin are entirely different beasts. Line implements the linux API while cygwin implements the c runtime. If I were paid to rewrite line, I'd 1) make interrupt 80 reflect through an LPC port to a ring 3 process 2) implement the linux APIs in the ring3 process 3) move that implementation to the ring 0 interrupt handler. The result would be much..much different from line and a HUGE project. Mike |
From: Andrew G. T. <ta...@ib...> - 2001-06-07 00:08:41
|
> -----Original Message----- > From: lin...@li... > [mailto:lin...@li...]On Behalf Of Michael Vines > Sent: Thursday, June 07, 2001 1:32 AM > To: Andrew G. Tereschenko > Cc: lin...@li... > Subject: [line-devel] RE: [line] Applications list broken > > Actually I originally started writing LINE in MSVC because the integrated > debugger is so much nicer to use than gdb. However once I started using > the Cygwin DLL, I switched over to gcc. Most of the code should be > portable between the two compilers. A couple problem points would be: > > - gcc specific inline assembly in src/linexec/asm.h > (but it is no big deal to put a compiler specific #ifdef around it) I have a few words about assembly and current interupt handling routing install. Here is a quote from DDK : http://www.osr.com/ddk/intrupts_87qf.htm "To register an ISR, a driver's DispatchPnP routine must call IoConnectInterrupt when it receives an IRP_MN_START_DEVICE request. In response, the I/O Manager creates an interrupt object for each processor that the device can interrupt." Are you shore that your IDT modification code will work under SMP ??? I have a proposal to fix your code by using sample from : http://www.wdj.com/articles/2000/0002/0002a/0002al2.htm Full article: http://www.wdj.com/articles/2000/0002/0002a/0002a.htm If we will port asm - i would like to make it as inline asm in C function. > - gcc preprocessor extensions in src/common/log.h Not a problem if we redefine log functions/param order. > But the biggest problem is that LINE needs the Cygwin runtime environment. Do we realy need full Cygwin implementation ??? I expect that LINE will map syscalls directly to Win32, without using Cygwin. I don't wanna mix bugs/implementation restrictions from Cygwin in Line. But i understand that it need additinal time to move mapping code from Cygwin source base to Line. > From what I've read on the Cygwin site you can't mix the Cygwin runtime > with the MSVC runtime. This means at the very least you need to link LINE > with the Cygwin/gcc linker. It may be possible to compile the object > files using MSVC, but I don't see much point to it (other than that MSVC > does compile much faster than gcc on my machine). Hmm. I can agree that this _is_ a problem. There was one probosal in 1998 to add init code in DLL but nothing was done. I will make some research. This issue can push us to non-Cygwin implementation. Are you agree if there will no Cygwin dll usage ? > What would be really cool is if the gdb debugging information in the > resulting executables could be massaged into a format recognizable by > MSVC. No one want follow standarts. Even OpenSource developers create own standarts :o( ============================= Andrew G. Tereschenko Software Engineer Integrated Banking Information Systems ta...@ib... |
From: Michael V. <mi...@bl...> - 2001-06-06 22:32:27
|
On Thu, 7 Jun 2001, Andrew G. Tereschenko wrote: > Probably you aready know about this too - there is similar project > "lxrun" for running Linux ELF under Solaris. > They have script for installing needed number of libs/binaries from RedHat > CD > for a fully functional enviroment. > I will try to use it as basis for Line. Sounds good! I have a little script that I started on a while ago to do something similar that you may find useful. It's attached to this email. > > > How about idea to provide MSVC dsw project/makefiles for all > > *.exe/*.sys ? > > > > That would be great, but LINE requires GCC to compile. You can't use the > > Microsoft C compiler. My main problem with using MSVC is that it means > > that anybody that wants to develop for LINE must have a copy and MSVC > > isn't freely available. > > I'm unshore - but there is some compiler binaries available freely in DDK. > They can used (I'm not an expert in licensing - somebody need to verify > this) > What if we will try to create portable code ? Actually I originally started writing LINE in MSVC because the integrated debugger is so much nicer to use than gdb. However once I started using the Cygwin DLL, I switched over to gcc. Most of the code should be portable between the two compilers. A couple problem points would be: - gcc specific inline assembly in src/linexec/asm.h (but it is no big deal to put a compiler specific #ifdef around it) - gcc preprocessor extensions in src/common/log.h But the biggest problem is that LINE needs the Cygwin runtime environment. From what I've read on the Cygwin site you can't mix the Cygwin runtime with the MSVC runtime. This means at the very least you need to link LINE with the Cygwin/gcc linker. It may be possible to compile the object files using MSVC, but I don't see much point to it (other than that MSVC does compile much faster than gcc on my machine). What would be really cool is if the gdb debugging information in the resulting executables could be massaged into a format recognizable by MSVC. Mike |
From: Michael V. <mi...@bl...> - 2001-05-29 17:57:23
|
I've just released LINE 0.5. The only major addition is the NT/2000 Linux syscall redirector as well as a couple small bug fixes. I would have liked to have done more for the 0.5 release, but I'm moving to the USA in a couple weeks (new job). It may be a while before any new development occurs so I wanted to get the syscall redirector out of CVS before I leave. Anyways line-0.5.zip has been uploaded to SourceForge and is now available on the LINE download page. Mike |
From: Michael V. <mi...@bl...> - 2001-04-29 03:51:17
|
On Sat, 28 Apr 2001, Jordan Stout wrote: > I just ran the int80 line test/hello using the int80 driver under NT4. > for some reason I had to delete some offending declarations > in undocnt.h What did you have to delete? I thought I just copied undocnt.h directly from un, but I guess I modified some stuff and forgot about it. Mike |
From: Jordan S. <jd...@me...> - 2001-04-28 16:05:46
|
I just ran the int80 line test/hello using the int80 driver under NT4. for some reason I had to delete some offending declarations in undocnt.h Mike ----- Original Message ----- From: "Michael Vines" <mi...@bl...> To: "Michael Stout" <ms...@ac...> Cc: <lin...@li...> Sent: Friday, April 27, 2001 10:32 AM Subject: RE: [line-devel] NT/2000 Syscall Kernel Redirector > On Thu, 26 Apr 2001, Michael Stout wrote: > > > I compiled the line project and found that I > > had to modify the 80.c test program to not unload > > the interrupt handler. that was the easiest way to > > get the handler hooked. > > once I did that I was able to do linexec -n -f test/hello. > > If you rebuild Line.exe from the current CVS version, it will enable the > handler for you automatically. Instead of running linexec directly (I > know I said to do that in a previous email!), just try running > 'line test/hello'. If the driver is loaded, it will be used. > > > My ultimate goal is to run a bash in a bigslack slackware > > distribution installed on c:\linux. so I do > > linexec -f -n -cc:\linux \bin\bash but It it just returns > > "linexec: error running \bin\bash: -2" > > It probably doesn't like the DOS style path separator, try: > linexec -f -n -cc:\linux /bin/bash > > or better yet: > line -c c:\linux /bin/bash > > > Mike > > > _______________________________________________ > line-devel mailing list > lin...@li... > http://lists.sourceforge.net/lists/listinfo/line-devel |
From: Michael V. <mi...@bl...> - 2001-04-27 14:32:49
|
On Thu, 26 Apr 2001, Michael Stout wrote: > I compiled the line project and found that I > had to modify the 80.c test program to not unload > the interrupt handler. that was the easiest way to > get the handler hooked. > once I did that I was able to do linexec -n -f test/hello. If you rebuild Line.exe from the current CVS version, it will enable the handler for you automatically. Instead of running linexec directly (I know I said to do that in a previous email!), just try running 'line test/hello'. If the driver is loaded, it will be used. > My ultimate goal is to run a bash in a bigslack slackware > distribution installed on c:\linux. so I do > linexec -f -n -cc:\linux \bin\bash but It it just returns > "linexec: error running \bin\bash: -2" It probably doesn't like the DOS style path separator, try: linexec -f -n -cc:\linux /bin/bash or better yet: line -c c:\linux /bin/bash Mike |
From: Michael S. <ms...@ac...> - 2001-04-26 22:11:10
|
I compiled the line project and found that I had to modify the 80.c test program to not unload the interrupt handler. that was the easiest way to get the handler hooked. once I did that I was able to do linexec -n -f test/hello. My ultimate goal is to run a bash in a bigslack slackware distribution installed on c:\linux. so I do linexec -f -n -cc:\linux \bin\bash but It it just returns "linexec: error running \bin\bash: -2" any suggestions before I start debugging? Mike -----Original Message----- From: lin...@li... [mailto:lin...@li...]On Behalf Of Michael Vines Sent: Wednesday, April 25, 2001 2:54 PM To: lin...@li... Subject: [line-devel] NT/2000 Syscall Kernel Redirector I just committed the NT/2000 syscall redirector to CVS that I've been working on. It's in the src/int80/ subdirectory. There is a README file in there that documents most of it so I won't bother repeating what it says. Here's a link to the README: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/line/line/src/int80/README There is no change to how LINE is invoked. If the driver is loaded LINE will use it. Otherwise it will fall back to the original behavior. I only have a Windows 2000 system so I don't know how it will run on Windows NT. I would love some feedback if there are any brave souls out there willing to risk a system crash and possible data loss :) Mike ps. Thanks to Michael Stout for all the help. This driver probably wouldn't have happened without him! _______________________________________________ line-devel mailing list lin...@li... http://lists.sourceforge.net/lists/listinfo/line-devel |
From: Michael V. <mi...@bl...> - 2001-04-25 18:54:25
|
I just committed the NT/2000 syscall redirector to CVS that I've been working on. It's in the src/int80/ subdirectory. There is a README file in there that documents most of it so I won't bother repeating what it says. Here's a link to the README: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/line/line/src/int80/README There is no change to how LINE is invoked. If the driver is loaded LINE will use it. Otherwise it will fall back to the original behavior. I only have a Windows 2000 system so I don't know how it will run on Windows NT. I would love some feedback if there are any brave souls out there willing to risk a system crash and possible data loss :) Mike ps. Thanks to Michael Stout for all the help. This driver probably wouldn't have happened without him! |
From: Helio <car...@ya...> - 2001-04-24 22:58:56
|
I re-read the FAQ and now I realize that I need a program like exceed which does X-windows. My thanks to anyone who may have answered me. I exported the display to the very linux box that the executables came from, and it worked :) -Michael __________________________________________________ Do You Yahoo!? Yahoo! Auctions - buy the things you want at great prices http://auctions.yahoo.com/ |
From: Helio <car...@ya...> - 2001-04-24 22:36:59
|
I get the error "Error: Can't open display:" when running xbill and other x programs. I have been able to run bash successfully. Can anyone give me some ideas as to what to do? __________________________________________________ Do You Yahoo!? Yahoo! Auctions - buy the things you want at great prices http://auctions.yahoo.com/ |
From: Jordan S. <jd...@me...> - 2001-04-23 23:07:59
|
Awsome. I'm glad that it works. I cant wait to play around with the new line. Mike ----- Original Message ----- From: "Michael Vines" <mi...@bl...> To: "Jordan Stout" <jd...@me...> Cc: <lin...@li...> Sent: Monday, April 23, 2001 03:58 PM Subject: int80 handler > > I played around with the int80 driver code today and got the int 80's > reflecting back to the process. I didn't check the code into CVS, but > basically you just take the existing 'un' module and replace HANDLER.ASM > with the source inlined below. It's so nice going back to good old Intel > assembly syntax for a while, AT&T syntax hurts my brain :) > > I've also included a modified '80.cpp' test program below. However, I was > able to get LINE working using the driver very easily. I'll check that > code into CVS once I clean it up a little. The performance increase is > quite considerable and I could attach a debugger to the live Linux > application without problem. Very cool! > > > Mike > > > ------------ > ; HANDLER.ASM > .386 > .model small > > .data > _syscallHandlerPtr dd 0 > > .code > > public _InterruptHandler > > include ..\include\undocnt.inc > > _InterruptHandler proc > PUSHAD > PUSHFD > PUSH FS > > MOV EDX,00000030h > MOV FS,DX > SUB ESP, 50h > MOV EBP,ESP > > ;Setup the exception frame to NULL > MOV EDX,DWORD PTR CS:[0FFDFF000h] > MOV DWORD PTR DS:[0FFDFF000h], 0FFFFFFFFh > MOV DWORD PTR [EBP],EDX > > ;Save away the existing KSS EBP > MOV ESI, DWORD PTR CS:[0FFDFF124h] > MOV EDX,DWORD PTR [ESI+00000128h] > MOV DWORD PTR [EBP+4h],EDX > MOV DWORD PTR [ESI+00000128h],EBP > > ;Save away the kernel time and the thread mode (kernel/user) > MOV EDI,DWORD PTR [ESI+00000137h] > MOV DWORD PTR [EBP+8h],EDI > > ;Set the thread mode (kernel/user) based on the code selector > MOV EDX,DWORD PTR [EBP+7Ch] > AND EDX,01 > MOV BYTE PTR [ESI+00000137h],DL > > STI > > > ; Check for SYSCALL_LINEXEC_HANDLER > CMP EAX, 0DEADBEEFh > JNE reflect_syscall > > MOV DS:_syscallHandlerPtr, EBX > JMP exit_handler > > > reflect_syscall: > > ; simple sanity check > MOV EAX, DS:_syscallHandlerPtr > CMP EAX, 0 > JE no_handler > > MOV EBX, DWORD PTR [ESP+50h+40] ; read userland EIP from stack > MOV DWORD PTR [ESP+50h+40], EAX ; set EIP to syscall handler > > MOV EAX, DWORD PTR [ESP+50h+52] ; get ESP from stack > SUB EAX, 4 > MOV DWORD PTR [ESP+50h+52], EAX ; write new ESP > MOV DWORD PTR [EAX], EBX ; place EIP on top of userland > stack > > > JMP exit_handler > > > no_handler: > MOV EAX, -38 ; -38 == ENOSYS > > > exit_handler: > > ;Restore the KSS EBP > MOV ESI,DWORD PTR CS:[0FFDFF124h] > MOV EBX,DWORD PTR [EBP+4] > MOV DWORD PTR [ESI+00000128h],EBX > > ;Restore the exception frame > MOV EBX,DWORD PTR [EBP] > MOV DWORD PTR FS:[00000000],EBX > > ;Restore the thread mode > MOV EBX,DWORD PTR [EBP+8h] > MOV ESI,DWORD PTR FS:[00000124h] > MOV BYTE PTR [ESI+00000137h],BL > ADD ESP, 50h > POP FS > POPFD > POPAD > > IRETD > > > _InterruptHandler endp > > End > ------------- > > > > ------------- > // 80.cpp : int80 driver test program > // > > #include "stdafx.h" > #include <stdio.h> > > > int syscallHandler(void) > { > printf("hello from handler\n"); > return 0; > } > > > int main(int argc,char *argv[]) > { > printf("sending syscall handler address\n"); > > _asm { > mov eax, 0xDEADBEEF > mov ebx, offset syscallHandler > int 0x80 > } > > > printf("trying a syscall\n"); > _asm { > mov eax, 1 > int 0x80 > } > > printf ("return from syscall\n"); > return 1; > } > ------------- > |
From: Michael V. <mi...@bl...> - 2001-04-23 21:36:03
|
I just checked in some changes to support the int80 device driver. There is a new command line option for Linexec, -n (or --nodebugger), which indicates that the Linux app will not be running under the LINE debugger. Typical usage: ./Linexec.exe -f -n path/to/linux/app arg0 arg2 ... Note that unlike everything else in the computing world, command line arguments start at zero (ie. executable name) not at one (first command line parameter). Of course, if you use the -n option without the int80 device driver the app will crash. Mike |
From: Michael V. <mi...@bl...> - 2001-04-23 19:58:13
|
I played around with the int80 driver code today and got the int 80's reflecting back to the process. I didn't check the code into CVS, but basically you just take the existing 'un' module and replace HANDLER.ASM with the source inlined below. It's so nice going back to good old Intel assembly syntax for a while, AT&T syntax hurts my brain :) I've also included a modified '80.cpp' test program below. However, I was able to get LINE working using the driver very easily. I'll check that code into CVS once I clean it up a little. The performance increase is quite considerable and I could attach a debugger to the live Linux application without problem. Very cool! Mike ------------ ; HANDLER.ASM .386 .model small .data _syscallHandlerPtr dd 0 .code public _InterruptHandler include ..\include\undocnt.inc _InterruptHandler proc PUSHAD PUSHFD PUSH FS MOV EDX,00000030h MOV FS,DX SUB ESP, 50h MOV EBP,ESP ;Setup the exception frame to NULL MOV EDX,DWORD PTR CS:[0FFDFF000h] MOV DWORD PTR DS:[0FFDFF000h], 0FFFFFFFFh MOV DWORD PTR [EBP],EDX ;Save away the existing KSS EBP MOV ESI, DWORD PTR CS:[0FFDFF124h] MOV EDX,DWORD PTR [ESI+00000128h] MOV DWORD PTR [EBP+4h],EDX MOV DWORD PTR [ESI+00000128h],EBP ;Save away the kernel time and the thread mode (kernel/user) MOV EDI,DWORD PTR [ESI+00000137h] MOV DWORD PTR [EBP+8h],EDI ;Set the thread mode (kernel/user) based on the code selector MOV EDX,DWORD PTR [EBP+7Ch] AND EDX,01 MOV BYTE PTR [ESI+00000137h],DL STI ; Check for SYSCALL_LINEXEC_HANDLER CMP EAX, 0DEADBEEFh JNE reflect_syscall MOV DS:_syscallHandlerPtr, EBX JMP exit_handler reflect_syscall: ; simple sanity check MOV EAX, DS:_syscallHandlerPtr CMP EAX, 0 JE no_handler MOV EBX, DWORD PTR [ESP+50h+40] ; read userland EIP from stack MOV DWORD PTR [ESP+50h+40], EAX ; set EIP to syscall handler MOV EAX, DWORD PTR [ESP+50h+52] ; get ESP from stack SUB EAX, 4 MOV DWORD PTR [ESP+50h+52], EAX ; write new ESP MOV DWORD PTR [EAX], EBX ; place EIP on top of userland stack JMP exit_handler no_handler: MOV EAX, -38 ; -38 == ENOSYS exit_handler: ;Restore the KSS EBP MOV ESI,DWORD PTR CS:[0FFDFF124h] MOV EBX,DWORD PTR [EBP+4] MOV DWORD PTR [ESI+00000128h],EBX ;Restore the exception frame MOV EBX,DWORD PTR [EBP] MOV DWORD PTR FS:[00000000],EBX ;Restore the thread mode MOV EBX,DWORD PTR [EBP+8h] MOV ESI,DWORD PTR FS:[00000124h] MOV BYTE PTR [ESI+00000137h],BL ADD ESP, 50h POP FS POPFD POPAD IRETD _InterruptHandler endp End ------------- ------------- // 80.cpp : int80 driver test program // #include "stdafx.h" #include <stdio.h> int syscallHandler(void) { printf("hello from handler\n"); return 0; } int main(int argc,char *argv[]) { printf("sending syscall handler address\n"); _asm { mov eax, 0xDEADBEEF mov ebx, offset syscallHandler int 0x80 } printf("trying a syscall\n"); _asm { mov eax, 1 int 0x80 } printf ("return from syscall\n"); return 1; } ------------- |
From: Michael V. <mi...@bl...> - 2001-04-21 23:52:58
|
On Sat, 21 Apr 2001, Jordan Stout wrote: > Therefore I gues you could write an INT 80 handler that does something like > this. > > get the ring3 stack pointer. > add 4 to it. > write the ring3 EIP to the new stack location. > change the iret return address to your new handler > change the iret return stackpointer to the new stack-pointer > do an IRETD Yeah, that was pretty much what I was thinking. > One question is how is the interrupt handler going to know where to return > to. > I guess you create a new int80 syscall that passes the return address to the > int-80 handler. then the int80 handler would have to maintain a mapping of > process handles and return-addresses. LINE actually already does that. The debugger process (Line.exe) needs to know the syscall handler address, so the first thing that the Linux process does is execute a hidden syscall (eax=0xdeadbeef if I remember correctly) to tell Line.exe the address. > P.S. undocumented NT also says "windows 95 procieds a mechanism to hook > software interrupts by means of Set_PM_Int_Vector and Hook_V86_Int_Chain VxD > services" Ah, ok. Win9x needs this sort of device driver much more than NT/2K. When 9x executes a int 80 it stops cold, so Line rewrites them to int 03. Kludgy but it works (most of the time). Mike |
From: Jordan S. <jd...@me...> - 2001-04-21 16:13:33
|
> - access the userland address space of the process that invoked it? I think so. The interrupt handler is in the same address space as the calling process just at addresses > something like 0xc0000000 > - SuspendThread() the thread that invoked it? I dont think you can suspend the thread. > > Do you know what the stack looks like after the int 0x80 handler is > called? Shouldn't it be possible just to alter the return address that > the IRETD loads once the handler is finished? Possibly. You could try it. this is a quote from undocumented windows NT. "When a 32-bit application program executes an INT nn type of instruction, the processor first looks at the descriptor entry for the interrupt and verifies that the current privilege level is at least as high as the discriptor privilege level. ... If the privilege level of the discriptor allows the interrupt to continute, the processor switches to the kernel stack. the kernal stack is selected by looking at the field in the task state segment (TSS) after this, the processor pushes the old ring 3 stack pointer (SS:ESP) and a standard interrupt frame (EFLAGS and CS:EIP) and jumps to the handler routine specified in the interrupt descriptor table entry. The handler perfomrs its job and executes the IRETD instruction to return to the calling application. when IRETD is executed, the processor pops off EEFLAGS and CS:EIP, notices the switch from ring 0 to ring 3 and pops off the ring3 SS:ESP and then the execution continues from the instruction following the int nn instruction." Therefore I gues you could write an INT 80 handler that does something like this. get the ring3 stack pointer. add 4 to it. write the ring3 EIP to the new stack location. change the iret return address to your new handler change the iret return stackpointer to the new stack-pointer do an IRETD One question is how is the interrupt handler going to know where to return to. I guess you create a new int80 syscall that passes the return address to the int-80 handler. then the int80 handler would have to maintain a mapping of process handles and return-addresses. 99.999% of the time however, you could just iret to a fixed address. > > One big problem was the performance hit of doing a ReadProcessMemory() to > retrieve any data being passed into the kernel, then doing >... > migrate the handle to the app somehow, or maintain a list of all the > currently open handles for each app in the kernel process. This isn't an Yes these are issues. I guess it just goes to what you want to write. I really dont have time to do either of these things. If I had time, I'd want to get these linux apps running without win32 support. It'd be a lot of work, but it'd give me an opportunity to really learn how linux works. Mike P.S. undocumented NT also says "windows 95 procieds a mechanism to hook software interrupts by means of Set_PM_Int_Vector and Hook_V86_Int_Chain VxD services" |
From: Michael V. <mi...@bl...> - 2001-04-21 01:07:38
|
On Fri, 20 Apr 2001, Michael Stout wrote: > > >NTCreatePort failed with a c0000022 > > c0000022 turns out to be a permission denied message > I fix this by using winobj from www.sysinternals.com > and changing the permssions of \\Windows so that I > can create stuff inside it. Ah...ok. I'll try that on Monday (I don't have a NT/2K system at home) > I've been thinking about how to reflect the int 80 back to the calling > process, and I just cant think of a clean way to do it. From the int 0x80 handler, can you do any of the following: - access the userland address space of the process that invoked it? - SuspendThread() the thread that invoked it? Do you know what the stack looks like after the int 0x80 handler is called? Shouldn't it be possible just to alter the return address that the IRETD loads once the handler is finished? > The native app Creates a very empty process. If the elf_loader code > can be merged into the native app and it maps the elf binary into the > process using MapViewOfFileEx or using the undocumented Section apis, > then we really have a process that looks like what I imagine a > linux process to look like (no cygwin.dlls mapped into it's address space) I think I see where you are going with this. Are you are suggesting that the syscall handler be removed from the actual Linux process? I actually tried that way back in the days of LINE 0.1 and found a number of problems with it. But I will admit that it very much appeals to me to keep the 'kernel' away from the application. One big problem was the performance hit of doing a ReadProcessMemory() to retrieve any data being passed into the kernel, then doing WriteProcessMemory() to put data back to the app afterwards. Also whenever you do anything that creates a handle (opening a file for example), the handle is created in the context of kernel' process and not in the context of the app process. This means that you either need to migrate the handle to the app somehow, or maintain a list of all the currently open handles for each app in the kernel process. This isn't an issue when the 'kernel' is in the same process as the app. Finally, User-mode-linux runs the kernel in the application process space. I'm not saying that LINE should do it that way just because UML does it, but eventually I'd really like to see UML ported to Windows. I sort of see LINE as a prototype for UML/Win32, a way to figure out all the possible stumbling blocks. So it would be nice to try to keep diverging to much from how UML works. Although I'm not totally against the idea, I could be convinced. But it'll definitly involve a lot of work! > Unfortunately I'm really a linux newbie, so I really have an uphill battle > ahead. Well NT device drivers is definitely uncharted territory for me as well :) Mike |
From: Michael S. <ms...@ac...> - 2001-04-20 23:06:32
|
>NTCreatePort failed with a c0000022 c0000022 turns out to be a permission denied message I fix this by using winobj from www.sysinternals.com and changing the permssions of \\Windows so that I can create stuff inside it. Unfortunately I have to reset it every time I reboot. when looking at the permissions of the \\windows thingie it turns out that the SYSTEM account has permissions to do what we want it to do. If this were production code, the hookint.exe would be running as a system service. You can put a breakpoint after NtReplyWaitReceivePort in hookint\port.c and you can trace the message. I updated the sources today so that it passes all the registers and returns a value in eax and modified the 80.exe so that you can call an int 80 setting the registers via the command line. I've been thinking about how to reflect the int 80 back to the calling process, and I just cant think of a clean way to do it. the biggest problem is getting it to start reliably. I'm going to play with that. The native app Creates a very empty process. If the elf_loader code can be merged into the native app and it maps the elf binary into the process using MapViewOfFileEx or using the undocumented Section apis, then we really have a process that looks like what I imagine a linux process to look like (no cygwin.dlls mapped into it's address space) Unfortunately I'm really a linux newbie, so I really have an uphill battle ahead. Mike |
From: Michael V. <mi...@bl...> - 2001-04-20 19:44:18
|
On Thu, 19 Apr 2001, Jordan Stout wrote: > > > > What do you need to build it? I've got Visual Studio 6.0, but do I need > > the DDK? Is that freely downloadable off the Microsoft site? > > > you need visual studio 6.0 and the DDK, the ntddk and win2kddk are > downloadable from microsoft at www.microsoft.com/ddk (or > msdn.microsoft.com/ddk) Hey, I played a little with the un stuff today. I didn't have too much trouble compiling it on my 2K system, most of the problems just had to do with path differences (ie. d:\ntddk instead of c:\ntddk). When I run hookintapp.exe, I get an error in Createint80Port(). Here's the output: ----------------------------- ControlService SUCCESS DeleteService SUCCESS I'm guessing the driver is at d:\cygnus\home\michael\un\bin\i386\hookint.sys CreateService SUCCESS StartService SUCCESS CreateFile SUCCESS ControlService SUCCESS DeleteService SUCCESS I'm guessing the driver is at d:\cygnus\home\michael\un\bin\i386\hookint.sys CreateService SUCCESS StartService SUCCESS CreateFile SUCCESS Creating the port to listen to NTCreatePort failed with a c0000022 ----------------------------- I traced the problem back to PORTNAME. If I recompile with PORTNAME defined to "\\MyPort" instead of "\\Windows\\MyPort" it works. (I updated the PORTNAME define in HOSTINT.C to "\\MyPort" as well) However, when I do that I don't get any output from hookintapp when I run 80.exe (but it doesn't cause a application error so the driver is definitly doing something!). Mike |
From: Michael V. <mi...@bl...> - 2001-04-19 13:41:33
|
On Thu, 19 Apr 2001, Jordan Stout wrote: > > Basically there are 3 pieces now > > hookint.sys : kernel level driver that intercepts int 80h > hookintapp : loads the driver and listens on an LPC port > 80.exe : just loads eax with argv[1] and does an int80h > > This is my first usage of CVS so I'd be curious to know > if someone can get it to build. What do you need to build it? I've got Visual Studio 6.0, but do I need the DDK? Is that freely downloadable off the Microsoft site? > just a couple more registers to pass, and then load an > elf binary. Is it possible to "deflect" the int 80h back to the originating process, but to a handler at a fixed address? If that is possible, then the Linux application wouldn't need to be run under a debugger at all. Mike |
From: Jordan S. <jd...@me...> - 2001-04-19 06:31:23
|
Basically there are 3 pieces now hookint.sys : kernel level driver that intercepts int 80h hookintapp : loads the driver and listens on an LPC port 80.exe : just loads eax with argv[1] and does an int80h This is my first usage of CVS so I'd be curious to know if someone can get it to build. just a couple more registers to pass, and then load an elf binary. Mike |
From: Michael V. <mi...@bl...> - 2001-04-18 19:18:08
|
On Wed, 18 Apr 2001, Michael Stout wrote: > > Here it is. Let me know if you try it out. > Check out the README.TXT . > It really needs cleanup. > If you put it into your cvs i'll start hacking > from there. Ok, I've imported it into CVS. The module is just called 'un'. If you have a SourceForge user account, I can add you as a project developer so you can have read/write access to the code if you want? I don't have time to look at it right now though, but I'll definitly try to get around to it soon. Thanks Mike |