【发布时间】:2020-09-05 10:41:55
【问题描述】:
我尝试调试以下设置。我无法使用搜索找到任何东西,所以我希望这里的人能够指导我如何执行以下操作:
我有一个正在执行的二进制文件 (./binary),还有一个在程序集级别 (./libc_patched) 操作的本地版本的 glibc。这个补丁库现在包含对自己编写的共享库 (./shared.so) 的动态调用。
所以,我现在所做的类似于:
$ LD_LIBRARY_PATH="./path/to/libc_patched:/path/to/shared" LD_PRELOAD="/path/to/libasan.so path/to/libc_patched" ./binary
现在,我的问题是 libasan 抛出了一个错误,表明 malloc 出了问题(不是 malloc()-ed 地址上的 free,或者 malloc-free 对不匹配。
二进制文件是使用标志“-g”、“-fsanitize=address”编译的,libasan 链接到二进制文件。我的 glibC 版本是 2.28,我正在全新安装 Debian10。
我现在尝试做的事情:我想使用 gdb 调试错误发生的位置。但是我找不到使用全局 libc(未打补丁)启动 gdb 的方法,而是使用打补丁的 libc 执行“待调试的二进制文件”。所以基本上如下:
$ gdb "LD_LIBRARY_PATH="./path/to/libc_patched:/path/to/shared" LD_PRELOAD="/path/to/libasan.so path/to/libc_patched" ./binary"
这样的事情可能吗?由于我修补的 libc 中有错误,我无法可靠地使用它启动 gdb。感谢您的任何提示!
【问题讨论】: