From 42d97813df59bb88c933492d0b7c36376f47bc36 Mon Sep 17 00:00:00 2001 From: LukeFZ <17146677+LukeFZ@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:49:00 +0100 Subject: [PATCH] Fix idaclang support for 8.3 --- .../Outputs/CppScaffolding.cs | 18 +++++++++++++----- .../Outputs/ScriptResources/Targets/IDA.py | 4 +++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Il2CppInspector.Common/Outputs/CppScaffolding.cs b/Il2CppInspector.Common/Outputs/CppScaffolding.cs index 43bcb2a..f7795f0 100644 --- a/Il2CppInspector.Common/Outputs/CppScaffolding.cs +++ b/Il2CppInspector.Common/Outputs/CppScaffolding.cs @@ -46,7 +46,7 @@ namespace Il2CppInspector.Outputs // Write primitive type definitions for when we're not including other headers writeCode($""" - #if defined(_GHIDRA_) || defined(_IDA_) || defined(_IDACLANG_) + #if defined(_GHIDRA_) || defined(_IDA_) typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; @@ -56,13 +56,21 @@ namespace Il2CppInspector.Outputs typedef __int32 int32_t; typedef __int64 int64_t; #endif - + + #ifdef _IDACLANG_ + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long uint64_t; + typedef char int8_t; + typedef short int16_t; + typedef int int32_t; + typedef long int64_t; + #endif + #if defined(_GHIDRA_) || defined(_IDACLANG_) typedef int{_model.Package.BinaryImage.Bits}_t intptr_t; typedef uint{_model.Package.BinaryImage.Bits}_t uintptr_t; - #endif - - #if defined(_GHIDRA_) typedef uint{_model.Package.BinaryImage.Bits}_t size_t; #endif diff --git a/Il2CppInspector.Common/Outputs/ScriptResources/Targets/IDA.py b/Il2CppInspector.Common/Outputs/ScriptResources/Targets/IDA.py index d7d228b..09452df 100644 --- a/Il2CppInspector.Common/Outputs/ScriptResources/Targets/IDA.py +++ b/Il2CppInspector.Common/Outputs/ScriptResources/Targets/IDA.py @@ -48,7 +48,7 @@ def script_prologue(status): if IDACLANG_AVAILABLE: header_path = os.path.join(get_script_directory(), "%TYPE_HEADER_RELATIVE_PATH%") - ida_srclang.set_parser_argv("clang", "-x c++ -D_IDACLANG_=1") + ida_srclang.set_parser_argv("clang", "-target x86_64-pc-linux -x c++ -D_IDACLANG_=1") # -target required for 8.3+ ida_srclang.parse_decls_with_parser("clang", None, header_path, True) else: original_macros = ida_typeinf.get_c_macros() @@ -70,6 +70,8 @@ def script_epilogue(status): global cached_genflags ida_ida.inf_set_genflags(cached_genflags) +# Utility methods + def set_name(addr, name): ida_name.set_name(addr, name, ida_name.SN_NOWARN | ida_name.SN_NOCHECK | ida_name.SN_FORCE)