在我的应用程序上运行dr.memory时,我得到了以下列表,该应用程序使用openssl:
Error #476: UNADDRESSABLE ACCESS beyond heap bounds: reading 4 byte(s)
KERNELBASE.dll!FlsGetValue
??:0
MSVCR110.dll!_crtFlsGetValue
??:0
MSVCR110.dll!wcsnlen
??:0
LIBEAY32.dll!ERR_unload_strings
??:0
LIBEAY32.dll!ERR_load_ERR_strings
??:0
LIBEAY32.dll!ERR_load_crypto_strings
??:0
SSLEAY32.dll!SSL_load_error_strings
??:0
现在,有一些奇怪的事情:
SSL_load_error_strings
不参数。我无法看到它是如何产生内存错误的,因为openSSL是一个广泛使用的库(除非我的进程因堆损坏而已经死亡,当然还有什么)SSL_load_error_strings
会调用ERR_unload_strings
?我快速浏览了一下这个来源,但似乎并没有,尽管可能会在某个地方发生一些内联,以至于难以发现,我猜。wcsnlen
会调用_crtFlsGetValue
?我无法想象它需要光纤本地存储(我无法看到它会如何,因为我还没有使用光纤......)基本上,我的问题是,我可以信任dr.memory生成的callstack吗?