From a0592ddb9fcad48466fc2fd3e7c6f821cae06bf9 Mon Sep 17 00:00:00 2001 From: "QCQCQC@Ubuntu" <1220204124@zust.edu.cn> Date: Wed, 9 Apr 2025 17:53:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 +- build/execve_interceptor.o | Bin 4968 -> 5448 bytes build/intercept.so | Bin 26776 -> 31608 bytes build/logging.o | Bin 6432 -> 3128 bytes build/pty_dup.o | Bin 0 -> 3032 bytes build/signal_handlers.o | Bin 0 -> 1896 bytes build/terminal_utils.o | Bin 0 -> 4440 bytes config/execve_rules.json | 20 +++ logs/execve.log | 308 +++++++++++++++++++++++++++++++++ logs/execve_out.log | 23 +++ pty.log | 1 + src/debug.h | 2 + src/exec_hook.h | 1 + src/execve_interceptor.c | 24 ++- src/logging.c | 340 +++++++++++++++++++------------------ src/pty_dup.c | 62 +++++++ src/pty_dup.h | 27 +++ src/signal_handlers.c | 22 +++ src/signal_handlers.h | 7 + src/terminal_utils.c | 144 ++++++++++++++++ src/terminal_utils.h | 9 + superbench.log | 48 ++++++ tests/makefault | Bin 0 -> 16840 bytes tests/makefault.c | 96 +++++++++++ 24 files changed, 966 insertions(+), 172 deletions(-) create mode 100644 build/pty_dup.o create mode 100644 build/signal_handlers.o create mode 100644 build/terminal_utils.o create mode 100644 pty.log create mode 100644 src/pty_dup.c create mode 100644 src/pty_dup.h create mode 100644 src/signal_handlers.c create mode 100644 src/signal_handlers.h create mode 100644 src/terminal_utils.c create mode 100644 src/terminal_utils.h create mode 100644 superbench.log create mode 100755 tests/makefault create mode 100644 tests/makefault.c diff --git a/.vscode/settings.json b/.vscode/settings.json index 13b4ade..3910d0b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,7 +16,9 @@ "dlfcn.h": "c", "signal.h": "c", "stdio.h": "c", - "wait.h": "c" + "wait.h": "c", + "signal_handlers.h": "c", + "terminal_utils.h": "c" }, "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/build/execve_interceptor.o b/build/execve_interceptor.o index 46253b44eb7bbf5dbead21bdf21fcb02a23d3f31..2baa4e73ac6fa87cbea15f5be940806c1e93b552 100644 GIT binary patch literal 5448 zcmb_geQXp(6rbw{U73maa{RFYL|C zZ{GX8H*aU&PT8&0tt|)y2$uj^MMg#(CFI>Z;l?xK&N< z%BZR22{qN&HBhW}D4BqoRx-g;WN+4)e;uvVbSZ<>;F+u%fPcB*X%al0okJu-_GOdj za9&OIxayq^!*m?TsVQX$NuxtZI;5^tGTTMYA#mfzd7k;)n@yHvFpT~g#Slv;{6LfX zTJ7l>260`czEIO_0%CQ0X`(`COS}pIcTRFSzJ-t}HPtzbDWts-Y@`QNvl(+8P^25X z)bz#^?z)j@^>D7gy$F*fdLPq7xx)m~(QzXHi67H$618h&0bI)GKCJ)*=}~Ub&^o8N zE6ppwGG@Ze3AH0zii-QP&O|y+SC=v?oSVSr6sAkZqmhjnXt7~t z2Gw^}Gdnv7DD0Kah9dBGLrn?62KW60ZzZ2o9~;=bqRrlq{B4TyprE&oY>|3T3wq0c z5o3`D_Z@;X_^hT_5+Z}`%{RKRLr25thCQHM+_UTA7Uxm;-RaC2(erF<&qV)w{}Iku zi3;8OIz~=fhcXD2fuET4o~geTljX`_@Zk6V3=aN*#Ri8(B{dYghIsvv;Zn@4vS+Bies;xcJ)QQ zoZ5r&@NMH3pX^=5=lqw1;9^kKXg5OJ4Wig~%$7_`3P%z(Zq&bNavM8Cb z7e&nGMWI+Us$1a-E9O+R#FAE+B-)HfM2^Q2W;;o2Gvj23Zd;_hX~~jk({s=@t=1Qj zqr9myivIczrhd(&rFmQCN!PlMUF$yHmpXR+gM$mDz5_>buDiQ$@1g#;Ke>A7Xy2&= zD~YTW2FkREE5A4g8r+bO>|M{9i5kus2+*L zLZq%%YuKdJ)vvC7nviuhH7lg~jm=5RNlH~!@>037qAE#;Rj(~xELSdFz+em>1ZpWM zg$MWHx@Q^*obW7SP`ap0Wo_W)O(f7>8YrJQe!^imtuq0~2jvnPE0at27t~A|S9qZq zR46{$514|_Kj^#i&KHjQCC6CkDY--aK^RS;(YrABIGf@;dUt)O@dU+-2-oB7Du!bY zP&i%#{W2jQx<H8nS}10N>4{?b>IR z&D!SGYw8pY=G?=caKg|bEpZ!yXn}xCheTpJcdwZ(nq?SaBTUSM22n;$OOI%@aFHFh z=@{S;f^_UqG){E8HK9dyC)7q-4fxe<5>Gk_5>Cd~*Ygq*=Z?pDEyYzB$ia0mnZzI9@5>WdgpE;ofy=0*<~p zk0sz@9*zjOsE_wP6fgfJhNJES@NoV?hVwi;hQ=U&3Hn(3x&Crg1mXHmxkFORaO4;D z>lyBiXSaZh@qg&UbJ9ouvY?L_eIDmEAN>;cqH!9#Dm*CD819WPO-e)`mg8px=m&Mr$HppbOX)U%6U&;SNBp|_3HO@m;&Bpw`#-~|X<3pNb z%yo4haXW4JF#^f4JmL^-`MnVLF3MbZ5NF#RAu7{ZKjVEEAA^hz#x_twS-=QocKVJKP0Y$O8>;M1& delta 1764 zcmZWpYiJx*6rMY;WV74svl-SzTWgWHK4?;H5W|+LBX_ld1{zTO5o^_&THLhk3Q9v7 zLyF6EA*GgDTUcntt+wuJX-O6AN(EyD*}6zkR*6_$&$%-brsIKgX72Z$ z@7#0m+_|+>S{>KeQX(? zmPbcJiX>IdmV|cgB$Fg=Y4pymh-J3;0-va?595$6^5QlX^~=2QEiY6Xlr&cf&rSI? z@Q-{)H1j`nKuJMaiLn-(S9sUu15=lu%B{f&x2nSk4k&kb@4RVl%)1vVYG}H}R&dEW zkoZND9yD9wLxcae+f6oKrba|JylRSPQ{%H{gYns^BT}vxTW;`T;vA*n`w?1+CGojR z{yRaPSyJ5P@Pb)GRZYq#dC}elTqr!IMdM3CUN!6VY`%obI_%aqOxJHJT@1;{Ea6Tu zUKqpY%Ct4kKI0amGWJ%-1(|jJklEO0+47Cd z!Az&YUJ&tR5%VHWiTJvR3nG3f;t3H?iTH|$Ux;{7#BW4wiuk*Te^G>Ix*ms5yACDx zOzhl|dwx8d&rRlYKjOBvZ6lG(rOCH`=z{4?hMCmZq3_f)dau zCy4Imj1h=NHA3hvK29K-jE?79IE}Lq4H=nN=@pHtb)&ngSpv}r$1}fz7YRfoJc91# zFHmpE(?p?B50v4u=ZW2MohURvtKbjf;vM+nsx~?}Rf>9W`k~0&72R$RrR{JyWF+76 zvBM5~Sg;>EEcM`>>wCC_T1F+&XvP@2+erk@tTK`hc-XjyeU#XNT@LGZ#W90ypGW1b zIU{Pm?^BJ~BIyK_aK=+U_Bn^G5j%asQ+YKqZnr=ARBt+}rYFD0lmCYY_nv_pzB(T{ zbyPY=v_Z5@-a-+W={5#7+VsljIV-XyDed6?&CQT1nf0l@a#Z_a6xo9wt+&MzY1vWO z5;oXxus3WZ6)KNLy_4t%8lVNC6fp)fKK5sul(suKJ#ImFxAGJ9_`0ah=)OqBHU&0x z+4=o25gU^GGk&^T$+!Y@R^yqfpJ#efe4*TQl<%e~=dwTHhQQ~sJC diff --git a/build/intercept.so b/build/intercept.so index f2eea36dbfeae85faf431599c6af5bc6f09a344a..e7bbe09c83d9c51605c903d341b5459bb7c9d187 100755 GIT binary patch literal 31608 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 Xw4l;g5Uu?S=~u*s#9)hpg=PN^_Ykh# literal 26776 zcmeHQe|%KMwVw@HjR+(tQ52Dtf}%qBZ3RUGVewJ{^+WlIVi4yMvDb{WfYjFrob>%B^Xu#4Hr_&uJT#bpa~ zS;t*%Dix5TtVHlshLbK`^b5(wf1C8>ae`M=*W=}tOL+_3$c-|lsIGScRJL6y^tP?c zr`O9$G^xr+KMNp6dRM2TP zP`dV=SndC%yh^Dzr$X4V(r*cvDXPl58hR9$e>BN(vTI~{cI{xu0u+_u<*_6i)Vx=$ zsA33DCy5S|4$$=&$y5Fwwzq9c^tMT*5BFVA{m6-rowIh?10+iF^YKIBJrO@ej*}Ss zPEpaslAEsCP*AX&^2+hE1V8hCvh=}UK6&fFoxgE!T>sL>$=^B9G5ec6AKbFOkDc+t zoU8l7n?|1;{=>nKuRFKk@SYz|Jz6*X$rZDs-e!Xr+1MYB8*;FC9n z>!CAPeSct6Zmo@-E*trAHh70kxji=W582=k*x(&D_&OW>>o$0k4W6=z!$UUsW*hw5 zHu&Fc%H3rnKNazG;m4ZR0~oA*m)O{+es-eO2>91*>^up7Mh_x?0k=PjZJQ-BS4f#t z`13M~{p%$Hm?QCFQoeMq0IKDCr-#>f6pPOj_#0Bb3iK2=Yfu9W7*hh&YI(aKT7!%W(%BnO7}|nDb<`c<$oyU z-p$5MO-T4;DQd;$R~bLG=7he&1R@ zt8Iv`Ys7DvA43C0SX~${#_E{ADG+0Us0Yo}NG*VP`x_eA&5=ON?`a6}O86SX%o|x9 z^}w>Po}o-1YQzx1D65T!8v;HrghTNd5Na|~YxFiWgnS|dQ1?;%<6&6mp+F2m5eiIW zE&Pu~V1?BNB0(?eS{L#Anb+s@N2AQ+fv-Wbh#~@^AZuI$F;*7}`-9BKLsRE#2u1y@ z-Wx;>J<-5wREw<%pbmAR$eM6$9gF$ku{Rcr;3_JwAm?vHCU}NxFKoej)Zc(xj79w3 zS`h(w7?0J4ZVs}Wy@6O5QHH57(P&TxuntI+>fnopgA_?`FdFdqqdspK?)Yzt`-46- zV4#L>*J-}8XsB#1vHa>HcEz%#iz+;`%4W_nFK5p-FK0nkNz9(ZzH;qVD=IuQNEoRA zd(G!_fd{ zN^7`m5}wzm;qsNk@c|8&Q*&YK8-h@|6l;}=G@SBOD$#J1 zNyAUm@D>eUsNtJ5{B#X(*YL3#evgKqq2XIJ{8A0ys^JSXyhFp!)bMQ@K2F0sHT*0M z->>20HM~p1CusOV4R>jHw}zji;b{%8(C|JDpQzyj8vZ2>XYzTZdwi0H7isup4KLB~ zb2WUdhF_uKE)73V!>4Gt>LMw7hK8T7$zQDD7if67hF_@RhK9=_F3+vha5*&P`1KlI zrrD|1@aY;}ui-N^Jgng}HM~i~<dCEM+E*>eDylnEcV9=l0Y4WsC z(4YB*$(WhPZR$B%xIIRiGF{^Ve&M=@6UX6Ox2er_Nc$f(}W)NH+h=K zqy8pO6L{3$=ap&n8b3WYpi}X#$M;n>=*Z}K!DMg2{l zCZcG6lcxzN+W)AkKTSN*{w7ZoPSoGzX`+exn>SR)%@#gx;TtWy-@>o5@KqLmxrKLI_yrbzu7#gw;U`=8@fN<+!jDwEky;SI zwUKhx5Scd+E5)n&7)BTNZpwJx=_>Dx-D5@95GDw=8wvBf6h)HbOyhHI10kq&njhZ!` zP9^M1htc6033s2-+T6$D!?(doHuFOa9`?3%lzy6J``o*!sz&OrtzeBLBvT`OT=^x^ z-+~twf^w#jY~uoe7QolG&f>c|H*piiPjk}R=h)a8JB?d_(Df*H8(GfGLSZn!C1-v_ z&OE(OVQb@?7~Y@=E(GnLeVWa-4mgY3cID%1j~c!%)7I-$iQmHSV;pNbH1NiZuCkj}hpcgn^IYz-X|uaC;VBOAm_3#bg`z0CpCs zYuI^hoXR8h2S*+S(ZzPyY^lFf4u6yLT6Pgtw_C}eiea~}oI?+`p! z@L&;dW#@w!yckIYE=707_Ob6dRmgq;7x`oJ+g<8m$1}YJH8oOg)vyd_@pRvd(J$GH zKpgFRB3J2|ZzQX>p(DCfnxFSP9@65cI}`4st<6Un^>RG_EXq%mY@;bgkMsEA+Nrpt z^K%Tj$V)U~TQ8vPKfx`rgPeVC9!6{Fxx6x^A3!Wo0Qq-tkz}m{+4vZ^c)4`(PjE4_ zM_Am&CANcMJLnf`&`oWUEWLxu;#R&(S16V2On@DywDWIV&{Xmg!%@NY5oe&k?2UrLvr31hcPY4C+RyXRHwaKEx5; z;ev~U)0(BVx7tWFZ!;3{4kJ;u6|OdL5B3`S_Q9!a`eS|XJNK0<0|A8y)aigsZ9MM75ZZ=$PA#R;c)TOOmy(1cLbPiQBQHbD(L`!9FM|Z z_yY)0z~f4;rAmFHVL8DC)<6JFb`}?E?L?sXn;36LQYtTzS{>*#F{$QxZYj(8RO!r| zv9pCSa`ehCa&!b7-RC|+?VWjwI=-ayWM0{lr29x-SDmUXL}>%k*&S##dL){K&H+qh zjHHbY?hIbRTZGQWr9$VyL3H%49MNegF{86w7I-^6g_CuIDQi8q=pklueR&hDJc0&D zIp^ru6~NL3Fulorpr!f14Y3LMy)JeJGnep$)$lNE~Ie>|s zwf>g6oW<36AU2>>w6qWPcwjKawH{f`y`-lT}zRK;eB!7D6xsMdz zMx%rtN4t1fK7@|3&z+`r?r|Ee?z981g{>?$4sDt?Qe&uZLJizoslVqpSNsj0wX=H| z^(X5ocnSA@XzgcliqC4{Q@RjNY@=}lD-zX;(Ew5I z5sjtz%``WltB#@u<>M6^pjx%4vyDH_^$?7|d}w(EmL!^wCY`5aF{rI`{V7T3NL-U{$^dUQx^g!h?O(CzcN&{6{(6lv9ObEY;+YZY<<& znrki8Ha#8@z&O9P`4C$-DV^;_S$Gx;i#I+@k73GrF*-=_t8yX`Yu} z@>14@Dnf;(1BeQFNxiH`dU+RGUdZz5&?tr1Xn~L|PSD~qQesWJ)(H=uXiVgP_4Oe;&vo)*7EGfh1PFqOGe|QHGTdK&-`jf)`rqh1co9o6oD^}!1P#ScslJG^3;byYo?1WN*q}0_eA0i{%9HP zVqyLuZRx6I9Adu4TE=%yHAYwSeL}Ra2fJcibzW?4;@gzGCc_<&801*OUZZ*#G2$85b0>tBLkodBx5ts{r3kw{miHm8(L8S~LK*e65^ZyGk(s zgTJ)%{^Bpz_(s0PSz)9jPFNt#iM?@U$D)L3ZT7R zRtdmSY}mryzCm&*7~Gj$9&Pn<(UwAPO>Xj1UQ7>1LcZyfYxy0>B5XLT@kZ;}E%>Pm z;1~YK7q4-{E@=YAWS;dN%4Ro%KH8nl{u=bxps#{XekYsl1w92X_YrtsZvdSN`Uu7Y z%Rp&<*8uto=xv~nV&?ZK=$}DpPv%0bV)cTai8a*`m~(v{tEW>z$G|2f$1T?|M^lMo z+=vs4+95Xy*jf0ggg>2_aj{V)OGb_TO7Y1z7qzg<&zyh3>`4=Wa{a}i=|5$&Sn4tp z+5H#%bOWbJrAlNohM$>lXS00It9w+*tpyb$PZ;+0Fci(p+>HEV?`E?hQd0Q^b(GEX zp9H)-oz3#St}1`n1c%ap75P<&58tb5=D$*?@{b_D1Vi~1pgH?))BYIL|1#wBy|JeL z%iR80sLVnB0OHL5K40Yncj1SIsiQGMv_0%=ylf!c{}^PJW7+2o0+fD1ms$R1 z0% zeY8%DBtBAOe<7CSDAAwxQo3IHBVqPU$zwg0CwgyFk}&IBC3tC;ZIXt^2$-McM3?w; z9g(C%Sc&1Og9d9zsvh*-r-T(ho>Y1Cr>~Th9M)p_utvoZ>qnd~m-evs#d+lyh7z2A zR0bB`;W@ABA*}!NeyelHtQKdu1X3<(rKHu8h9zy0v|Z9Il6FYiDQTCa-IDf6%Fbat zl}PH6bcUqml2%GuEooTN7D?MB-6Cm+q@9v>N!l%GpQP&Wm=Zp^#h6ag8IqPuS}AF@ zq+v;0ByE>;i=-Wrc1qeMX}6?(lCm$!`b+APbcUqml2%GuEooTN7D?MB-6Cm+q@9v> zNh(VFC;qM$ws0TwbVWtQeAkq!ns_i4cg>txHm7XHw3%_v&RjohR@sa>=S%pDeQ+SV zkbOjdkCd0F|0%%CY0G(eFrP~i-etk5nF+V{b6*DTz9EzY2H(rsd3~5J9Ve26)vBB-m+bbC+;$}U^>kK>~gT;9Ymp?vk3v6(^^Y*T`k&jA$tmk+oY~=5^!5_E5 zX$^@bxyh&jw!$d^Gy)BIzfp!&9@3{OvaQk8SWLZ16oc_(2=I*9QNbiG^?bg`z+JNLI=P(7>xj6f!)^y_$D4sqJYJmLX(RtM@X>?FGhZYYjm7Kg z%6u$$oSrAv=)qxUK|h^~RvYrHZV1)jz_wZ}?c>z3coV~il5m4RhEEnV2A7~i_5vPp zcAY;M!xw?N2##Fy)W#bd*Fi<&Jdlj#iHfg5+@qTKYEbdH27)*{&gT!q4S-xtp7sV7 zOYS(3jigt5eD#5bS`QtbCO#$k7(S#lM3Lw5EV*Xka<|95VlkZ}NM2F}q9Kns){S`< z->_og@}(6(ah|WoZAb-U@il;O&Y)7gV%b%T7B2H#wPeY)?(00)EnKwB4TI!V-tm3- zI>itBE7wj`lLzFLYv--eQFJCxXR+x=4w4Odu%K?ndSqRmzC01|c&ss;hvlDU_eIAl z>K^4CN~rt9zZK;bKxg;m0pF?Pc|!c#Odc}$X@BCRzI;JC!Y>a|2kzy8 zcBks8L-_K9<#)0?Opg+^8`=SPr5+;v)Jg4xMRBZOo-O)hln3w=0P_&LLlLz@6zRY~ zOQXXvI#)5zQvT7A^3cY7iQGwsdAQ|hPC8lA%*P3X;uJ~~!HI%;jLbte^$_LGgrwsY zO;vg>#KDPqkT?J`57JA(4XE2b{sc<>1WWl{F3*^Gs$(81KQo#b4ox%+0x5!{p^2rW#9N9JL40B0Vc--+`4(?QP) z<-Nk72de6E&N~=Yk2r2X+@^UYd-4uq&CAkF>W8A{Tcndk^VC=wjvkG9Yd~WWLF?5O zKIi+(RtMu{_{xe1<6~}_3Dv~$s+fkx-~#pZ)wQg4U69T(-~R=(Yh13tivk5;=;}{8UdC_t+iC)b+c+B%~Ep^2&zd6}{J@-zW7I)&E9; zY$!cNAGGMJ^+rV}st*UGjHL7ghriRnh3>yv|58+aH&ODc9Top`sju3fmCGDSX{WKC zRQoIJ8C+2LN?)y;Df%rXD5x9ovuY_=DX1z(qNcv$KfwjrQst}l%@V2aQi77Iauxg;E~xw&3XoLk zUueN)IJgdF5pSs?*C?0e8}h>!^#k;y%2)jdWh>vgqWrb#266FQvttpwDqqRc9CtAN PtE+_stsm>j!m|GcyJG-c diff --git a/build/logging.o b/build/logging.o index 711e632fc66dfce3072da567bba600ed5af18e39..e4083589e17badd2438203ddb5b2582d786dfa54 100644 GIT binary patch delta 671 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 literal 0 HcmV?d00001 diff --git a/build/terminal_utils.o b/build/terminal_utils.o new file mode 100644 index 0000000000000000000000000000000000000000..11d40e3918f672101bbf8b51b6c1036ecc55b3b6 GIT binary patch literal 4440 zcmbuDU2GIp6oBuxpO2NQiVJPBz+X(YB16Xiwah1dr*CGda}V}lLrIrnGxGTkvoPcnP& z`R+OAo_p@hoyne5x;kn?AtEG1o*@-YP(rRYRQfU6jgeKPf!uD~dZ$PAeo;qmHmTmw zyjoP|C!Pj_NiqDm)osKov;^=g&WixA6pJeTt zwX9uR$J%u?%5p2ZpSD-&uRIYl;xH`%s@UjZ^OIq#9jKu;bGC`KZK0sc?n>k<3 zrb4NGWniZ8JUF3Ua;DG?-4J1Myh1N%0AHqX;uF}%$$b!49mRdb3RR+b%EHLdLMgwd zGDwSXeR~Z$&^aa&;57+)xwxJ(KQc5=1|OidMKUs9*ZB4+ykE*wuqY0&#&d;NA(Qcu z+2+EO`=UBJdJI&tX3Wd`R&1K5+)_t|Zjs?ARP`3t4@_})Adc7_4HL}e2xi1S1jLe zo-zly%#qzlw*s73mKSB48y*ALz;mBy~C_zPP~+!aM-LDcnMBz&=H z2QRVj?qm;$|DL7$d-)RNg0joaT{_2x}jNlHv&58(9@=o2)kC; z${E=(pl}ih$yufuPSQa_I@{Zy3P0R)JfC&*;kLHOo=9|OTb`+_%yZEE5YI>)pyvC#HDKlb|Aq1XaIjDfcFLPOaQk7_+S7Z4&d(w@DBp`M*;lz0FH0J zYV|)Cz$XLvR{{LH0RCeDzZSrM4&XNfIB^X-lg{du%c065G%d0sGHK?W z6lxHF#8YWAq2s|Q z-zxEBfc==n+ro4XM<#aTjCofen*NUuXhO+5(FE0z4e@9 zedP7F2H0O#zE0Zy@FqXAkBLd$dJK=1J_jA23n~&sd zIQVRL5PUF_ktZv$V9Dep0;WSr06iHam5e}SHa z4*Ew0;O$S`AM=w%vH#WP#)(ez`LFQA@Lh)U`28`afA0a2UT*0B Vp!U}f&&q24$9VoO29w0^|2Lqu)@A?z literal 0 HcmV?d00001 diff --git a/config/execve_rules.json b/config/execve_rules.json index d299bc0..362e334 100644 --- a/config/execve_rules.json +++ b/config/execve_rules.json @@ -16,6 +16,26 @@ "type": "warn", "msg": "使用pip安装torch时,请注意使用厂家支持版本", "args": ["install", "torch"] + }, + { + "cmd": "dirname", + "type": "skip" + }, + { + "cmd": "lesspipe", + "type": "skip" + }, + { + "cmd": "command-not-found", + "type": "skip" + }, + { + "cmd": "dircolors", + "type": "skip" + }, + { + "cmd": "basename", + "type": "skip" } ] } \ No newline at end of file diff --git a/logs/execve.log b/logs/execve.log index bba4bee..d74f598 100644 --- a/logs/execve.log +++ b/logs/execve.log @@ -5824,3 +5824,311 @@ arg[1]: -b arg[0]: /usr/lib/command-not-found arg[1]: -- arg[2]: +[Tue Apr 8 20:53:13 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Tue Apr 8 20:53:14 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Tue Apr 8 20:54:00 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Tue Apr 8 20:54:00 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Tue Apr 8 20:54:12 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Tue Apr 8 20:54:12 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 14:20:41 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 14:20:41 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 14:20:42 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 14:20:43 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +arg[2]: -alF +[Wed Apr 9 14:20:46 2025 +] Command: /usr/bin/htop +arg[0]: htop +[Wed Apr 9 14:21:00 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 14:28:59 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 14:28:59 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 14:29:07 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 14:29:07 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 14:29:30 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +arg[2]: -alF +[Wed Apr 9 14:29:46 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: nvidia-smi +[Wed Apr 9 14:29:59 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 14:30:07 2025 +] Command: /usr/bin/wget +arg[0]: wget +[Wed Apr 9 14:30:13 2025 +] Command: /usr/bin/htop +arg[0]: htop +[Wed Apr 9 14:59:11 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 14:59:11 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:14:19 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:14:19 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:14:20 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 17:14:21 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +arg[2]: -alF +[Wed Apr 9 17:14:32 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 17:15:18 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:15:18 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:15:20 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 17:15:40 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:15:40 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:16:19 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:16:19 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:16:20 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 17:16:21 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +arg[2]: -alF +[Wed Apr 9 17:26:44 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:26:44 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:27:02 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:27:02 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:27:02 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:27:02 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:27:02 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:28:25 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:28:25 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:28:26 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:28:26 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:28:26 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:29:10 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:29:10 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:29:10 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:29:10 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:29:10 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:29:11 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +[Wed Apr 9 17:29:12 2025 +] Command: /usr/bin/ls +arg[0]: ls +arg[1]: --color=auto +arg[2]: -alF +[Wed Apr 9 17:44:01 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:44:01 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:44:01 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:44:01 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:44:01 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:48:56 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:48:56 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:48:57 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:48:57 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:48:57 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:49:55 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:49:55 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:49:55 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:50:17 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:50:17 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:50:17 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:50:45 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:50:45 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b +[Wed Apr 9 17:50:45 2025 +] Command: /usr/lib/command-not-found +arg[0]: /usr/lib/command-not-found +arg[1]: -- +arg[2]: +[Wed Apr 9 17:51:34 2025 +] Command: /usr/bin/lesspipe +arg[0]: lesspipe +[Wed Apr 9 17:51:34 2025 +] Command: /usr/bin/dircolors +arg[0]: dircolors +arg[1]: -b diff --git a/logs/execve_out.log b/logs/execve_out.log index e69de29..8fe653b 100644 --- a/logs/execve_out.log +++ b/logs/execve_out.log @@ -0,0 +1,23 @@ +export LESSOPEN="| /usr/bin/lesspipe %s"; +export LESSCLOSE="/usr/bin/lesspipe %s %s"; + :未找到命令 + :未找到命令 +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + :未找到命令 +export LESSOPEN="| /usr/bin/lesspipe %s"; +export LESSCLOSE="/usr/bin/lesspipe %s %s"; + :未找到命令 + :未找到命令 +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + :未找到命令 +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + :未找到命令 +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + :未找到命令 +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + :未找到命令 diff --git a/pty.log b/pty.log new file mode 100644 index 0000000..9556bd6 --- /dev/null +++ b/pty.log @@ -0,0 +1 @@ + diff --git a/src/debug.h b/src/debug.h index 90c88eb..7dad4b4 100644 --- a/src/debug.h +++ b/src/debug.h @@ -9,7 +9,9 @@ void print_stacktrace(); fprintf(stderr, "[DEBUG][PID %d] %s:%d:%s(): " fmt "\n", getpid(), \ __FILE__, __LINE__, __func__, ##__VA_ARGS__) #else + #define DEBUG_LOG(fmt, ...) ((void)0) + #endif #endif // DEBUG_H \ No newline at end of file diff --git a/src/exec_hook.h b/src/exec_hook.h index d064f19..8060492 100644 --- a/src/exec_hook.h +++ b/src/exec_hook.h @@ -39,6 +39,7 @@ #define ANSI_COLOR_RED "\033[31m" #define ANSI_COLOR_YELLOW "\033[33m" #define ANSI_COLOR_RESET "\033[0m" +#define ANSI_COLOR_BLUE "\x1b[34m" #define SHM_KEY 12345 diff --git a/src/execve_interceptor.c b/src/execve_interceptor.c index a6d5eac..1503682 100644 --- a/src/execve_interceptor.c +++ b/src/execve_interceptor.c @@ -1,5 +1,6 @@ #include "execve_interceptor.h" +#include #include #include #include @@ -10,6 +11,7 @@ #include "debug.h" #include "init_cleanup.h" #include "logging.h" +#include "pty_dup.h" #include "rules.h" #include "utils.h" @@ -23,6 +25,20 @@ time_t last_modified_time = 0; orig_execve_type orig_execve = NULL; int execve(const char *filename, char *const argv[], char *const envp[]) { + // 去除首尾空格 + while (*filename && isspace(*filename)) { + filename++; + } + + const char *end = filename + strlen(filename) - 1; + while (end > filename && isspace(*end)) { + end--; + } + + // 如果去除空格后为空字符串 + if (*filename == '\0') { + return 0; + } // if (!is_initialized) { // initialize(); // } @@ -78,7 +94,11 @@ int execve(const char *filename, char *const argv[], char *const envp[]) { DEBUG_LOG("Rule matched: %s (type: %s)", shared_config->rules[i].cmd, shared_config->rules[i].type); - if (strcmp(shared_config->rules[i].type, "warn") == 0) { + if (strcmp(shared_config->rules[i].type, "skip") == 0) { + DEBUG_LOG(ANSI_COLOR_BLUE "[Skip] %s" ANSI_COLOR_RESET "\n", + shared_config->rules[i].msg); + return orig_execve(filename, argv, envp); + } else if (strcmp(shared_config->rules[i].type, "warn") == 0) { printf(ANSI_COLOR_YELLOW "[Warning] %s\n" ANSI_COLOR_RESET, shared_config->rules[i].msg); printf("按下 'Y' 继续执行, 或按任意键取消: "); @@ -100,7 +120,7 @@ int execve(const char *filename, char *const argv[], char *const envp[]) { } // Duplicate stdout and stderr to the log file - duplicate_output_to_log(); + dupIO(); // 移除LD_PRELOAD diff --git a/src/logging.c b/src/logging.c index 8cfac22..b6a1f5d 100644 --- a/src/logging.c +++ b/src/logging.c @@ -71,193 +71,195 @@ void write_log(const char *filename, char *const argv[]) { fclose(log); } -// 全局变量记录子进程 PID -static pid_t g_child_pid = -1; +// // 全局变量记录子进程 PID +// static pid_t g_child_pid = -1; -// 信号处理器:接收到 SIGINT(Ctrl+C)时,将其转发给子进程 -void handle_sigint(int sig) { - if (g_child_pid > 0) { - kill(g_child_pid, sig); // 向子进程发送 SIGINT - } - DEBUG_LOG("Received SIGINT, forwarded to child process %d", g_child_pid); - exit(EXIT_FAILURE); - // return -1; -} +// // 信号处理器:接收到 SIGINT(Ctrl+C)时,将其转发给子进程 +// void handle_sigint(int sig) { +// if (g_child_pid > 0) { +// kill(g_child_pid, sig); // 向子进程发送 SIGINT +// } +// DEBUG_LOG("Received SIGINT, forwarded to child process %d", g_child_pid); +// exit(EXIT_FAILURE); +// // return -1; +// } -/* - * 本 hook 函数在 execve() 之前调用, - * 利用 forkpty() 创建伪终端、fork 出子进程, - * 子进程返回供后续调用 execve() 替换映像执行具体命令, - * 父进程负责转发 STDIN 数据给伪终端,同时把伪终端输出写到 STDOUT 和日志文件。 - */ -void duplicate_output_to_log() { - // 打开日志文件(以追加写模式) - int log_fd = open(LOG_OUT_FILE, O_WRONLY | O_CREAT | O_APPEND, 0644); - if (log_fd == -1) { - perror("Failed to open log file"); - return; - } +// /* +// * 本 hook 函数在 execve() 之前调用, +// * 利用 forkpty() 创建伪终端、fork 出子进程, +// * 子进程返回供后续调用 execve() 替换映像执行具体命令, +// * 父进程负责转发 STDIN 数据给伪终端,同时把伪终端输出写到 STDOUT 和日志文件。 +// */ +// void duplicate_output_to_log() { +// // 打开日志文件(以追加写模式) +// int log_fd = open(LOG_OUT_FILE, O_WRONLY | O_CREAT | O_APPEND, 0644); +// if (log_fd == -1) { +// perror("Failed to open log file"); +// return; +// } - int master_fd; - // forkpty 创建伪终端并 fork 子进程 - pid_t pid = forkpty(&master_fd, NULL, NULL, NULL); - if (pid < 0) { - perror("forkpty failed"); - close(log_fd); - return; - } +// int master_fd; +// // forkpty 创建伪终端并 fork 子进程 +// pid_t pid = forkpty(&master_fd, NULL, NULL, NULL); +// if (pid < 0) { +// perror("forkpty failed"); +// close(log_fd); +// return; +// } - if (pid == 0) { - // 关闭 ECHO,避免重复显示输入字符 - struct termios ts; - if (tcgetattr(STDIN_FILENO, &ts) == 0) { - ts.c_lflag &= ~ECHO; - tcsetattr(STDIN_FILENO, TCSANOW, &ts); - } +// if (pid == 0) { +// // 关闭 ECHO,避免重复显示输入字符 +// struct termios ts; +// if (tcgetattr(STDIN_FILENO, &ts) == 0) { +// ts.c_lflag &= ~ECHO; +// tcsetattr(STDIN_FILENO, TCSANOW, &ts); +// } - return; // execve 之后替换为目标程序 - } +// return; // execve 之后替换为目标程序 +// } - // // 把父进程的输出改到/dev/null - // int dev_null_fd = open("/dev/null", O_WRONLY); - // if (dev_null_fd >= 0) { - // dup2(dev_null_fd, STDOUT_FILENO); - // dup2(dev_null_fd, STDERR_FILENO); - // if (dev_null_fd > STDERR_FILENO) close(dev_null_fd); - // } +// // // 把父进程的输出改到/dev/null +// // int dev_null_fd = open("/dev/null", O_WRONLY); +// // if (dev_null_fd >= 0) { +// // dup2(dev_null_fd, STDOUT_FILENO); +// // dup2(dev_null_fd, STDERR_FILENO); +// // if (dev_null_fd > STDERR_FILENO) close(dev_null_fd); +// // } - // 父进程 - g_child_pid = pid; +// // 父进程 +// g_child_pid = pid; - // 安装 SIGINT 处理器 - struct sigaction sa; - sa.sa_handler = handle_sigint; - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - if (sigaction(SIGINT, &sa, NULL) < 0) { - perror("sigaction failed"); - close(log_fd); - close(master_fd); - return; - } - DEBUG_LOG("Signal handler for SIGINT installed."); +// // 安装 SIGINT 处理器 +// struct sigaction sa; +// sa.sa_handler = handle_sigint; +// sa.sa_flags = 0; +// sigemptyset(&sa.sa_mask); +// if (sigaction(SIGINT, &sa, NULL) < 0) { +// perror("sigaction failed"); +// close(log_fd); +// close(master_fd); +// return; +// } +// DEBUG_LOG("Signal handler for SIGINT installed."); - // 父进程:负责 I/O 转发(日志记录与输出) - char buffer[1024]; - ssize_t n; - fd_set read_fds; - int stdin_eof = 0; // 标识是否检测到 STDIN EOF - int status; - int max_fd = (master_fd > STDIN_FILENO) ? master_fd : STDIN_FILENO; +// // 父进程:负责 I/O 转发(日志记录与输出) +// char buffer[1024]; +// ssize_t n; +// fd_set read_fds; +// int stdin_eof = 0; // 标识是否检测到 STDIN EOF +// int status; +// int max_fd = (master_fd > STDIN_FILENO) ? master_fd : STDIN_FILENO; - while (1) { - FD_ZERO(&read_fds); - FD_SET(master_fd, &read_fds); - if (!stdin_eof) { - FD_SET(STDIN_FILENO, &read_fds); - } else { - DEBUG_LOG("STDIN EOF detected, not monitoring STDIN"); - } +// while (1) { +// FD_ZERO(&read_fds); +// FD_SET(master_fd, &read_fds); +// if (!stdin_eof) { +// FD_SET(STDIN_FILENO, &read_fds); +// } else { +// DEBUG_LOG("STDIN EOF detected, not monitoring STDIN"); +// } - int ret = select(max_fd + 1, &read_fds, NULL, NULL, NULL); - if (ret < 0) { - if (errno == EINTR) continue; - perror("select failed"); - break; - } +// int ret = select(max_fd + 1, &read_fds, NULL, NULL, NULL); +// if (ret < 0) { +// if (errno == EINTR) continue; +// perror("select failed"); +// break; +// } - // 若有用户输入,则转发到伪终端 - if (!stdin_eof && FD_ISSET(STDIN_FILENO, &read_fds)) { - n = read(STDIN_FILENO, buffer, sizeof(buffer)); - if (n > 0) { - if (write(master_fd, buffer, n) < 0) { - perror("Failed to write user input to pty"); - } - } else if (n == 0) { - // 检测到 STDIN EOF:关闭写端,后续不再转发用户输入 - stdin_eof = 1; - shutdown(master_fd, SHUT_WR); - } - } +// // 若有用户输入,则转发到伪终端 +// if (!stdin_eof && FD_ISSET(STDIN_FILENO, &read_fds)) { +// n = read(STDIN_FILENO, buffer, sizeof(buffer)); +// if (n > 0) { +// if (write(master_fd, buffer, n) < 0) { +// perror("Failed to write user input to pty"); +// } +// } else if (n == 0) { +// // 检测到 STDIN EOF:关闭写端,后续不再转发用户输入 +// stdin_eof = 1; +// shutdown(master_fd, SHUT_WR); +// } +// } - // 若伪终端有输出,则转发到 STDOUT 并写入日志文件 - if (FD_ISSET(master_fd, &read_fds)) { - n = read(master_fd, buffer, sizeof(buffer)); - if (n > 0) { - if (write(STDOUT_FILENO, buffer, n) < 0) { - perror("Failed to write to stdout"); - } - if (write(log_fd, buffer, n) < 0) { - perror("Failed to write to log file"); - } - } else if (n == 0) { - // 下面这种写法处理\n但是好像没什么效果,妈的不知道为什么会出现空行 - // char *line_start = buffer; - // ssize_t n = read(master_fd, buffer, sizeof(buffer) - 1); - // if (n > 0) { - // buffer[n] = '\0'; // 确保字符串结束 +// // 若伪终端有输出,则转发到 STDOUT 并写入日志文件 +// if (FD_ISSET(master_fd, &read_fds)) { +// n = read(master_fd, buffer, sizeof(buffer)); +// if (n > 0) { +// if (write(STDOUT_FILENO, buffer, n) < 0) { +// perror("Failed to write to stdout"); +// } +// if (write(log_fd, buffer, n) < 0) { +// perror("Failed to write to log file"); +// } +// } else if (n == 0) { +// // 下面这种写法处理\n但是好像没什么效果,妈的不知道为什么会出现空行 +// // char *line_start = buffer; +// // ssize_t n = read(master_fd, buffer, sizeof(buffer) - 1); +// // if (n > 0) { +// // buffer[n] = '\0'; // 确保字符串结束 - // // 按行处理输出 - // while (line_start < buffer + n) { - // char *line_end = strchr(line_start, '\n'); - // if (!line_end) { - // line_end = buffer + n; // 最后一行可能没有换行符 - // } else { - // line_end++; // 包含换行符 - // } +// // // 按行处理输出 +// // while (line_start < buffer + n) { +// // char *line_end = strchr(line_start, '\n'); +// // if (!line_end) { +// // line_end = buffer + n; // 最后一行可能没有换行符 +// // } else { +// // line_end++; // 包含换行符 +// // } - // size_t line_len = line_end - line_start; +// // size_t line_len = line_end - line_start; - // // 写入标准输出 - // if (write(STDOUT_FILENO, line_start, line_len) < 0) { - // perror("Failed to write to stdout"); - // } +// // // 写入标准输出 +// // if (write(STDOUT_FILENO, line_start, line_len) < 0) { +// // perror("Failed to write to stdout"); +// // } - // // 写入日志文件 - // if (write(log_fd, line_start, line_len) < 0) { - // perror("Failed to write to log file"); - // } +// // // 写入日志文件 +// // if (write(log_fd, line_start, line_len) < 0) { +// // perror("Failed to write to log file"); +// // } - // line_start = line_end; - // } - // } else if (n == 0) { - /* - * 当伪终端返回 0 时, - * 通过 waitpid(pid, …, WNOHANG) 检查子进程是否真的退出, - * 如果 bash 仍活跃,则可能是暂时无数据,不退出转发循环。 - */ - pid_t ret_pid = waitpid(pid, &status, WNOHANG); - if (ret_pid == 0) { - continue; - } else { - break; - } - } else if (n < 0) { - if (errno == EIO) { - // 伪终端关闭,退出循环 - break; - } else { - perror("Failed to read from pty"); - break; - } - } - } - } // end while 循环 +// // line_start = line_end; +// // } +// // } else if (n == 0) { +// /* +// * 当伪终端返回 0 时, +// * 通过 waitpid(pid, …, WNOHANG) 检查子进程是否真的退出, +// * 如果 bash 仍活跃,则可能是暂时无数据,不退出转发循环。 +// */ +// pid_t ret_pid = waitpid(pid, &status, WNOHANG); +// if (ret_pid == 0) { +// continue; +// } else { +// break; +// } +// } else if (n < 0) { +// if (errno == EIO) { +// // 伪终端关闭,退出循环 +// break; +// } else { +// perror("Failed to read from pty"); +// break; +// } +// } +// } +// } // end while 循环 - // 等待子进程完全退出,并报告异常状态(如果有) - if (waitpid(pid, &status, 0) < 0) { - perror("waitpid failed"); - } else { - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { - int status = WIFEXITED(status) ? WEXITSTATUS(status) : -1; - DEBUG_LOG("Child process exited abnormally (status: %d)", status); - } else { - DEBUG_LOG("Child process exited normally"); - } - } +// // 等待子进程完全退出,并报告异常状态(如果有) +// if (waitpid(pid, &status, 0) < 0) { +// perror("waitpid failed"); +// } else { +// if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { +// int status = WIFEXITED(status) ? WEXITSTATUS(status) : -1; +// DEBUG_LOG("Child process exited abnormally (status: %d)", status); +// fprintf(stderr, +// "Child process exited abnormally (status: %d)\n", status); +// } else { +// DEBUG_LOG("Child process exited normally"); +// } +// } - close(master_fd); - close(log_fd); +// close(master_fd); +// close(log_fd); - exit(EXIT_SUCCESS); -} \ No newline at end of file +// exit(EXIT_SUCCESS); +// } \ No newline at end of file diff --git a/src/pty_dup.c b/src/pty_dup.c new file mode 100644 index 0000000..32f50b6 --- /dev/null +++ b/src/pty_dup.c @@ -0,0 +1,62 @@ +#include "pty_dup.h" +#include "signal_handlers.h" +#include "terminal_utils.h" +#include "debug.h" + +FILE *log_file = NULL; +pid_t child_pid; +int child_status = -1; + +void print_child_status() { + if (child_status != -1) { + if (WIFEXITED(child_status)) { + DEBUG_LOG("\nChild process terminated normally with exit code %d\n", + WEXITSTATUS(child_status)); + } else if (WIFSIGNALED(child_status)) { + DEBUG_LOG("\nChild process terminated abnormally by signal %d\n", + WTERMSIG(child_status)); + } else if (WIFSTOPPED(child_status)) { + DEBUG_LOG("\nChild process stopped by signal %d\n", + WSTOPSIG(child_status)); + } + } +} + +void dupIO() { + pid_t pid; + int master; + struct termios term; + struct winsize win; + + setup_termios(&term); + + signal(SIGINT, handle_sigint); + signal(SIGCHLD, handle_sigchld); + + if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win) < 0) { + perror("ioctl TIOCGWINSZ failed"); + exit(1); + } + + pid = forkpty(&master, NULL, &term, &win); + child_pid = pid; + + if (pid < 0) { + perror("forkpty failed"); + exit(1); + } else if (pid == 0) { + signal(SIGINT, SIG_DFL); + return; + } + + handle_io(master); + close(master); + + if (WIFEXITED(child_status)) { + exit(WEXITSTATUS(child_status)); + } else if (WIFSIGNALED(child_status)) { + exit(128 + WTERMSIG(child_status)); + } + + exit(1); +} \ No newline at end of file diff --git a/src/pty_dup.h b/src/pty_dup.h new file mode 100644 index 0000000..cef63e1 --- /dev/null +++ b/src/pty_dup.h @@ -0,0 +1,27 @@ +#ifndef PTY_MAIN_H +#define PTY_MAIN_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 + +extern FILE *log_file; +extern pid_t child_pid; +extern int child_status; + +void dupIO(void); +void print_child_status(void); + +#endif diff --git a/src/signal_handlers.c b/src/signal_handlers.c new file mode 100644 index 0000000..e170626 --- /dev/null +++ b/src/signal_handlers.c @@ -0,0 +1,22 @@ +#include "pty_dup.h" +#include "signal_handlers.h" +#include "debug.h" + +void handle_sigint() { + DEBUG_LOG("\nReceived SIGINT, cleaning up...\n"); + if (child_pid > 0) { + kill(child_pid, SIGTERM); + } + exit(EXIT_FAILURE); +} + +void handle_sigchld() { + int status; + pid_t pid; + + while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { + if (pid == child_pid) { + child_status = status; + } + } +} diff --git a/src/signal_handlers.h b/src/signal_handlers.h new file mode 100644 index 0000000..b28ba2b --- /dev/null +++ b/src/signal_handlers.h @@ -0,0 +1,7 @@ +#ifndef SIGNAL_HANDLERS_H +#define SIGNAL_HANDLERS_H + +void handle_sigint(); +void handle_sigchld(); + +#endif diff --git a/src/terminal_utils.c b/src/terminal_utils.c new file mode 100644 index 0000000..6a5d6eb --- /dev/null +++ b/src/terminal_utils.c @@ -0,0 +1,144 @@ +#include "terminal_utils.h" +#include "config.h" + +#include "pty_dup.h" + +void setup_termios(struct termios *term) { + // 初始化终端设置 + memset(term, 0, sizeof(struct termios)); + + // 输入模式标志 - 禁用特殊输入处理 + term->c_iflag = ICRNL; // 仅保留 CR 到 NL 的转换 + + // 输出模式标志 + term->c_oflag = OPOST | ONLCR; // 启用输出处理,NL转换为CRNL + + // 控制模式标志 + term->c_cflag = CS8 | CREAD; // 8位字符,启用接收器 + + // 本地模式标志 - 禁用特殊输入处理 + term->c_lflag = ISIG | IEXTEN; // 仅保留信号处理和扩展功能 + + // 控制字符 + term->c_cc[VINTR] = 0x03; // Ctrl-C + term->c_cc[VQUIT] = 0x1c; // Ctrl-反斜杠 + term->c_cc[VERASE] = 0x7f; // Backspace + term->c_cc[VKILL] = 0x15; // Ctrl-U + term->c_cc[VEOF] = 0x04; // Ctrl-D + term->c_cc[VTIME] = 0; + term->c_cc[VMIN] = 1; + term->c_cc[VSWTC] = 0; + term->c_cc[VSTART] = 0x11; // Ctrl-Q + term->c_cc[VSTOP] = 0x13; // Ctrl-S + term->c_cc[VSUSP] = 0x1a; // Ctrl-Z + term->c_cc[VEOL] = 0; + term->c_cc[VREPRINT] = 0x12; // Ctrl-R + term->c_cc[VDISCARD] = 0x0f; // Ctrl-O + term->c_cc[VWERASE] = 0x17; // Ctrl-W + term->c_cc[VLNEXT] = 0x16; // Ctrl-V + term->c_cc[VEOL2] = 0; + + // 设置输入输出速度 + cfsetispeed(term, B38400); + cfsetospeed(term, B38400); +} + +void handle_io(int master_fd) { + struct termios orig_term, raw_term; + + // 保存原始终端设置 + tcgetattr(STDIN_FILENO, &orig_term); + + // 设置原始模式 + raw_term = orig_term; + cfmakeraw(&raw_term); + tcsetattr(STDIN_FILENO, TCSANOW, &raw_term); + + char buffer[BUFFER_SIZE]; + struct pollfd fds[2]; + + // 设置非阻塞模式 + fcntl(master_fd, F_SETFL, O_NONBLOCK); + fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); + + fds[0].fd = STDIN_FILENO; + fds[0].events = POLLIN; + + fds[1].fd = master_fd; + fds[1].events = POLLIN; + + // 打开日志文件(以追加写模式) + int log_fd = open(LOG_OUT_FILE, O_WRONLY | O_CREAT | O_APPEND, 0644); + if (log_fd == -1) { + perror("Failed to open log file"); + return; + } + + while (1) { + int ret = poll(fds, 2, 100); // 设置超时以便定期检查子进程状态 + if (ret < 0) { + if (errno == EINTR) continue; + perror("poll failed"); + break; + } + + // 优先处理 PTY 输出,确保缓冲区中的数据被完全读出 + if (fds[1].revents & (POLLIN | POLLHUP)) { + ssize_t n = read(master_fd, buffer, sizeof(buffer)); + if (n > 0) { + // 直接写入,让终端自己处理控制序列 + write(STDOUT_FILENO, buffer, n); + write(log_fd, buffer, n); + } + } + + // 检查子进程状态 + if (child_status != -1) { + // 再次尝试读取可能残留的输出 + while (1) { + ssize_t n = read(master_fd, buffer, sizeof(buffer)); + if (n <= 0) break; + write(STDOUT_FILENO, buffer, n); + write(log_fd, buffer, n); + } + + // 确保所有输出都已刷新 + fflush(stdout); + fflush(stderr); + + break; + } + + // 处理标准输入 + if (fds[0].revents & POLLIN) { + ssize_t n = read(STDIN_FILENO, buffer, sizeof(buffer)); + if (n <= 0) break; + write(master_fd, buffer, n); + } + + // 如果子进程已退出但信号处理程序还未设置状态 + if (waitpid(child_pid, &child_status, WNOHANG) > 0) { + continue; // 让循环继续以处理剩余输出 + } + } + + if (log_fd) { + close(log_fd); + } + + // 确保输出缓冲区被刷新 + fflush(stdout); + fflush(stderr); + + // 在恢复终端设置之前先暂停一下,等待所有输出完成 + usleep(10000); // 暂停10ms + + // 在恢复终端设置之前清除可能的未完成输出 + tcflush(STDIN_FILENO, TCIFLUSH); + + // 恢复终端设置 + tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); + + // 打印退出状态 + print_child_status(); +} diff --git a/src/terminal_utils.h b/src/terminal_utils.h new file mode 100644 index 0000000..32731b1 --- /dev/null +++ b/src/terminal_utils.h @@ -0,0 +1,9 @@ +#include + +#ifndef TERMINAL_UTILS_H +#define TERMINAL_UTILS_H + +void setup_termios(struct termios *term); +void handle_io(int master_fd); + +#endif diff --git a/superbench.log b/superbench.log new file mode 100644 index 0000000..9e92ec6 --- /dev/null +++ b/superbench.log @@ -0,0 +1,48 @@ +---------------------------------------------------------------------------------- + Superbench.sh -- https://www.idcoffer.com/archives/4764 + Mode : Standard Version : 1.3.12 + Usage : bash <(wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh) +---------------------------------------------------------------------------------- + CPU Model : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz + CPU Cores : 4 Cores 900.005 MHz x86_64 + CPU Cache : L2 256K & L3 6144K + CPU Flags : AES-NI Enabled & VM-x/AMD-V Enabled  + OS : Ubuntu 22.04.5 LTS (64 Bit) Dedicated + Kernel : 6.8.0-52-generic + Total Space : 55.9 GB / 2791.3 GB  + Total RAM :  MB /  MB ( MB Buff) + Total SWAP :  MB / MB + Uptime : 23 days 22 hour 44 min + Load Average : 2.95, 2.59, 2.49 + TCP CC : cubic + fq_codel + Organization : AS4134 CHINANET-BACKBONE + Location : Jiaxing / CN + Region : Zhejiang +---------------------------------------------------------------------------------- + Unlock Test : + Netflix : No + YouTube Premium : Network connection failed + YouTube CDN : Network connection failed + BiliBili China : Yes (Region: Mainland Only) + TikTok : Network connection failed + iQIYI International : Yes (Region: INTL) + ChatGPT : Failed +---------------------------------------------------------------------------------- + I/O Speed( 1.0GB ) : 3.9 GB/s + I/O Speed( 1.0GB ) : 4.1 GB/s + I/O Speed( 1.0GB ) : 3.9 GB/s + Average I/O Speed : 4061.9 MB/s +---------------------------------------------------------------------------------- + Geekbench v6 Test : + Single Core : 1283  + Multi Core : 3760 +---------------------------------------------------------------------------------- + Node Name Upload Speed Download Speed Latency Packet Loss + Speedtest.net 47.22 Mbit/s 755.03 Mbit/s 7.46 ms Not available + Zhenjiang 5G CT 47.32 Mbit/s 755.70 Mbit/s 13.96 ms Not available + Hangzhou CT 48.82 Mbit/s 737.21 Mbit/s 7.40 ms Not available + Shanghai 5G CU 47.02 Mbit/s 750.25 Mbit/s 17.97 ms 0.0% + Hangzhou 5G CM 47.37 Mbit/s 749.96 Mbit/s 9.27 ms 0.0% +---------------------------------------------------------------------------------- + Node Name Upload Speed Download Speed Latency Packet Loss +---------------------------------------------------------------------------------- diff --git a/tests/makefault b/tests/makefault new file mode 100755 index 0000000000000000000000000000000000000000..72d0e26ee0414bf35809b1731e0b3822a14a05ba GIT binary patch literal 16840 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 +#include +#include +#include + +void null_pointer_deref() { + char *ptr = NULL; + *ptr = 'x'; +} + +void buffer_overflow() { + char buf[5]; + strcpy(buf, "This is too long!"); +} + +void use_after_free() { + int *ptr = malloc(sizeof(int)); + free(ptr); + *ptr = 100; +} + +void array_out_of_bounds() { + int arr[3]; + arr[5] = 10; +} + +void double_free() { + int *ptr = malloc(sizeof(int)); + free(ptr); + free(ptr); +} + +void uninitialized_pointer() { + int *ptr; + printf("%d", *ptr); +} + +void stack_overflow() { + stack_overflow(); // 递归调用导致栈溢出 +} + +void wild_pointer() { + int *ptr; + ptr = (int*)0x12345678; + *ptr = 100; +} + +void dangling_pointer() { + int *ptr1 = malloc(4); + int *ptr2 = ptr1; + free(ptr1); + *ptr2 = 100; +} + +void wrong_free() { + int x = 10; + int *ptr = &x; + free(ptr); // 试图释放栈内存 +} + +void memory_alignment() { + char *ptr = malloc(8); + long *lptr = (long*)(ptr + 1); // 错误的内存对齐 + *lptr = 123456789; + free(ptr); +} + +void buffer_underflow() { + int *arr = malloc(sizeof(int) * 5); + arr[-1] = 100; + free(arr); +} + +void (*crash_funcs[])(void) = { + null_pointer_deref, + buffer_overflow, + use_after_free, + array_out_of_bounds, + double_free, + uninitialized_pointer, + stack_overflow, + wild_pointer, + dangling_pointer, + wrong_free, + memory_alignment, + buffer_underflow +}; + +int main() { + srand(time(NULL)); + int num_funcs = sizeof(crash_funcs) / sizeof(crash_funcs[0]); + int index = rand() % num_funcs; + printf("Executing crash function %d\n", index); + crash_funcs[index](); + return 0; +}