0) "hello.c" int main(int argc, char **argv) { open("/dev/tty0", O_RDONLY, 0); open("/dev/tty0", O_WRONLY, 0); write(1, "Hello, world!\n", 14); return 0; } int write(int fd, const void *buf, size_t nbytes) { write_args_t args; args.fd = fd; args.buf = (void *) buf; args.nbytes = nbytes; return trap(SYS_write, (uint32_t) &args); } 1) Explain these command objdump --disassemble --section=".text" user/usr/bin/hello.exec > w objdump --disassemble --section=".text" -S user/usr/bin/hello.exec > x objdump --headers user/usr/bin/hello.exec > y xxd -g 1 user/usr/bin/hello.exec > z 2) Kernel 3 FAQ - Handle the first page fault: http://merlot.usc.edu/cs402-f20/projects/kernel/faq.html#q_debug_ptmap 3) Kernel 3 FAQ - Meaning of pagenum http://merlot.usc.edu/cs402-f20/projects/kernel/faq.html#q_pagenum 4) Kernel 3 FAQ - What is the right number of page faults I should get when I run "/usr/bin/hello"? http://merlot.usc.edu/cs402-f20/projects/kernel/faq.html#q_hello_handle_pagefaults 5) Useful GDB commands: add-symbol-file user/usr/bin/hello.exec 0x08048094 b __libc_static_entry b main b *0x12345678 layout asm layout next si info registers kernel info vmmap_mapping_info curproc->p_vmmap Not-so-useful GDB command: kernel info pt_mapping_info curproc->p_pagedir