diff --git a/Makefile b/Makefile index 1faca35..9184610 100644 --- a/Makefile +++ b/Makefile @@ -45,12 +45,14 @@ ucore: biscuit: ifneq ($(shell uname)-$(arch), Darwin-riscv64) +ifneq ($(shell uname)-$(arch), Darwin-aarch64) @echo Building biscuit programs @mkdir -p biscuit/build @cd biscuit/build && cmake $(cmake_build_args) .. && make @rm -rf $(out_dir)/biscuit && mkdir -p $(out_dir)/biscuit @cp $(biscuit_bin_path)/* $(out_dir)/biscuit endif +endif $(busybox): ifeq ($(arch), x86_64) diff --git a/rust/src/bin/fantastic_text.rs b/rust/src/bin/fantastic_text.rs index b1403ed..d0770ad 100644 --- a/rust/src/bin/fantastic_text.rs +++ b/rust/src/bin/fantastic_text.rs @@ -32,7 +32,8 @@ pub fn main() { color_text!("!", 97), ); - let text = "reguler \x1b[4munderline\x1b[24m \x1b[7mreverse\x1b[27m \x1b[9mstrikethrough\x1b[29m"; + let text = + "reguler \x1b[4munderline\x1b[24m \x1b[7mreverse\x1b[27m \x1b[9mstrikethrough\x1b[29m"; println!("\x1b[47m{}\x1b[0m", color_text!(text, 30)); for i in 31..38 { println!("{}", color_text!(text, i)); diff --git a/rust/src/bin/float.rs b/rust/src/bin/float.rs index 578ba8e..a07c97d 100644 --- a/rust/src/bin/float.rs +++ b/rust/src/bin/float.rs @@ -7,7 +7,6 @@ extern crate rcore_user; use rcore_user::syscall::*; - // IMPORTANT: Must define main() like this #[no_mangle] pub fn main() { diff --git a/rust/src/bin/raw_socket.rs b/rust/src/bin/raw_socket.rs index a38790c..fdb7350 100644 --- a/rust/src/bin/raw_socket.rs +++ b/rust/src/bin/raw_socket.rs @@ -4,9 +4,9 @@ #[macro_use] extern crate rcore_user; -use rcore_user::syscall::{sys_socket, sys_read, sys_setsockopt, sys_sendto, sys_ioctl}; -use core::mem::size_of; use core::default::Default; +use core::mem::size_of; +use rcore_user::syscall::{sys_ioctl, sys_read, sys_sendto, sys_setsockopt, sys_socket}; #[repr(C)] #[derive(Default)] @@ -33,7 +33,7 @@ pub struct SockAddrIn { #[derive(Default)] pub struct SockAddrHa { sha_family: u16, - sha_data: [u8; 14] + sha_data: [u8; 14], } #[repr(C)] @@ -43,7 +43,7 @@ struct ArpReq { arp_ha: SockAddrHa, arp_flags: u32, arp_netmask: SockAddrIn, - arp_dev: [u8; 16] + arp_dev: [u8; 16], } // IMPORTANT: Must define main() like this @@ -59,12 +59,18 @@ pub unsafe fn main() { let mut buffer = [0u8; 2048]; // set header included let included = 1u32; - sys_setsockopt(capture_fd as usize, 0, 3, &included as *const u32 as usize, 4); + sys_setsockopt( + capture_fd as usize, + 0, + 3, + &included as *const u32 as usize, + 4, + ); let mut addr: SockAddrLl = Default::default(); // packet addr.sll_family = 17; - const ETHER_HEADER_LEN: usize = 6+6+2; + const ETHER_HEADER_LEN: usize = 6 + 6 + 2; // ethertype 0x0800 ipv4 buffer[12] = 0x08; buffer[13] = 0x00; @@ -74,33 +80,45 @@ pub unsafe fn main() { arp.arp_pa.sin_family = 2; arp.arp_dev[0..9].copy_from_slice(&[b'e', b'n', b'p', b'0', b's', b'4', b'f', b'0', 0]); loop { - let len = sys_read(capture_fd as usize, buffer.as_mut_ptr().add(ETHER_HEADER_LEN), buffer.len()) as usize; + let len = sys_read( + capture_fd as usize, + buffer.as_mut_ptr().add(ETHER_HEADER_LEN), + buffer.len(), + ) as usize; println!("Got packet of len {}", len); if ETHER_HEADER_LEN + len > 20 && buffer[ETHER_HEADER_LEN + 0] == 0x45 { // ipv4 let ttl = buffer[ETHER_HEADER_LEN + 8]; if ttl > 1 { println!("ttl {}", ttl); - let dst_ip = (buffer[ETHER_HEADER_LEN + 19] as u32) << 24 | - (buffer[ETHER_HEADER_LEN + 18] as u32) << 16 | - (buffer[ETHER_HEADER_LEN + 17] as u32) << 8 | - (buffer[ETHER_HEADER_LEN + 16] as u32); + let dst_ip = (buffer[ETHER_HEADER_LEN + 19] as u32) << 24 + | (buffer[ETHER_HEADER_LEN + 18] as u32) << 16 + | (buffer[ETHER_HEADER_LEN + 17] as u32) << 8 + | (buffer[ETHER_HEADER_LEN + 16] as u32); println!("dst_ip {:#X}", dst_ip); arp.arp_pa.sin_addr = dst_ip; // SIOCGARP sys_ioctl(arp_fd as usize, 0x8954, &arp as *const ArpReq as usize); println!("dst_mac {:X?}", &arp.arp_ha.sha_data[0..6]); - + // fill src and dst mac // todo: get mac from if instead of hard coding buffer[0..6].copy_from_slice(&[0, 0x16, 0x31, 0xFF, 0xA4, 0x9F]); buffer[6..12].copy_from_slice(&arp.arp_ha.sha_data[0..6]); buffer[ETHER_HEADER_LEN + 8] = ttl - 1; - let checksum = (buffer[ETHER_HEADER_LEN + 10] as u16) << 8 | (buffer[ETHER_HEADER_LEN + 11] as u16); - buffer[ETHER_HEADER_LEN + 10] = ((checksum + 1) >> 8) as u8; - buffer[ETHER_HEADER_LEN + 11] = checksum as u8; + let checksum = (buffer[ETHER_HEADER_LEN + 10] as u16) << 8 + | (buffer[ETHER_HEADER_LEN + 11] as u16); + buffer[ETHER_HEADER_LEN + 10] = ((checksum + 0x0100) >> 8) as u8; + buffer[ETHER_HEADER_LEN + 11] = (checksum + 0x0100) as u8; addr.sll_ifindex = 0; - sys_sendto(packet as usize, buffer.as_ptr(), len as usize + ETHER_HEADER_LEN, 0, &addr as *const SockAddrLl as usize, size_of::()); + sys_sendto( + packet as usize, + buffer.as_ptr(), + len as usize + ETHER_HEADER_LEN, + 0, + &addr as *const SockAddrLl as usize, + size_of::(), + ); } } } diff --git a/rust/src/bin/sh.rs b/rust/src/bin/sh.rs index c7932d4..d271209 100644 --- a/rust/src/bin/sh.rs +++ b/rust/src/bin/sh.rs @@ -10,7 +10,7 @@ use alloc::vec::Vec; use core::ptr; use rcore_user::io::get_line; -use rcore_user::syscall::{sys_exec, sys_vfork, sys_wait, sys_getcwd, sys_chdir, sys_access}; +use rcore_user::syscall::{sys_access, sys_chdir, sys_exec, sys_getcwd, sys_vfork, sys_wait}; // IMPORTANT: Must define main() like this #[no_mangle] diff --git a/rust/src/bin/tls.rs b/rust/src/bin/tls.rs index a963704..631bf0f 100644 --- a/rust/src/bin/tls.rs +++ b/rust/src/bin/tls.rs @@ -5,7 +5,7 @@ #[macro_use] extern crate rcore_user; -use rcore_user::syscall::{sys_arch_prctl, sys_vfork, sys_getpid, sys_sleep}; +use rcore_user::syscall::{sys_arch_prctl, sys_getpid, sys_sleep, sys_vfork}; fn set_tls(tls: usize, pid: usize) { #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]