From 5b08e2b46824212333d6c9d311c0ef86c01dfdd3 Mon Sep 17 00:00:00 2001 From: simplyWiri Date: Tue, 14 Nov 2023 19:20:19 +1100 Subject: [PATCH] In python environments where components are loaded as shared libraries, capstone sometimes fails to resolve the std-library symbols. This can be worked around by explicitly setting 'CS_OPT_MEM' which can provide custom functions for memory allocation / system functions, with those which they are expected to be defaulted to --- server/TracySourceView.cpp | 7 +++++++ server/TracyWorker.cpp | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/server/TracySourceView.cpp b/server/TracySourceView.cpp index fcab8461..34173e32 100644 --- a/server/TracySourceView.cpp +++ b/server/TracySourceView.cpp @@ -696,6 +696,13 @@ bool SourceView::Disassemble( uint64_t symAddr, const Worker& worker ) uint32_t len; auto code = worker.GetSymbolCode( symAddr, len ); if( !code ) return false; + cs_opt_mem setup; + setup.malloc = &malloc; + setup.calloc = &calloc; + setup.realloc = &realloc; + setup.free = &free; + setup.vsnprintf = &vsnprintf; + cs_option(0, CS_OPT_MEM, reinterpret_cast(&setup)); m_disasmFail = -1; csh handle; cs_err rval = CS_ERR_ARCH; diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 90dac69c..1014962e 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -3825,6 +3825,14 @@ void Worker::AddSymbolCode( uint64_t ptr, const char* data, size_t sz ) m_data.symbolCodeSize += sz; if( m_data.cpuArch == CpuArchUnknown ) return; + cs_opt_mem setup; + setup.malloc = &malloc; + setup.calloc = &calloc; + setup.realloc = &realloc; + setup.free = &free; + setup.vsnprintf = &vsnprintf; + cs_option(0, CS_OPT_MEM, reinterpret_cast(&setup)); + csh handle; cs_err rval = CS_ERR_ARCH; switch( m_data.cpuArch )