From 17822926620e4bc902fc2f67fe2207849d788f0a Mon Sep 17 00:00:00 2001 From: Akash Mozumdar Date: Wed, 28 Apr 2021 20:58:54 -0600 Subject: [PATCH] fix wrong output for non utf text --- texthook/texthook.cc | 2 +- texthook/util/ithsys/ithsys.cc | 56 ++++++++++++---------------------- texthook/util/ithsys/ithsys.h | 4 --- 3 files changed, 21 insertions(+), 41 deletions(-) diff --git a/texthook/texthook.cc b/texthook/texthook.cc index d91d410..53cecd3 100644 --- a/texthook/texthook.cc +++ b/texthook/texthook.cc @@ -307,7 +307,7 @@ int TextHook::GetLength(uintptr_t base, uintptr_t in) else { if (hp.type & BIG_ENDIAN) in >>= 8; - len = LeadByteTable[in & 0xff]; //Slightly faster than IsDBCSLeadByte + len = !!IsDBCSLeadByteEx(hp.codepage, in & 0xff) + 1; } break; } diff --git a/texthook/util/ithsys/ithsys.cc b/texthook/util/ithsys/ithsys.cc index 8a2cdf2..d3b9fe9 100644 --- a/texthook/util/ithsys/ithsys.cc +++ b/texthook/util/ithsys/ithsys.cc @@ -9,32 +9,6 @@ #include "ithsys/ithsys.h" #include "const.h" -// - Global variables - - -// jichi 6/12/2015: https://en.wikipedia.org/wiki/Shift_JIS -// Leading table for SHIFT-JIS encoding -BYTE LeadByteTable[0x100] = { - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1 -}; - -// - API functions - - -extern "C" { /** * Return the address of the first matched pattern. * Artikash 7/14/2018: changed implementation, hopefully it behaves the same @@ -70,15 +44,25 @@ DWORD IthGetMemoryRange(LPCVOID mem, DWORD *base, DWORD *size) return info.Protect > PAGE_NOACCESS; } -inline DWORD GetHash(LPSTR str) -{ - DWORD hash = 0; - //for (; *str; str++) - while (*str) - hash = ((hash >> 7) | (hash << 25)) + *str++; - return hash; -} - -} // extern "C" +// jichi 6/12/2015: https://en.wikipedia.org/wiki/Shift_JIS +// Leading table for SHIFT-JIS encoding +BYTE LeadByteTable[0x100] = { + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1 +}; // EOF \ No newline at end of file diff --git a/texthook/util/ithsys/ithsys.h b/texthook/util/ithsys/ithsys.h index d4fc50f..3d29300 100644 --- a/texthook/util/ithsys/ithsys.h +++ b/texthook/util/ithsys/ithsys.h @@ -10,14 +10,10 @@ //#include "ntdll/ntdll.h" #include -// jichi 8/24/2013: Why extern "C"? Any specific reason to use C instead of C++ naming? -extern "C" { - // jichi 10/1/2013: Return 0 if failed. So, it is ambiguous if the search pattern starts at 0 DWORD SearchPattern(DWORD base, DWORD base_length, LPCVOID search, DWORD search_length); // KMP DWORD IthGetMemoryRange(LPCVOID mem, DWORD *base, DWORD *size); -} // extern "C" extern BYTE LeadByteTable[];