Commit 4afb3f87 authored by Brenden Blanco's avatar Brenden Blanco

Merge pull request #210 from rlane/ebpf-method

add ebpf method to retrieve bytecode
parents 3daeee7d 1ec985d0
......@@ -392,6 +392,17 @@ class BPF(object):
return fn
def dump_func(self, func_name):
"""
Return the eBPF bytecodes for the specified function as a string
"""
if lib.bpf_function_start(self.module, func_name.encode("ascii")) == None:
raise Exception("Unknown program %s" % func_name)
start, = lib.bpf_function_start(self.module, func_name.encode("ascii")),
size, = lib.bpf_function_size(self.module, func_name.encode("ascii")),
return ct.string_at(start, size)
str2ctype = {
u"_Bool": ct.c_bool,
u"char": ct.c_char,
......
......@@ -5,3 +5,4 @@ configure_file(wrapper.sh.in "${CMAKE_CURRENT_BINARY_DIR}/wrapper.sh" @ONLY)
set(TEST_WRAPPER ${CMAKE_CURRENT_BINARY_DIR}/wrapper.sh)
add_subdirectory(cc)
add_subdirectory(python)
# Copyright (c) PLUMgrid, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")
add_test(NAME py_test_dump_func WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${TEST_WRAPPER} py_dump_func simple ${CMAKE_CURRENT_SOURCE_DIR}/test_dump_func.py)
#!/usr/bin/env python
# Copyright (c) PLUMgrid, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")
# test program for the 'dump_func' method
from bcc import BPF
from unittest import main, TestCase
class TestDumpFunc(TestCase):
def test_return(self):
b = BPF(text="""
int entry(void)
{
return 1;
}""")
self.assertEquals(
"\xb7\x00\x00\x00\x01\x00\x00\x00" +
"\x95\x00\x00\x00\x00\x00\x00\x00",
b.dump_func("entry"))
if __name__ == "__main__":
main()
......@@ -39,6 +39,10 @@ function sudo_run() {
sudo bash -c "PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd $1 $2"
return $?
}
function simple_run() {
PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd $1 $2
return $?
}
case $kind in
namespace)
......@@ -47,6 +51,9 @@ case $kind in
sudo)
sudo_run $@
;;
simple)
simple_run $@
;;
*)
echo "Invalid kind $kind"
exit 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment