2 ms·
You don't need to worry about null check removal optimizations unless you do this: int main() { char *p; p = mmap(0, 65536, PROT_READ | PROT_WR
by jart 6y ago
You don't need to worry about null check removal optimizations unless you do this:
int main() {
char *p;
p = mmap(0, 65536, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
// ...
return __builtin_popcountl((uintptr_t)p);
}
Or you do this:
void ContinueOnError(int sig, siginfo_t *si, ucontext_t *ctx) {
xed_decoded_inst_zero_set_mode(&xedd, XED_MACHINE_MODE_LONG_64);
xed_instruction_length_decode(&xedd, (void *)ctx->uc_mcontext.rip, 15);
ctx->uc_mcontext.rip += xedd.length;
}
int main() {
signal(SIGSEGV, ContinueOnError);
volatile long *x = NULL;
printf("*NULL = %ld\n", *x);
}