在使用 openssl 的应用程序上运行 dr.memory 时,我得到以下列表:
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 生成的调用堆栈吗?