在分析核心转储时,是否可以在GDB中加载任意共享库文件?

时间:2016-12-05 21:20:07

标签: c++ debugging gdb reverse-engineering

作为一种爱好,我对我最喜欢的游戏的服务器可执行文件进行逆向工程。在这个例子中,我试图调试(和补丁修复)服务器崩溃。我已经在内存中绘制了几个结构,并希望在GDB中干净地检查它们。我的意图是做以下事情(用地址替换ebp,当然,这只是一个说明问题的例子):

print *(UsefulDebug::Structures::StructureOne*)(ebp+8)

在我的共享库的调试信息中定义了UsefulDebug::Structures::StructureOne

我尝试重命名我的“调试库”以匹配崩溃时加载的一个共享库对象。这样做时,我发现GDB可以自动完成我的调试信息,但是ptype和任何打印在第二个命名空间后都无法识别它。这是一个实际的例子:

(gdb) ptype NWNXLib
type = namespace NWNXLib
(gdb) ptype NWNXLib::API
type = namespace NWNXLib::API
(gdb) ptype NWNXLib::API::CExoString
No type "API" within class or namespace "NWNXLib"

鉴于以下文件......

server_executable: This is the executable which crashed.

core: This is the core dump produced when the above executable crashed.

useful_shared_library.so: This is an arbitrary file which contains debug information for all of the structures present in the program.

在调试核心转储时,我是否可以使用 useful_shared_library.so 中的调试信息,即使该库与崩溃无关并且当时未加载?可能还有一种更简单的方法来完成我想要做的事情。如果有,我很乐意听到它!

谢谢!

0 个答案:

没有答案