6 ms·
that's what mapping an -rwx page at 0x0 does, and as a result it segfaults, which is an access violation.
by richo 12y ago
that's what mapping an -rwx page at 0x0 does, and as a result it segfaults, which is an access violation.
- dbaupp 12y agoThere is some subtlety about dereferencing a null pointer. Many languages (C, C++, Rust) state that *NULL is undefined behaviour, that is, the compiler can assume that it never happens and optimises based on this. This can lead to a "misoptimised" program that doesn't actually segfault when the source suggests it should. http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html http://blog.llvm.org/2011/05/what-every-c-programmer-should-...
- jjnoakes 12y agoNo, you are wrong. First, mapping that page doesn't cause all null pointer dereferences to segfault. And second, the language doesn't require a segfault. In fact, it explicitly permits the implementation to do whatever it likes. That is the difference between safe and unsafe. It is in the language definition.
- richo 12y ago"The language" ? C doesn't define behaviour of a null deref, but most compilers map a -rwx page there to ensure that attempts to deref fault. In what circumstance do they not?
- dbaupp 12y agoThe compilers don't map pages there, the operating system does. The problem is the compiler will optimise assuming that a null deref never happens, so you can have source that looks like it should crash due to a null deref, but the compiler has "misoptimised" it to have very different behaviour. http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html http://blog.llvm.org/2011/05/what-every-c-programmer-should-...
- dbaupp 12y ago"the language"... which one? AIUI, Go doesn't state that null dereferences are undefined behaviour, but rather that they are guaranteed to panic.
- Dewie 12y ago...I'm talking about throwing an exception or something similar, not getting a segfault. Like in Java.