From ade5599f351f2dcf3a858bead2186de7db0bf34e Mon Sep 17 00:00:00 2001 From: George Hotz Date: Sat, 21 Mar 2015 13:42:49 -0700 Subject: [PATCH] wrote horrible hack for the PLT problem --- static2/builtin/loader.py | 33 ++++++++++++++++++++++++++++++++- static2/static2.py | 7 +++++++ tests_manual/double_link | Bin 0 -> 7335 bytes tests_manual/double_link.c | 8 ++++++++ tests_manual/double_link_64 | Bin 0 -> 8568 bytes 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100755 tests_manual/double_link create mode 100644 tests_manual/double_link.c create mode 100755 tests_manual/double_link_64 diff --git a/static2/builtin/loader.py b/static2/builtin/loader.py index dba20cc4..726297aa 100644 --- a/static2/builtin/loader.py +++ b/static2/builtin/loader.py @@ -34,10 +34,15 @@ def load_binary(static): if addr != 0 and slen > 0: static.add_memory_chunk(addr, section.data()) + if static.debug >= 1: + print "** found section", section.name, type(section) + + if isinstance(section, RelocationSection): symtable = elf.get_section(section['sh_link']) if symtable.is_null(): continue + for rel in section.iter_relocations(): symbol = symtable.get_symbol(rel['r_info_sym']) if static.debug >= 1: #suppress output for testing @@ -46,13 +51,39 @@ def load_binary(static): static[rel['r_offset']]['name'] = "__"+symbol.name ncount += 1 + # hacks for PLT + # TODO: this is fucking terrible + if section.name == '.rel.plt': + # first symbol is blank + plt_symbols = [] + for rel in section.iter_relocations(): + symbol = symtable.get_symbol(rel['r_info_sym']) + plt_symbols.append(symbol.name) + + # does this change? + PLT_ENTRY_SIZE = 0x10 + + for section in elf.iter_sections(): + if section.name == ".plt": + for name, addr in zip(plt_symbols, + range(section['sh_addr'] + PLT_ENTRY_SIZE, + section['sh_addr'] + PLT_ENTRY_SIZE + PLT_ENTRY_SIZE*len(plt_symbols), + PLT_ENTRY_SIZE)): + static[addr]['name'] = name + print plt_symbols, section['sh_addr'] + + if isinstance(section, SymbolTableSection): for nsym, symbol in enumerate(section.iter_symbols()): + #print symbol['st_info'], symbol.name, hex(symbol['st_value']) if symbol['st_value'] != 0 and symbol.name != "" and symbol['st_info']['type'] == "STT_FUNC": if static.debug >= 1: - print "Symbol",symbol['st_value'], symbol.name + print "Symbol",hex(symbol['st_value']), symbol.name static[symbol['st_value']]['name'] = symbol.name ncount += 1 + + # parse the DynamicSection to get the libraries + #if isinstance(section, DynamicSection): if static.debug >= 1: print "** found %d names" % ncount diff --git a/static2/static2.py b/static2/static2.py index 87244561..5d8735a8 100755 --- a/static2/static2.py +++ b/static2/static2.py @@ -227,6 +227,13 @@ if __name__ == "__main__": for a in sorted(b.addresses): print " ",hex(a),static._insert_names(static[a]['instruction']) + + # print symbols + print "symbols" + names = static.get_tags(['name']) + for addr in names: + print "%8x: %s" % (addr, names[addr]['name']) + #print static['functions'] #print static[main]['instruction'], map(hex, static[main]['crefs']) diff --git a/tests_manual/double_link b/tests_manual/double_link new file mode 100755 index 0000000000000000000000000000000000000000..8a2e90fda250c0523c1fa59569f56456eef3435a GIT binary patch literal 7335 zcmeHMYiwLc6`p-K-M03|NlkDXL$8`m<5u<74sMi(5Z?Gz2gh-pO)6BA+qL)FyL2Dc z?%mcdk!ZT4jTI~`lpg^q5>ORYB1n-yl?4$bZ0abeqM?NRsVa&{kzG>BB@iN%cKN=U zJI=N13i!c4pViqj-<&h&%*;La-nld1Xz%XucsxRrSNH_cT+ttBhU{IXG|j>gcZz!P zd9hBcKoxb(&%*|6paHo8b$+l990iUZ^asfI0F$XhwPXk((3X4*4#{jUsvZ4Gl#fFX z4xv#!m~pB1LR3Ou2_1P3m`pumkQ1;^AU3%Tn5=cZ@7eJ)2zKU>KR|vMIhrvu7{<)i~(07Rra7F>X3V@D%h{$W%$?7eeU4pgDwfY%dDVQ$#`$E1VFq=W-S87nX3Rp~ zii?q4GGh-R04ag#xqRrX zT`}_jDvRd>PnJaaQ9rE98v^)etnvnWWppw7F3igt=siK*>?MgACBd%Eo|Tx<5=^n# z)4)w1>>vMA@#_k{eHLgu8|i{)#tO zJnJbpT~)qh~)1V6qYaKHZTu^BtiE z9hn_NlgZgU{;9e;SG-pJc6;ERy3ovf#n(af6u^Ktb0#@83)UudFC3b5_|yP!C3r@qgWrVh2;0>ItZ@0ur?EZ zV6Kmdu}I9G!uKY>&H7)!Hvr@tz*wq@SHS!p<9g>aU=r7K0xMardkiqwX#Cv%EVv(W zS&l;T+lw9KH#8-dS=k!YW66|d+c`)9jN<=H{C?JrUW1Qm@D=c1T>d&+TelhYdj|>` zyI?ejw}dw}G;J+N*z};P5F(r(OWUylNIR!wLYMFnX5~giIFq%laAZeUgB=@o&~T;@ z9w;R7v7C&HFi|3wPl#}QECYW^+Bv0p#>(ZB*~|i9LYK2rv{!|Zlr6%^OcMXLHH!Zs z0I0I@m>m;gD`5`hVrk1v#L-eC)xwPBaPYLscYtXp_cNd{P}an}BQ=4w-C^V$*Y+W) zQGeR54e*AOH_X*jjz77d03GefJz(Z5<1&ZefZZg@%xM&*4Rd)Pn0ZV)=6pX2ub`}n zwxs=Fov$)i(TI7i{?J}T-LE~r02kQf?3CVBnmqwvi3(i;v!hv z@t*33oq;;q@&49!-$I#vWgOn~2Vl1zWlcKnOQ_IxCt!C1cD>pNl5;}a?|`)(_tNHI z_ajy~L_5+ku(snf<|sO*ztyPMaev_0alEg>?p4^i^F`a8blJ)ME!c5yOOv+y87df; z{$}8B26m^l5u~>JCCWiCy07-*u&twYtkUJ*pv)~X+VPp_{}j6`&@(RW_<KXqh2>*-6=W3XGHouE<|DS6H2X^jvq z2>dxzG=SL$G?h8;_Sb@!)v&9f_6O5X5T8e^R6D`yxudXhz~_s?DgvJ)3ac65^Fm=H z6^PFTg?U9mxF0Bd@`?oWl)4kzzJg?UG-y=#T}=2q`+ zg_+6f{!tjo0^)t5FlSEP4+`_DfSh-vPd>3Q$Maa-fy`r?`J6jfzf*nAo1S^8^tf0g z<{!u>-}K1Cd0fkCnNO5HAy*tMO7daF;l6Hu@nM-G*6}@v&lZi&dd4fNL>Txf7mfhy z^$zt<0L$GpNDo>MLF(~&@PwHF<{AkCc~>RA%Yri=59VWv*dg|3asQ^FJNlw(??IMd z26p#Xx20tJcPSnJd_#N)tmo5%`TQ5Kj!%6R13L5P!F;X<=DsE~6)EIQ?7Y ztrb(i?mhAgE_=qivIt*id&G;$cvZrOfz>3Dz?AhPWMfw;p-;Zpwnk$6CoSnA|Lqp*~?6dD|?K8W(_C&Fb ze|xjvwA1DwxBK%#Z{fSDOf#M}hf~>sSjvps*<9X?6-EUXR3jHzw55E?!8d$I!%uOs)tQn8vdOoIT)RAoH~Bc}HJlSG(EX)5a4BISyT3 z&@?X0wy*R=c6GJF%B7Kq7sBl9-n}EzZSL;q*wY?0qmdom?Q|!P9|rRU+2j9k7BaeJ zb9mUY&5=RVP886)flq$JaAd^P{+hEke+g$59#b!cse9w F{2TkFt&;!% literal 0 HcmV?d00001 diff --git a/tests_manual/double_link.c b/tests_manual/double_link.c new file mode 100644 index 00000000..43b8318c --- /dev/null +++ b/tests_manual/double_link.c @@ -0,0 +1,8 @@ +#include +#include + +int main(int argc) { + printf("hello: %f\n", sin(argc)); +} + + diff --git a/tests_manual/double_link_64 b/tests_manual/double_link_64 new file mode 100755 index 0000000000000000000000000000000000000000..e1e5e23204e32d16b780192fc8c75066808a071e GIT binary patch literal 8568 zcmeHMUu;v?89%o34=9eI(50|}wF0APae+c++R2Y=N#-N*Rh!TkrRs`+fHH z<+4?i_ArTK`F`j7o$vRZ|L5Fu&ySLQyMuv%k`PpnDbo6z4GlR@r6!kYm9e;5qztu2 ztyV2Sn(;Su3P~p>a)DioY-76+WE1}JpaaB%hK`8*ssk&LQbLlHUp*Kcb>z1>1CdHa zbvp5=tSYQk$YCeK(&TdVvlJew#Oq*Q2iuFh#03*6^`pAce}MfB1Py4U8zj^&{j5u} zrO~q5<;0agqF*{Jfo0Ukx(IB!4}RAJ=It?fB#1puq+qhAueZC$+8Wy$+wN32$em986VN}5N3KVCRdx~e z+zH22r;Z~orK6#7K|2aLQl8Mi=h(v)P5a$G%GkX#7z64dNR})VqD%Hf3y_K7Z!QRRr z69auG*N>wBgXYOjl85>pyt3s_=Go6f)T49j!8eb8WUmnieU)o{m7BZZqq^eH=Jag9 z-0@-g8g=w{hZ5gQ3?&XHtl6=8hM%JU_1NH{5Wwgg&*XB2N22S;7Gu1x4n0b1EA27! zpI56>kOngChwMa^--J90`7R`lj|f!@fz~q$f#(mZz+@z_`kvOdR|BmP!f6kigRf0w zz`@^MsdY#v`*GM)o+=#K9q!oMzT~;KDfRfOM>jpZ?&}1T4Tg_;5oL=LkO)U!4)!c< zDIsG{OGCbn^bDnUha*1;Cc_=Cgp%Rt$);p@Zmv_V67P#92cU$0Y3;h4KK%~Xcg`em1p45c5HN4+B zL8N{&0(1}K7n=+nTgv(k_IE$)a?V=KI_*sqRyjho@p($ld6NFmFRBGHITbWW)Xsd9 zAxCe~DBg#Hj*hKcho7-r!m@+qN|qw%g-r*%PEnA(&C%-nIUmE+SF{z*!CYU#hgp|$ zOMZAs)@a7E=j zEaewFkzA#XTd`bRaU`t&keA&n3JMAUze;J>Wzl?*wf$Pp+zEdr5$B8}6bP!$Shd|wY z#qSX^P~*%KAv}@PKW=`U`Ef3wl+()>{T3qROX^Rbg(#RzlzcRZ2RDbPs>;~r8sbER zzs`dTUnE@zNZxMKoa8Ttoaj+?d1UOn`3t;2ZRU>q8WKD4m-@*1Mf1}y|BY)MZ}so^ zj_%FhLH(a0lrA1LZc7Ydwhs8>A!YmGO||z|x3dsd)fr#=7A5;oqkXHA{iP9aQ?hR~ z;)|5*2aWjR+WTuGzNEH(H{w|NWnFe9gw)d7{g4Yre}t8+qm4Kwm8_4hgb*f+ta~mP zewHa&&l+)jVV8Bvl@L<**3Jl@L-L zO6IK#M!xrB9{TzB?uyR5Y*L@lbZiK;=LUSrPv@#2+JDN^FEPg7_TUM|z3029wEucJ zWqyol{Py-d$$sR#2vvul;~Aiv4^Ml}0QajG<>QB+(|(qzc$W#;IH2*{$H{kq zM=*Z8<0J)qxz9X0qVY!Gq`hzl{5AIP9iMLikKXP^y#st%utOQ1aXU*m?esi<@i+j-#e)n(d zfK$D^{x<{n^Rrj`@mUW?i+0H_<0fGgS7>{C4qAP^hX!yZSHHNk>uI@@ouH#&g zWu*(&kz8RUm9x@zp;)p~gu(4W{Wr8TW{|^UFV@OTPPHVqelq?%zeXiMk#VZ=j}?wd?8qiG962uyUp7 zi%4bd={wM!=(7&&-hC)JU=1X?`;z2N-z<)n%DTk=_Fj`t#m*h1vNHOJ>~Ne*O2cs9 zN#1s2=}mS!^W2wO=~BTOPvz5em)d&(S*Ejjt6a*Ug7xB31yPPXK(3&L13Sm{9jV{N YE3Q|)CBfaTv@Kog$}niW($%^B3#0Z|rvLx| literal 0 HcmV?d00001