1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*387f9dfdSAndroid Build Coastguard Worker# 3*387f9dfdSAndroid Build Coastguard Worker# USAGE: test_uprobe2.py 4*387f9dfdSAndroid Build Coastguard Worker# 5*387f9dfdSAndroid Build Coastguard Worker# Copyright 2020 Facebook, Inc 6*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License") 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF 9*387f9dfdSAndroid Build Coastguard Workerfrom unittest import main, TestCase 10*387f9dfdSAndroid Build Coastguard Workerfrom subprocess import Popen, PIPE 11*387f9dfdSAndroid Build Coastguard Workerfrom tempfile import NamedTemporaryFile 12*387f9dfdSAndroid Build Coastguard Worker 13*387f9dfdSAndroid Build Coastguard Worker 14*387f9dfdSAndroid Build Coastguard Workerclass TestUprobes(TestCase): 15*387f9dfdSAndroid Build Coastguard Worker def setUp(self): 16*387f9dfdSAndroid Build Coastguard Worker lib_text = b""" 17*387f9dfdSAndroid Build Coastguard Worker__attribute__((__visibility__("default"))) void fun() 18*387f9dfdSAndroid Build Coastguard Worker{ 19*387f9dfdSAndroid Build Coastguard Worker} 20*387f9dfdSAndroid Build Coastguard Worker""" 21*387f9dfdSAndroid Build Coastguard Worker self.bpf_text = b""" 22*387f9dfdSAndroid Build Coastguard Workerint trace_fun_call(void *ctx) {{ 23*387f9dfdSAndroid Build Coastguard Worker return 1; 24*387f9dfdSAndroid Build Coastguard Worker}} 25*387f9dfdSAndroid Build Coastguard Worker""" 26*387f9dfdSAndroid Build Coastguard Worker # Compile and run the application 27*387f9dfdSAndroid Build Coastguard Worker self.ftemp = NamedTemporaryFile(delete=False) 28*387f9dfdSAndroid Build Coastguard Worker self.ftemp.close() 29*387f9dfdSAndroid Build Coastguard Worker comp = Popen([ 30*387f9dfdSAndroid Build Coastguard Worker "gcc", 31*387f9dfdSAndroid Build Coastguard Worker "-x", "c", 32*387f9dfdSAndroid Build Coastguard Worker "-shared", 33*387f9dfdSAndroid Build Coastguard Worker "-Wl,-Ttext-segment,0x2000000", 34*387f9dfdSAndroid Build Coastguard Worker "-o", self.ftemp.name, 35*387f9dfdSAndroid Build Coastguard Worker "-" 36*387f9dfdSAndroid Build Coastguard Worker ], stdin=PIPE) 37*387f9dfdSAndroid Build Coastguard Worker comp.stdin.write(lib_text) 38*387f9dfdSAndroid Build Coastguard Worker comp.stdin.close() 39*387f9dfdSAndroid Build Coastguard Worker self.assertEqual(comp.wait(), 0) 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Worker def test_attach1(self): 42*387f9dfdSAndroid Build Coastguard Worker b = BPF(text=self.bpf_text) 43*387f9dfdSAndroid Build Coastguard Worker b.attach_uprobe(name=self.ftemp.name.encode(), sym=b"fun", fn_name=b"trace_fun_call") 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard Worker 46*387f9dfdSAndroid Build Coastguard Workerif __name__ == "__main__": 47*387f9dfdSAndroid Build Coastguard Worker main() 48