123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #![allow(clippy::unreadable_literal)]
- extern crate elf;
- use std::path::PathBuf;
- extern crate rbpf;
- use rbpf::helpers;
- fn main() {
- let filename = "examples/load_elf__block_a_port.elf";
- let path = PathBuf::from(filename);
- let file = match elf::File::open_path(path) {
- Ok(f) => f,
- Err(e) => panic!("Error: {:?}", e),
- };
- let text_scn = match file.get_section(".classifier") {
- Some(s) => s,
- None => panic!("Failed to look up .classifier section"),
- };
- let prog = &text_scn.data;
- let packet1 = &mut [
- 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x08,
- 0x00,
- 0x45, 0x00, 0x00, 0x3b,
- 0xa6, 0xab, 0x40, 0x00, 0x40, 0x06, 0x96, 0x0f, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00,
- 0x01,
-
- 0x99, 0x99, 0xc6, 0xcc,
- 0xd1, 0xe5, 0xc4, 0x9d, 0xd4, 0x30, 0xb5, 0xd2, 0x80, 0x18, 0x01, 0x56, 0xfe, 0x2f, 0x00,
- 0x00, 0x01, 0x01, 0x08, 0x0a,
- 0x00, 0x23, 0x75, 0x89, 0x00, 0x23, 0x63, 0x2d, 0x71, 0x64, 0x66, 0x73, 0x64, 0x66, 0x0au8,
- ];
- let packet2 = &mut [
- 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x08,
- 0x00,
- 0x45, 0x00, 0x00, 0x3b,
- 0xa6, 0xab, 0x40, 0x00, 0x40, 0x06, 0x96, 0x0f, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00,
- 0x01,
-
- 0x98, 0x76, 0xc6, 0xcc,
- 0xd1, 0xe5, 0xc4, 0x9d, 0xd4, 0x30, 0xb5, 0xd2, 0x80, 0x18, 0x01, 0x56, 0xfe, 0x2f, 0x00,
- 0x00, 0x01, 0x01, 0x08, 0x0a,
- 0x00, 0x23, 0x75, 0x89, 0x00, 0x23, 0x63, 0x2d, 0x71, 0x64, 0x66, 0x73, 0x64, 0x66, 0x0au8,
- ];
- let mut vm = rbpf::EbpfVmFixedMbuff::new(Some(prog), 0x40, 0x50).unwrap();
- vm.register_helper(helpers::BPF_TRACE_PRINTK_IDX, helpers::bpf_trace_printf)
- .unwrap();
- let res = vm.execute_program(packet1).unwrap();
- println!("Packet #1, program returned: {res:?} ({res:#x})");
- assert_eq!(res, 0xffffffff);
- #[cfg(not(windows))]
- {
- vm.jit_compile().unwrap();
- let res = unsafe { vm.execute_program_jit(packet2).unwrap() };
- println!("Packet #2, program returned: {res:?} ({res:#x})");
- assert_eq!(res, 0);
- }
- #[cfg(windows)]
- {
- let res = vm.execute_program(packet2).unwrap();
- println!("Packet #2, program returned: {:?} ({:#x})", res, res);
- assert_eq!(res, 0);
- }
- }
|