For the first question, you should take a look at the old kernel book. Some of it is outdated, but it's still a good read.
http://www.tldp.org/LDP/tlk/modules/modules.html
As far as the seccond question,
You *could* raise SIGSEGV with sigaction or something like it, but I cannot think of any particularly useful application for this.