fPddlmZddlZddlmZGddej ZGddej ZGd d ejZ Gd d ej Z Gd dZ ddZ dZdZGddZddZy))linesepN)get_table_type_namecDeZdZdejfdej fgZy) OffsetUnionoffsetuoffsetN)__name__ __module__ __qualname__ctc_uint16c_int16_fields_2/usr/lib/python3/dist-packages/bcc/disassembler.pyrrsBKK(8RZZ*@AHrrcDeZdZdejfdej fgZy)ImmUnionimmuimmN)r r r r c_uint32c_int32rrrrrrs%rzz':;HrrcveZdZdZdZdej fdej dfdej dfdefdefgZ y ) BPFInstrFieldsr)oiopcodedstsrcrrN) r r r _pack_ _anonymous_r c_uint8rrrrrrrrsJ FK2::& A& A&k"h !Hrrc8eZdZdZdZdefdejfgZy)BPFInstrrsinstrN) r r r r"r#rr c_uint64rrrrr&r&"s$ FKn%'=>Hrr&cXeZdZdZgdZiddddddd d d d d ddddddddddddddddddd d!d"d#d$id%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFidGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhididjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddiddddddddddddddddddddddddddddddddddddddddddddddd ZedZy) BPFDecoderr)]unspecmap_lookup_elemmap_update_elemmap_delete_elem probe_read ktime_get_ns trace_printkget_prandom_u32get_smp_processor_idskb_store_bytesl3_csum_replacel4_csum_replace tail_callclone_redirectget_current_pid_tgidget_current_uid_gidget_current_commget_cgroup_classid skb_vlan_push skb_vlan_popskb_get_tunnel_keyskb_set_tunnel_keyperf_event_readredirectget_route_realmperf_event_outputskb_load_bytes get_stackid csum_diffskb_get_tunnel_optskb_set_tunnel_optskb_change_protoskb_change_typeskb_under_cgroupget_hash_recalcget_current_taskprobe_write_usercurrent_task_under_cgroupskb_change_tail skb_pull_data csum_updateset_hash_invalidget_numa_node_idskb_change_headxdp_adjust_headprobe_read_strget_socket_cookieget_socket_uidset_hash setsockoptskb_adjust_room redirect_mapsk_redirect_mapsock_map_updatexdp_adjust_metaperf_event_read_valueperf_prog_read_value getsockoptoverride_returnsock_ops_cb_flags_setmsg_redirect_mapmsg_apply_bytesmsg_cork_bytes msg_pull_databindxdp_adjust_tailskb_get_xfrm_state get_stackskb_load_bytes_relative fib_lookupsock_hash_updatemsg_redirect_hashsk_redirect_hashlwt_push_encaplwt_seg6_store_byteslwt_seg6_adjust_srhlwt_seg6_action rc_repeat rc_keydown skb_cgroup_idget_current_cgroup_idget_local_storagesk_select_reuseportskb_ancestor_cgroup_id sk_lookup_tcp sk_lookup_udp sk_release map_push_elem map_pop_elem map_peek_elem msg_push_data msg_pop_datarc_pointer_relr )add32dstimm+= )jajoffN@)addrrr )rdstsrcrr)rrrr)sub32r-=r)jeq jdstimmoff==r)subrrr)lddwrNr)rrrr)r jdstsrcoffrr)rrrrr)ldabswldabsNr$)mul32r*=r%)jgtr>r')mulrrr()ldabshrN,)rrrr-)rrrr/)rrrr0)ldabsbrN4)div32r/=r5)jger>=r7)divrrr8)ldabsdwrNr<)rrrr=)rrrr?)rrrrr)ldindwldindNrD)or32 dstimm_bw|=rE)jsetr&rG)orrrrH)ldindhrNrL)rrrrM)rrrrO)rrrrP)ldindbrNrT)and32r&=rU)jner!=rW)andrrrX)ldinddwrNr\)rrrr])rrrr_)rrrra)ldxw ldstsrcoffNrb)stw sdstoffimmNrc)stxw sdstoffsrcNrd)lsh32r<<=re)jsgtrs>rg)lshrrri)ldxhrNrj)sthrNrk)stxhrNrl)rrrrm)rrrro)rrrrq)ldxbrNrr)stbrNrs)stxbrNrt)rsh32r>>=ru)jsgers>=rw)rshrrry)ldxdwrNrz)stdwrNr{)stxdwrNr|)rrrr})rrr r)r rrr)neg32r~r)callrNr)negrrr)mod32r%=r)exitr Nr)modrrr)rrrr)r"rrr)xor32r^=r)jltr>=r)jsltrsz%+drrz r%d %s r%drzif r%d %s %d goto pc%s <%d>rzif r%d %s r%d goto pc%s <%d>rz1lddw requires two instructions to be disassembledzr%d = rz r%d = 0x%xrzr0 = *(uz*)skb[]rzr0 = *(u%d*)skb[r%d %s]rzr%d = *(u%d*)(r%d %s)rz*(u%d*)(r%d %s) = %drz*(u%d*)(r%d %s) = r%drzr%d = %s (u%s)r%drz %s bpf_%s#%dz%s  r zunknown opcode classzunknown <0x%x>) opcodesrrrrr r! ExceptionBPF_PSEUDO_CALL bpf_helpers IndexErrorKeyError) clsrww1nameopclassopbitsrs rdecodezBPFDecoder.decodesF 1&)kk!((&; #D'2t(""aeeR%77::K'$r166'::A==F"%!(();)*QXX)9);;<=>>H$#quub!%%&88!;;L(4r1556;qxx6H67!((lQ6F8HHIJKKL(5AEE7<7I78188|a7G9IIJKLLF":#$WXX66Q;2aeeQUU^CQFFvv|quu,#quucl2A55G#04aee=?`@@=A`@B=C`@D=E`@F=G`@H=I`@J=K`@L=M`@N=O`@P=Q`@R=S`@T=U`@V=W`@X=Y`@Z=[`@\=]`@^=_`@`=a`@b=c`@d=e`@f=g`@h=i`@j=k`@l=m`@n=o`@p=q`@r=s`@t=u`@v=w`@x=y`@z={`@|=}`@~=`@@=A`@B=C`@D=E`@F=G`@H=I`@J=K`@L=M`@N=O`@P=Q`@R=S`@T=U`@V=W`@X=Y`@Z=[`@\=]`@^=_`@`=a`@b=c`@d=e`@f=g`@h=i`@j>===========A`@GDG1G1rr+c^tj|||\}}d||j|fz|fS)Nz%4d: (%02x) %s)r+r\r)rw0rWr(skips rdisassemble_instructionra3s5##Ar2.KE4 q"))U3 3T 99rctjtj|tjt}t t |dz }|d}d}g}td|D]:}||}|r |dz}d|z}nt|dz ||\}}|j||}<t|dz |d\}}|j||S)Nrrrz%4d: (64-bit upper word)) r castc_char_pPOINTERr&intlenrangeraappend) bpfstrptrnuminstrr_r` instr_listrrW instr_strs rdisassemble_strro7s ''"++f%rzz('; 6J J&)ooj&AO"33FK4 JH$$VX5D5?&ABl*Fz) 1 *29 *sDD C/G?>G?ct|tjxst|tj}|j |}|r3d|zg}||j |d|z }|j d|z|Sd|d|dg}|S)Nz %s {z rz } %s;rrNr)rr rrrrri)rUrrrr type_namers rprint_map_ctypezMapDecoder.print_map_ctypes#Ar||41#Arxx0 OOA& !Y/0I ))!Vh)G GI   Y*5 6  (1*=>Ircd|||j|jfzg}||j|jd|z }||j|jd|z }t j |S)Nz-Layout of BPF map %s (type %s, FD %d, ID %d):keyrvalue)map_fdmap_idrKeyLeafrrq)rUmap_namemap_objmap_typerrs r decode_mapzMapDecoder.decode_maps~DHPHOHOHXXY  S((eh(OO S((w(RR ||I&&r)FN)rrFF)r r r r c_boolc_charc_wcharc_ubytec_shortc_ushortc_intc_uintc_longc_ulong c_longlong c_ulonglongc_floatc_double c_longdoublec_int64r)rr]rrrrrrrrruruOs9H9G9Z9-9X 9 / 9 6 9O9G9-9 9!69X9i9.9a9 q"6!9I$  ,,11f  ''rrucJt|}tj||||S)Nr)rrur)rrrr map_type_names rrrs&'1M  7MH UUr)Nr)osrctypesr tablerrrrrrr&r+rarorsrurrrrrs&B"((B