Previously, we'd round the address to unprotect to the nearest page but
keep the length the same. This meant that if we were hooking a function
that started just before the end of a page, it would need both pages to
be unprotected but we'd only unprotect the first one.
Allocate memory for storing the trampoline code via mmap() with MAP_32BIT flag
to make sure that it stays withing 2GB range.
Also, add missing calls to subhook_free() in the C test program (C++ calls it
implicitly already via destructor).
* Replace SUBHOOK_BITS equality comparisons with SUBHOOK_X86_64 macro
definition checks (less error-prone)
* Improve comments in subhook_disasm() and remove unused variable
(address_size)
* Update copyright year across all files