From d0fe3a1ae9bf29d105ce66c8ac27138f4560dcff Mon Sep 17 00:00:00 2001 From: Andrew Werner Date: Thu, 26 Sep 2024 14:34:25 -0400 Subject: [PATCH] linux: Rebuild helper bin files This commit utilizes the containers created in [frida/docker-images#2] to rebuild all the Linux injector helper binaries for all the architectures. It uses a new script to rebuild them and hooks up CI to rebuild them and make sure that they are all the same as what is checked in. This should allow us to make changes to these binaries without any pain and with the confidence that what is checked in matches the source. [frida/docker-images#2]: https://github.com/frida/docker-images/pull/2 --- .github/workflows/ci.yml | 32 ++++++ src/linux/helpers/bootstrapper-arm.bin | Bin 8344 -> 8336 bytes src/linux/helpers/bootstrapper-mips.bin | Bin 10624 -> 10624 bytes src/linux/helpers/bootstrapper-mips64.bin | Bin 9856 -> 9792 bytes src/linux/helpers/bootstrapper-mips64el.bin | Bin 9792 -> 9792 bytes src/linux/helpers/bootstrapper-mipsel.bin | Bin 10624 -> 10624 bytes src/linux/helpers/bootstrapper-x86.bin | Bin 6612 -> 6768 bytes src/linux/helpers/bootstrapper-x86_64.bin | Bin 6669 -> 6864 bytes src/linux/helpers/loader-arm.bin | Bin 1708 -> 1700 bytes src/linux/helpers/loader-mips.bin | Bin 2496 -> 2880 bytes src/linux/helpers/loader-mips64.bin | Bin 2496 -> 2816 bytes src/linux/helpers/loader-mips64el.bin | Bin 2496 -> 2816 bytes src/linux/helpers/loader-mipsel.bin | Bin 2496 -> 2880 bytes src/linux/helpers/loader-x86.bin | Bin 1611 -> 1622 bytes src/linux/helpers/loader-x86_64.bin | Bin 1338 -> 1568 bytes src/linux/helpers/meson.build | 7 +- src/linux/helpers/nolibc-tweaks.patch | 23 ----- src/linux/helpers/rebuild.sh | 108 ++++++++++++++++++++ 18 files changed, 146 insertions(+), 24 deletions(-) create mode 100755 src/linux/helpers/rebuild.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c12d3643..3d109e789 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -241,3 +241,35 @@ jobs: cp -a tests/frida-tests tests/labrats lib/agent/frida-agent.so /tmp/pkg/ tar -C /tmp/pkg -cf /tmp/runner.tar . /opt/sabrelite/run.sh /tmp/runner.tar /opt/frida/frida-tests + + # This job is used to check that the Linux helpers are built correctly for all + # supported architectures. We do this because the binary artifacts are checked + # in, and we want to ensure that they are up-to-date with respect to the source + # for all architectures. + check-linux-helpers: + strategy: + matrix: + arch: [x86, x86_64, arm, arm64, mips, mipsel, mips64, mips64el] + runs-on: ubuntu-latest + container: ghcr.io/frida/core-linux-helpers-${{ matrix.arch }}:latest + steps: + - name: Check out repo + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Build + run: | + ./src/linux/helpers/rebuild.sh ${{ matrix.arch }} + - name: Check for unexpected changes + run: | + git config --global --add safe.directory "$(realpath .)" + status_output="$(git status --porcelain)" + if [ -n "$status_output" ]; then + echo "Unexpected changes detected:" + echo "$status_output" + echo "Diff:" + git diff + exit 1 + else + echo "No unexpected changes detected." + fi diff --git a/src/linux/helpers/bootstrapper-arm.bin b/src/linux/helpers/bootstrapper-arm.bin index 1bbe33bf4d3fdb56d6217b60aa2a4508789909cb..bea7af224706949aa9fd72fcef6b29f70e15842f 100644 GIT binary patch delta 24 bcmbQ?IKgp4gMvWA{r~lh3=9k^e<3sgdU^IKy#6gTiD51rC9V`~T}185kI3{z7N~mlX+A diff --git a/src/linux/helpers/bootstrapper-mips.bin b/src/linux/helpers/bootstrapper-mips.bin index ad152cea4e76aaeb0df696b36aca840ba8e17fa1..33234d8a021540d282220d86690df550cace3e32 100644 GIT binary patch literal 10624 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 literal 10624 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 Og8H{Kfc1Yc%>MwkcWcf7 diff --git a/src/linux/helpers/bootstrapper-mips64.bin b/src/linux/helpers/bootstrapper-mips64.bin index 2314e142eabde5425eb306ea73fb138af5a627c0..76f9ecde1913785e9fc207286c4e92a2bfbeb4d2 100644 GIT binary patch literal 9792 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 wIH+MF_;gsXZsMWP@yE61A4g8~zZU`6rvLx| literal 9792 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 B&2j($ diff --git a/src/linux/helpers/bootstrapper-mipsel.bin b/src/linux/helpers/bootstrapper-mipsel.bin index 5454491366da57441d33921d4ee86030ab519c96..f0e4f45bc6c9c74bf6ea526cd995bf308c9b1ea5 100644 GIT binary patch literal 10624 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 diff --git a/src/linux/helpers/bootstrapper-x86.bin b/src/linux/helpers/bootstrapper-x86.bin index 80b908f941d3edb17e533ff6f9f259d5e1da32d1..c9a9ad73fe933dd6f5b85f6f3bd173b948ea0aee 100644 GIT binary patch delta 2780 zcmY*bdvFuS8Q+u6l8hyv;)iU;;SZX)gQplW$;gjbl$gdb9>yM1sw6;<$W6>+zyZqj+Y{54 zo6&x|zuolUuYO%0X&6nTUQ zwh^yQ!6zQ$F+9wsV|X+v#**T4QpA(uDif{0U2MPhwXUlnudeIbMC*t192p!sWn5eMLS~H1Ns; z;u`}ya#P51UbE1PTxCfynJ+)GNLJjYobnjt_0Mwh>xN)}S)&?;Am78$2XHQaYmWuC zC0+pEVqOstJ?5RwgxpYs{CNPY`^28z;OhtQLuWW-LuDfuLOmuJsk`XQe6_VM6H;)d zi}vv%_fz^$zLeWU(^5okJDm^hF6x7}o*snu75X-`hv@*czo9pv{T)rWh#aNm&|ajQ zpna1Dpglowx+)DBcF}bILjbI?ABKo z6O%lh;&&g&l&8)9e0iFeL{iDuDa-f-jI5FiM#?fPmtg&Zxc0Y`|YGjBnPxw=|RVw(jD>_Q|jWU6IqpsD9K#p8-8U?o%~ull2YYEy9U&z_wJIv8+^Hl`1A z@6dI^v)1<@3mW@hqCp`)Z|`lWbFxvFIq(T?m4ZjTLO7M45{j)cY`h0_T!;rZz>QLO z-Pyc#n-Ok!a~dbxfL*~&idqkQe}UF%%V3d$JLLfJ&sMo+Ji8grv7Eb%(!fAX(cz;-3ov)me<5P{Fqp9bB_)GUEp38n` z<0OKNm7B$faJ5ik@);eZdjKjyid@Yr8Y%sGq29_oD(X0m&<)ciA&GpHU)=cxC^LJ*~D3v_aBu&BY&#*L_w08 zur77^NWI8k2-V61yn>G{LGZi@NBg|&jQg5=M}){KrX3$sa7PTcz&2DD!_5q8x;Lgo z{JI{5U^i7Mk$qqk!OeAxa9jv~2@Apb=H7UUIl}B#@Nsz|Cq#Og=6$*Fgc}BifZB{h zrHn{dA`Q^O={uBO_c)~aW>|b7M0}yrHHN+u*8E~ zgypzJ!7X(r}aa?KbI z;v*;&ID(`SInbf|3k+vSZ3l!s2+0%Z)FlCy8hf5&L%)sSPHi_-OJkcW@wpM3A@U(h zO2rC9S*pm%0F;86EgGxT+akZSOZku5Nw zP!eMNc1@(ea%Gk~0eVacJ*FgA4VAD^hs90+VD1D6_Cc5ZZ$b3Wu12ncmgjtrg=C6B Z@Im(ulc)CQykv3)arH_Q#~72}e*iVnq8tDK delta 2637 zcmY*be^3-XK6O!~)t z-*-RX_rAa1_g%DPWSO%X-Pl@FrTlBV{=4Z6W7&7inVnpQD>;{j#KB{(<${@G7%bYb z$A-k?aTJL|NE|`pC=#zAF@nVF$KF|GFTE3sss55!ET(^Q>~?YHPt0(xcBF@87$!I- z?M0({2U)eaB=r8ZrN(&I_=_)-V8*bfG{YFb6MD9wo_E^tT1uIK%OboPw@S+snyjyv?=-%bjf0_&eEZDs)z*P#re* z9=h*}Azy@Glh-~r@vXOCkn5(R#Xj)Qr5QOcEjTQvL%#HbPKN2RfCD#Q02%gm4{%n- zquj5QC&O#WO7pA+-+5Km&_q0Z*O##v7O(5CL2|IDf%C7wPM!C5<4r4q!v|871Lcg& zRU%PSe40s?u-L8CKgq~HRqB^8@{e$R(Wb4NsVaXt~(b^@66Xuwg8e$}CPZIcHyrTFmutd9z6U*I{A;an7vG9+X~n($r@XM>A^#? z)0RIwbd`=n)!eqauM&>yts{-xjGP0ymW%^^o+KwPvUa61Ok;RAc`7;2 zxgRv>B4hk(ZK-3jGvxBtSuJZK777eI9)M&9*m4ck=f)!M&|^x-KX_yY-b) zY*VHz()ae;l_|57s!VZGmI1s~$~P?7!y(gYs0m}t0KN{Daz-@4BpKsWT52;sN9W1X zlwE8A`E|N;%D!{-7^31e_Y#KQ@t+Jt} z3iYB-^*i@L(ubn@KY?-g?aL_cQ@LE27(MU}HE7lhlS_N{x!OLMeKl2j1lq1~pdB&} z*X3)A>{eSYgH`?Acrb7QXh$1fwPifv%P$i_>T1i~1keZoe^Mjs?6c-4;sfP3XMs?O zu;1Fjvhxg#5;{wD3;Bh8dhV@z@nYrS8oOSRFy^GvR`MtN3%qL#)efQB5!VFq2e22_`nCixhG$?u#>Djf<}v@FurlclXXbE=o+qb zS6}12tb2mv0(tNYs&MfosZ! z2%kEeJxLa)ZkU^OmnIe_+?cd-z#I>xA3D&TB+omu_;F+tfM|(1;?b=T49ik&AsMVk2PgO_wQ{q+r_d{yw zOeGR6?k9)RigV?|*cZWX9Hct5u-KMRhUF$Qn3mhn##hK~NNzK)%XFXTOMAdg z_O%t?N8%CJ1?25=jh&&r{81qg<*%_GjhglziOF5nc#ptc^4BW;91@SNX5cyF53hsP zL1H@%uemNP9-`H6x;Kh~5?BVd5(W1HSBJ$zbt@ah2p`ZvA$WeMH)6qOsh=#^?od{+ ze6XL|+L!|m@ne_#SUie-e)c{-OZ63m(b;-fp*#*WRs0!r?z3>@5^VG16Vy&Y6#F{x zeh!`34PR)oxDTroH*avVy?AcitAbuM)T^7IbMJ;sl36)#>V05GwOz_Jw)dJTIYgWp z1r71=_HS47Y*_99FU%FrxFc?{nJ*KYk=R@p6A#@?0o^o8>}@XSrLW>qGc@H1T3VF! zK5IOI#b#XH#Da>aO7@d5NT+b?c5j-mwwt;+m36syjx`Vb%9NifX2u?7u0{~z%AG2{;zPet>2Z!=# zfwu^m`V9yOG;#FVXoH<`S)~m&2ZRoCAbaKNEr6=ed(>uu0q!)_3M26;iXNs2UJoHs zRSV*fKLJtgc0GqoWM?eo00Kuk;3RO=M2_muru7L3od7`RHVemrf#o-3`SeEiSLF2c Wr4G0ZM};WGj|%_(;L-FSn*IkXu(6u} diff --git a/src/linux/helpers/bootstrapper-x86_64.bin b/src/linux/helpers/bootstrapper-x86_64.bin index 63625083f8a37e006e038b8dfd6658b29495258f..9ab54bda93f7b92b367179627b33ca902b576a15 100644 GIT binary patch delta 3921 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 diff --git a/src/linux/helpers/loader-arm.bin b/src/linux/helpers/loader-arm.bin index ec1fcda1870b9ab4cdb913198dfb1a86ad26b9c1..23229e2900c003dac90d537a2658febedf928b9b 100644 GIT binary patch delta 24 bcmZ3(yM%Yc6gGjJpa1I_85kHs{zGU0cAf}( delta 28 fcmZ3&yM}ke6t>9@Y#ah9KmXS=GB7as{D;s0lCud+ diff --git a/src/linux/helpers/loader-mips.bin b/src/linux/helpers/loader-mips.bin index 5eabd6d67add91012735cfcaee11a573920ca878..4e1843a43c504e9e753fd7d991f7a6a75a590c3d 100644 GIT binary patch literal 2880 zcmeHJO=uKn7=HHKjc$m+NnC883!P+V+=T`*;8Iq)hapNSC6t1;D0oQL7_fvyqKDc; zS^Oi1Fk`hp2Ba*zMlYqK{ZT0XEFuz$2M;}X=wS~%*p?PgrH3}t=ly1~?pk}X*M4O4 z?R@X|zVGwAf3xK*kiP&Vms`V2$C2?*_obKiVHDMpZQV=m0Sb1~MA|xuA#mkyh7W?T zPzb(+6{E&`I~UO zeJ~XqTbbhLkKW)S9Ah_9YGiTPm+uIFRjQif{u^M}WsNs{OYjm)lQ>HL*}g1sIR2Tw zv^NfHGvEX_U=Uvs&5|9g5bq_8vmDeh+NdFKZ9pQwg1o}2of-(gLv_*isbjdp*4_Il(V{FV``m`9^rlG2TxY$5PB^ zGw&+lL+qtk?vdNbI$t>x`KOn7#ygD1X~~Dk{RS+-Cd;T`qwG)fWo{l?<2uhp@^;93 zl)MWu?^4A3uM08n8oBKy_H4cZ(^GBUd-8R>#Qd02Gu$nHiaguJy~HyEwN;z3*&o!H z&l*Pgaf1ePU6&X+x_%^Qf@O4^oQXf`Oc&|2tCR27c);4c z%Q!TbK12r9n(+EDxP?}59X|xu@Q^)rpY^dyZZ|B$_y90%=|$lQlx&8BJN>tK?pAH1 z3PzI4sOG$rVBdwIaU2^MBg@;tTHkG@+RyL673P1Na-(|B zxQUGDcG?gbpN(=4(t^iYf%4A55c^gN3AmgA5_9^Y{e6;8*69RuIl^*6p)5-Qlw*^11d)htF5FPaD~|$48?0 zRon3!ROlz(gtr}**jAIPx@QzjyZ9Osl&Q`$!KE>u?%%I7)bP{-~C&7bi8a z_I?|Oi5cvp@Y$F`ia@*i^6KwCb} zI#)=_3};MpfmoMpKvmuotgoLw7YS?bBVY3)UceHRWsYmN=vka;7EvwJ)L zOP_bWt2%kHXWoDt#YuF;2G1&TM*GZ3_Y9GDLlpDynsDXaZ?#_6ELq#~q&C8Lv|QfP z>^1qGal_r)3^mPO)OG83-+D^f@nm&P$*3(w7;_xys)e z_nF&OzJu;^CO4DO?~F&{OV-PirWiy(0L3J!b?GNbv7DmH(4k Q^_kke`ZvKdMIDEK18O;GLI3~& literal 2496 zcmds2K}%y-7(Ka(j!qTcWKtVSD9`$yNg?2ak)jaF!=|Os?zAwa(8i1kQc-c-%%-H` zlq@7Kt(Gdd2xjcKD1FXUXJ+9{r3{16jr|AihPJe{yFzJR&v%n(#%;T5$m1sWyWhFz zJNJC|WfDMg69{jd^sX!+=6%{(TzL;^6ozc;i8=sMcGyIRwTw9UNj?mY{XL}oZ(;d& zVfuHF@OKgSzmuG@jY`qRVZp}9x^2aRpa-~UU2tJ3ggmbCnCmguW3IC_77lCw?S%{qK1~% z?{M9&ZX;933MvpQ;CYP3`@C{z(fR{szX9iV6>(+qeA*FWT^WTVJ8~)55WR%I#6%-< z8>H3_wN6v(6t%V*Jcr2hsnkpiCE7GFidu6w_+2o*{EG9rl--DZqGJet7GCwb{yu8d zbxi)IaAYl(aI}7;H}0}7sj;qox=P(!cqbaTA4%QRxxEpKwD6gbJ+*I$#TqQuU^Z%S z8XU3>4zAv74?E$d$WPjlgA_Bc%Fl0)b}ue53Ohr zR9=UoXMXCxuJN+M`vnu*GI~p$MH#J;4nx-}{&U%PZHOd?Lpj#`TC-;2y)D=!n_gg_ zGS)3I(YeVfs?g2cQ0WSLf*+MTvNd;})8L!*Y#UVToM<8IWN)pnemq(%w)W`$lNFWytc zZE7kU5-uVtzuw1(_Z2P)eorp=MSZ{9yIRE>xv5y5_Y3Ds8^l{i7d;rKSE+@gv3Qnc z!SXmyuP1odl%=-j-NPK-C}Ksl%ScWc8HI<8I=70l>}BL}K{VwWhk5bVH8M|~n{j=g zH8mCt9Y4!Ii|5#n&G-m?r4W|Br`~JAwf{=}j`FuqRJqeTYOUVuwRzEB_j)}hz0Tec zAJnELcHW2V{R5A^>#=t|_O8d?5~FP!yd>Rey8)%&t`^|WRLqr&^$+420$q`5d}&diNZm^0J)h4BTxm(S*>re`P2 v$=St)8}oD1vy0qlV18ll+Q9Y6nW=%Pi2-{;_Wu8VLJ0BuU)ERn7hwMYYeY29 diff --git a/src/linux/helpers/loader-mips64.bin b/src/linux/helpers/loader-mips64.bin index 7fda4fb51963bad32abc3732f10d24d854edb451..d4de2697251924adb7b706e6ce86036f895883ac 100644 GIT binary patch literal 2816 zcmeHIO>9(E6#m|wX?c#Q4{YirRCpnCaZGGxGz4Ew7cV6tT~0KblDHVkFjGv^Hibn= zT)bc*vp`w_mByb;IzSUQGkat4f33(^B0=skzer-Q| zg{)St#94dBT!8JogSgsR?ha)S^P5sZhU@QuqZz+qZX(y)1;l1nx=UZ095Hy|bYh8^ z`olAcwW5P;t&dN7+=kR;XJA{f79Wx|oFz7zcO2OgP-Q*ZhyNQN&)1_PM z3+ASk-r)A<1M{8bgr6qX%(s?Zo27PFuu8rUmOp`uprXwk%QLsFthr&i=DL+M*DO%) zHFCV4ays4uTrK@1d;w1*aJUlt3T?itoeE-zp9kV@M%L4lVE-8797lY0CpAEMJ-UAH0j#s?8*KdsfiM|J5)ZO~s9?OCK25feWW13qT}{dD%>oM4mqVvpYY z=QR^vRg6_wghd@5R`x>ij9sE$$`@SrfSi@OrhVwN#+cM?bblc$yk1y8&K~bU`6XAd zu?J5kmI{luThE23Q*E3fj9Kcj-e*2umYKx3C#PmN@~HeMA3^N|<4hvk;{SR2_Zt4+ zYw_>3_-||YZkIUpy+>lyG(44$=7v|##rb+p2eCQI#T)1+HcR<;>-osLf>rI__qa{Y zmTn*`Iw+TXWOlJm>YR{`Z(0AU${u3v=TcjZVK2F6?eKA6C21Rp3C`b*geHP@4qs|z4(?~QuEJ1om>8YBmaqYqG_9|qN@>O zd(;DL9=ZE?ov(iw<=!WH{=&1YHP%IkZ@w-bQN58C)TXY-`p>mJ$Zgc7IT)T`->@E~ zCV1ypi79o^5tv`ZAMxY`4{hnFF9y*jEA3GqD$!2*rSA#5->@rm@_V!-{)=x@%NSx! zEt#inf?evM%6wAKSLdmr%<9IO`ZtL0`EIA2eH52_&h7g$gE+T0g`7LAm(^zO6r{(@ zJ%woBE}N literal 2496 zcmeHIO=w(I6#nMUB$;RzuW?9c(ZxmHrL$<5hgO+N7SCxdS%zAr?$UHRVvCq(SnOE;=JHSDE{Eih35L5H!o?#jY}5>F7M{t zbI&>7cfWIHFb!ZXKd?0qT{#bIReKv-@8B$glBqmY>p;PzHL{gD3iL$nzTL35QLwk5 z?bpcLn{ezJvi1Q=2pR_AWrK~tV7qDDoVESHb8e3hS0NSAC*s|RcO%}7csJtR^ft1! z`|#UyfP!a~mYl!$DqkDt4ASbw%L5MV&q@VFet!WR!#aZ6GDhq&h9x$?XSwnSHx2D2 zFituwm|6?Nv}^k0S>vn?0j?~UXIpS256=rw4%{+QN6Sz-A6Zvf8`17?FSu!UXz!s- zU*VouW|O)D*7S$?Ur})AdW^NL*?aH@4+H7N?E!LCB3B;s50S3|`O>weov&iPHkzij z!h0Kz2~GmJ0R4C~UyK^PjmmHEs}4M+OUCU+szyKIL}Alp4%*MJx9IQVfSd~_tZ67> zUh-QazaIH5kYAnDIm|kLtPmq(Dd8rG^HI#RZ-4#l3-ZrcYGm)M9-qNJmDusy--EY{ ztG4v#cf^vHT8T?bt(C{{S64c5lA1G;hxiM`A8UlQPqad0gj>cfCHOM?YN|?JIU^pA zSPI0Vi6x(4@mY%|$B%Yvp(fW@LzDG15QJvyW9st(p4e}&Y42jg-oZNG;RfpnS@)3Z zjTt##&+Sq%}ik7HQ$Bl@`7Kt|5` z6rPV3dmBnq$K=KQ6rm_O%W{{GY?Q7JsADATO zx@i3RGCQor`6L)(dY6ZjcbA}nx_`aJwXQ-dGbBuc7gAzi7$1A_)fSlkQd;M zg=O+$_@?Yb+WW-^%n{=l#eq2gOBmw)l=3$_HH>J9r;eTayG?wnN8pQ&I@*wY#78bN z2Y0@2kq>I^QrrblE2X`>Fuh%vAg}CSM!XdW3`5^UC6SKkvwUR&V z6IZ!W>#NQO-2l+lwf*>zpB>XV{y;>Kglcez>}fDRSAJ_+^M^N_=?sf%vngP7dzb zmrvN2k0SO~#NLY7Tb%1_oI5wzt08-}$zE;9OiKE7Tkr^0>T6Qo_1XV;CDs*0hxWEY zgY$oX@9g{_`5oUbiN@monTMD2ZMDk0vDO4nthb$u?N>3ptM|UL4HdN)U5YiIRn%=| zrDt7oOAis#yH^cyZt%Avu`$oz_9bNH{lriFng101O7vr&*lz_}(kIOr zkIZD|qprI;J+gB##sT}D;1GZLdu!s{==cRaGpWZX&sFsJ*y!}RY5opAvscF^D*D32 z%=FyUq4<0zwc|CX_Au7inw9nr+-K7O%OuXtOFK_01 z@B6;r@B24Es-8Z%wQ zwA^&j1n_!+Lag(%S|+J?ffAO;?TJm6#BZ_%^g_h$Z1xB)6xrURxQD>KFxsU=$pJ zK{)7w860>KBo!|6*&8QmB%RJl3 z`@&1kcH;WSaxVJs3ophzhbnm$;zsoRg;&g&J1CU?j^7}2QC^peAO0ARPLjtm@#^^s zBcoy$)#wQMZNNn2a+iAWxCdO_l;ycI|Hx3DA=VMbBf~8FTwPqmXC=-d@4-_bo~%OQ z6&GQPwJJ-w*-U;9}&RU&4_F7S1iZ z%$mGU>~FMqS?vSTPr_H{xx6wq)3?qoLHi+6sCc-NMu(qIYBy`&+GftH3EpkaZpBQk z&swwWH_ju*Uh1u;>tlvJb(8&9;moP92P>R~6@|Pzb}@)XkZRyU#p*@T9p@` zl81@BHR;WZM(hW8vp0p*<6Lf)Ii6q(72{cbnfRE)X_?il^;`c3g=$BQ=bB%r`;fUk z5pUq!=G=K=w&^QS_avrctQBX*aE=+yB*U3xIKyOq8O|od*Ias@wC*?9Y=+Dao@!=CQnf{{Q}8i9o10_?$Z1$1iokzuU|Iq&Db2dE-ye C*P6}% literal 2496 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 diff --git a/src/linux/helpers/loader-x86.bin b/src/linux/helpers/loader-x86.bin index 9e8fb3f356ab490fe2051a05e093e4792446c104..6f95a4699900e07e9969c33a063c265c4b826a2c 100644 GIT binary patch delta 296 zcmX@jbB%{HwDW268;%#OY#TXeGcu-3UdpJ=b-Xp_|Ns9CKrs0RqXB2kzyJSR4)C`g znk>jv>#E-T`#*n6FB1bp^BbPv?$#8b(*FS(%|`^9&;4&c|G)Y4|Cgm8S&*_cAfvk% zq@?p#=ZzP${(?Zmn6M!mv8(b&zFnbHN1I3^s z9U?&SmsOK9nH`kEkc72C!k%COkR9CtGC)hbC!c0^7vTT%|3Ao0=Rrv&yp$C z-5Uc^HZ=lB^7pj@J;(^QQuEN{MJz##YbJkXQDE$zEXKNmF=6t4Rz*g;$q!kx0Ftzk A2LJ#7 delta 284 zcmcb{bDD=UwDW268;%#hST}OcW@L<A{DvpEyEO%<@Cy+6oZO% za010&mQOBZc2EjN5>@~SyMYBjc60~G04)ige3{vuSNzZa|3DW3UEK1IVX_uWrWAkQ zL_x@0KS}% A!T6rSaWZWTLd0ZAcsG($qwgq@_C^}%LuGMYQdn2_vlHQI`_3j%Hy0<(lB z1R=AVa68#2WBdnvF(k$}Em558f;6Tzf;DRUVqfgyRyLMMuokZ0nZ=5Il85Eackcb} zcfNDZ-BOR;;o?tTXl<=i6kd3@+t}tF)3_IVP5#W1mbk(aOx#U!@kgAC?^rL-Uw5>N zN({TjH7+(yag)hpjJrG1Y2u+3e!Nt<{z<4(XZWwbafY2{XG$!=#hN9qE`}7Ga&KuV z?lp9E(}yticEcBr-oguxe&j1tKca|fy{SAWrOf$Gn}-hywbg7^rri-WV6#a;xuyUSGMSaCc1zGis~R# zwUy;wpx|i=wowoUAy~dy!yi*WO$4|tHi51I!d^AD zjrEs|b#}@Udo0Nk$vB_8RmM^7^=XDYkW5bh5wPKZwn)T{%sUBHomeYOEW1)V^)lYe zyi9|;E1jcgB2)YV1Ao{hyVd*$*eI&l@`{&%6H6f_tb9os%D5(044+OtKM2Z^kOHF$ zww^}Uq!o6-Y*o-PVJ?gF4Ubl;Zn2*H8zHiY^wszMoS!|0<7#dPe4@(SE0VdFCH~>M zjS9dZdJT(vvSKw^xfOtxI}<^^6Hzt)VW86X-svrOq4Jd34u~&cmyHsRh$1gM=b&Q@ z-xi<`dlO@}_%&D$S>ojgN|Jq&d+t1lFn#SbeR*Hay#NOJEf>X&9;`52kY;(4VauC| zfIz-Civu8t-bb*B-2uTP_Xz3yzzHT#MLh&e{G6yf3(ZUPMj+#D=%fNy9w!i^PT-AwFsS-8nljr;zVf`x z9>Stq#^0(uB;!*qVs+Wy81>o%u!b7ey&J5l9t5An9CebG4)BX=U=>{Is7GR2xpXIZ zJAy||BPaJ&EdUSbxK|sKgRjLbMDn?18Y;uDJ)P`L)>leq`p>2ZG-p&xkM^gu^zhm7 z{_*q5zwqF2CZ!EzobmHxqr(|T=@}azJ=ZfakRI$AO!ai7K=^oI6WHGoTAv;@A z2%0jxlH;%sD*gq&2)^ipX!8(<-8Sh z`Mz^6;6Knf^l?m4pz+S2c^5pPftMYVKZ&A^o1!4_UJ>xGJm9xt6zaDf?Xr@kX#5fI zj)lJnSXqYrjv0Jm4;6yI4S54cyf@s=oOYaLOq9SS2XY`RjKIM?Kg&XW1edq?ZYCwTwY@g^OI3aIJ z-`$N}I0_z_pzb?qB2m4d^7ojRO$P_vYchD;iyuons?3iOJ-ZV^3^KC z6h*-%ee!T==M(w{@2qA@H6gsyy1=WZPen7XluobAj|#7>$K8GD93|~6yo24&#C;}S zt-nvX*rk}4JxA{|+iNi;seH`?$h^iloOY^2-5W85rf=l*lO*3sMZ6b3Ov)ueHdo?L z2EVz@UZ%oeFhlz4M}Ez(rZ_tl;s*&jSJT4Xl)}9(>2G_B$~F_d{p&nVR+A)`>2)dPGQl=+F^fXpwF%$c6*j^HhMj7Z^Cb?=8~7K6<% z(xr$V4XS|MkR*OSdTAJ~liv%UkEgj~x@Wh-r-S->f$Sk1T)M&wWctyQB;F8bTgBPQ zbLDBxnbXR1lT%uG=G?;M!bRmjb7^LFN}HZ_7B0@u&CEK=(EP&O`Ju{mxinOo8ag(m F{0rV)Fns_3 diff --git a/src/linux/helpers/meson.build b/src/linux/helpers/meson.build index 184f448d7..66cc4f8ff 100644 --- a/src/linux/helpers/meson.build +++ b/src/linux/helpers/meson.build @@ -24,6 +24,10 @@ if host_machine.cpu_family() == 'arm' extra_flags += '-marm' endif +if host_machine.cpu_family() == 'x86' + extra_flags += '-fno-stack-protector' +endif + common_objcopy_flags = [ '-O', 'binary', '-S', @@ -53,9 +57,10 @@ extra_link_args = [ '-Wl,-T,' + helper_lds, ] if host_machine.cpu_family() == 'arm' - extra_link_args += run_command('../../../../build/frida-android-arm-clang', '-print-libgcc-file-name', check: false).stdout().strip() + extra_link_args += run_command(cc, '-print-libgcc-file-name', check: false).stdout().strip() endif + bootstrapper_sources = [ 'bootstrapper.c', 'elf-parser.c', diff --git a/src/linux/helpers/nolibc-tweaks.patch b/src/linux/helpers/nolibc-tweaks.patch index ef0925b1b..016044218 100644 --- a/src/linux/helpers/nolibc-tweaks.patch +++ b/src/linux/helpers/nolibc-tweaks.patch @@ -303,26 +303,3 @@ index 78473d34e..f17e6f598 100644 + mode = va_arg(args, /* mode_t */ unsigned int); va_end(args); } - -diff --git a/tools/include/nolibc/types.h b/tools/include/nolibc/types.h -index fbbc0e68c..d003c368d 100644 ---- a/tools/include/nolibc/types.h -+++ b/tools/include/nolibc/types.h -@@ -92,6 +92,8 @@ - #define FD_SETIDXMASK (8 * sizeof(unsigned long)) - #define FD_SETBITMASK (8 * sizeof(unsigned long)-1) - -+#ifndef __mips__ -+ - /* for select() */ - typedef struct { - unsigned long fds[(FD_SETSIZE + FD_SETBITMASK) / FD_SETIDXMASK]; -@@ -131,6 +133,8 @@ typedef struct { - __set->fds[__idx] = 0; \ - } while (0) - -+#endif -+ - /* for poll() */ - #define POLLIN 0x0001 - #define POLLPRI 0x0002 diff --git a/src/linux/helpers/rebuild.sh b/src/linux/helpers/rebuild.sh new file mode 100755 index 000000000..b16635d6d --- /dev/null +++ b/src/linux/helpers/rebuild.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +# This script is responsible for building Frida helpers for various Linux +# architectures. It can build helpers for a single specified architecture on the +# local machine, or for supported architectures in a container. The script uses +# Docker containers to ensure consistent build environments for each +# architecture. +# +# Note that the expectation is that when running the build for a specific +# architecture that it be run from inside the relevant container. This script is +# used by CI. + +set -euo pipefail + +CURRENT_FILE="${BASH_SOURCE[0]}" +HELPERS_DIR="$(cd "$(dirname "$CURRENT_FILE")" && pwd)" +FRIDA_CORE_DIR="$(cd "$HELPERS_DIR/../../.." && pwd)" +RELENG_DIR="$FRIDA_CORE_DIR/releng" +BUILD_DIR="$FRIDA_CORE_DIR/build" +RELATIVE_TO_FRIDA_CORE_DIR=$(realpath --relative-to="$FRIDA_CORE_DIR" "$CURRENT_FILE") + +TMP_MESON_DIR=$(mktemp -d) +trap 'rm -rf "$TMP_MESON_DIR"' EXIT + +CONTAINER_REGISTRY="${CONTAINER_REGISTRY:-ghcr.io/frida}" + +main () { + if [ "$#" -eq 0 ]; then + build_arches_in_container + return + fi + + if [ "$#" -gt 1 ]; then + echo >&2 "Error: Too many arguments" + usage + fi + + build_arch "$1" +} + +usage () { + echo >&2 "Usage: $0 []" + echo >&2 "If no arch is specified, then all helpers will be built in the container." + exit 1 +} + +setup_meson () { + ln -s "$RELENG_DIR/meson/meson.py" "$TMP_MESON_DIR/meson" + chmod +x "$TMP_MESON_DIR/meson" + export PATH="$TMP_MESON_DIR:$PATH" +} + +ARCHS=( + x86 + x86_64 + arm + arm64 + mips + mipsel + mips64 + mips64el +) + +build_arch () { + ARCH=$1 + if [ -z "$ARCH" ]; then + usage + fi + if ! printf '%s\n' "${ARCHS[@]}" | grep -qx "$ARCH"; then + echo >&2 "Error: Invalid architecture '$ARCH'" + echo >&2 "Supported architectures: ${ARCHS[*]}" + exit 1 + fi + + if [[ "$ARCH" == arm* ]]; then + export FRIDA_HOST=android-$ARCH + else + export FRIDA_HOST=linux-$ARCH + fi + + EXTRA_FLAGS=() + if [ "$FRIDA_HOST" == "linux-x86" ]; then + EXTRA_FLAGS+=("--build=linux-x86") + export CC="gcc -m32" CXX="g++ -m32" STRIP="strip" + fi + + setup_meson + + cd "$FRIDA_CORE_DIR" + + rm -rf "$BUILD_DIR" + # Note that $XTOOLS_HOST is set by the container. + ./configure --host="$XTOOLS_HOST" "${EXTRA_FLAGS[@]}" + make -C src/linux/helpers +} + +build_arches_in_container () { + for ARCH in "${ARCHS[@]}"; do + docker run -u "$(id -u):$(id -g)" \ + -w /frida-core \ + -i -t \ + -v "$FRIDA_CORE_DIR:/frida-core" \ + "$CONTAINER_REGISTRY/core-linux-helpers-$ARCH:latest" \ + "/frida-core/$RELATIVE_TO_FRIDA_CORE_DIR" "$ARCH" + done +} + +main "$@"