diff --git a/CHANGELOG.md b/CHANGELOG.md index 70886d3..aaac6c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable (user-facing) changes to this project will be documented in this fil The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.1.5] - 2024-05-28 + +### Fixed +- Potential unaligned load, as reported by UBSAN. + + ## [2.1.4] - 2024-03-27 ### Changed diff --git a/bindings/pybddisasm/setup.py b/bindings/pybddisasm/setup.py index 1eb8e6e..0b0497d 100644 --- a/bindings/pybddisasm/setup.py +++ b/bindings/pybddisasm/setup.py @@ -12,7 +12,7 @@ from codecs import open VERSION = (0, 3, 0) -LIBRARY_VERSION = (2, 1, 4) +LIBRARY_VERSION = (2, 1, 5) DIR_INCLUDE = '../../inc' here = os.path.abspath(os.path.dirname(__file__)) diff --git a/inc/bddisasm_version.h b/inc/bddisasm_version.h index 5ac7221..2a13a2e 100644 --- a/inc/bddisasm_version.h +++ b/inc/bddisasm_version.h @@ -7,7 +7,7 @@ #define DISASM_VERSION_MAJOR 2 #define DISASM_VERSION_MINOR 1 -#define DISASM_VERSION_REVISION 4 +#define DISASM_VERSION_REVISION 5 #define SHEMU_VERSION_MAJOR DISASM_VERSION_MAJOR #define SHEMU_VERSION_MINOR DISASM_VERSION_MINOR diff --git a/inc/bdx86_core.h b/inc/bdx86_core.h index 706d2e7..af33244 100644 --- a/inc/bdx86_core.h +++ b/inc/bdx86_core.h @@ -373,17 +373,11 @@ typedef ND_UINT32 ND_REG_SIZE; // Sets the sign of the sz bytes long value x. #define ND_SET_SIGN(sz, x) ND_SIGN_EX(sz, x) -#ifdef BIG_ENDIAN -#define ND_FETCH_64(b) ((ND_UINT64)ND_FETCH_32((char *)b) | ((ND_UINT64)ND_FETCH_32((char *)b + 4) << 32)) -#define ND_FETCH_32(b) ((ND_UINT32)ND_FETCH_16((char *)b) | ((ND_UINT32)ND_FETCH_16((char *)b + 2) << 16)) -#define ND_FETCH_16(b) ((((char *)b)[0]) | (((char *)b)[1] << 8)) -#define ND_FETCH_8(b) (*((char *)b)) -#else -#define ND_FETCH_64(b) (*((ND_UINT64 *)(b))) -#define ND_FETCH_32(b) (*((ND_UINT32 *)(b))) -#define ND_FETCH_16(b) (*((ND_UINT16 *)(b))) -#define ND_FETCH_8(b) (*((ND_UINT8 *)(b))) -#endif +#define ND_FETCH_64(b) (((ND_UINT64)ND_FETCH_32((ND_UINT8 *)b)) | (((ND_UINT64)ND_FETCH_32((ND_UINT8 *)b + 4) << 32))) +#define ND_FETCH_32(b) (((ND_UINT32)ND_FETCH_16((ND_UINT8 *)b)) | (((ND_UINT32)ND_FETCH_16((ND_UINT8 *)b + 2) << 16))) +#define ND_FETCH_16(b) (((ND_UINT16)ND_FETCH_8 ((ND_UINT8 *)b)) | (((ND_UINT16)ND_FETCH_8 ((ND_UINT8 *)b + 1) << 8))) +#define ND_FETCH_8(b) (*((ND_UINT8 *)b)) + //