c - 如何从应用程序中执行调试器命令
问题描述
在运行时,我试图恢复未导出但可通过共享库的符号表获得的函数的地址,因此对调试器可见。
我正在研究需要捕获某些事件并操纵运行时的高级调试过程。其中一项操作需要知道在其他地方用作密钥的私有函数的地址(只是地址)。
我当前的解决方案在构建时使用nm
. 此解决方案限制了调试功能,因为它依赖于共享库的特定构建。
优选的解决方案应该能够在运行时恢复地址。
我希望从应用程序中与附加的调试器进行通信,但很难找到任何 API。
我有哪些选择?
解决方案
在运行时,我试图恢复未导出但可通过共享库的符号表获得的函数的地址,因此对调试器可见。
调试器不是神奇的独角兽。如果符号表对调试器可用,那么它也对您的应用程序可用。
我需要使用调试器按名称恢复其地址...
那是完全错误的做法。
不要使用调试器,而是读取应用程序中库的符号表,并使用获得的信息来调用目标函数。
读取 ELF 符号表非常容易。例子。如果您不在 ELF 平台上,那么获取等效信息应该不会太难。
推荐阅读
- barcode - Acumatica 和 code128 条码无法扫描
- android-studio - 如何在 Android Studio 上摆脱这个鼠标指针并获得可编辑的指针
- java - 如何在不将每行自动换行为 76 个字符的情况下提取 Java 电子邮件正文
- java - 多次调用 onCreateOptionsMenu
- python - 如何使用 Django ORM 将 JSON 文件中的数据加载到 MySQL 实例中?
- javascript - 如何根据jQuery中的复选框选择添加和删除表
- javascript - React-spring 转换抛出 126:20-30 'react-spring' 不包含名为 'Transition' 的导出
- r - 如何在 R 中的列上提取子字符串,删除 % 字符后的所有内容
- docker - 使用 Docker 删除软件包后如何安装 debian jessie-backports 软件包?
- c# - 如何修复 .NET Core 控制台应用程序中缺少的 .deps.json 依赖项清单