* fix mem_unmap and query for Ruby bindings
* ruby bindings: fix issues with GC freeing callbacks while we still have references to them
* ruby bindings: add test for garbage collection of hooks
* ruby bindings: let the VM garbage collect hooks properly this time
* ruby bindings: update garbage collection test to make sure Proc is garbage collected after Uc is collected
* ruby bindings: fix m_uc_hook_add to return the ruby VALUE with proper memory management instead of making another one with bad memory management
* ruby bindings: fix cb_hook_intr signature
* add architecture query
* ruby bindings: only treat certain x86 registers specially if we're actually on x86
* only treat certain x86 registers specially if we're actually on x86 (uc_reg_read and uc_reg_write)
* ruby bindings: read and write ARM64's 128-bit NEON registers
* arm64eb: arm64 big endian also using little endian instructions.
* arm64: using another example that depends on endians.
example:
1. store a word: 0x12345678
2. load a byte:
* little endian : 0x78
* big endian : 0x12
* uc_reg_read & uc_reg_write now support ARM64 Neon registers
* Do not reuse uc_x86_xmm for uc_arm64_neon128. TODO: refactor both classes to use the same parent.
Writing / reading to model specific registers should be as easy as
calling a function, it's a bit stupid to write shell code and run them
just to write/read to a MSR, and even worse, you need more than just a
shellcode to read...
So, add a special register ID called UC_X86_REG_MSR, which should be
passed to uc_reg_write()/uc_reg_read() as the register ID, and then a
data structure which is uc_x86_msr (12 bytes), as the value (always), where:
Byte Value Size
0 MSR ID 4
4 MSR val 8
* Changed some MSVC compatibility defines based on MSVC version.
* Added prebuild_script.bat to remove leftover configure generated files before building.
Also added project files and MSVC copies of configure generated files for all supported CPUs.