c - 地址处的不可读指令
问题描述
我在某个场景中遇到分段错误(它是带有 DEC VAX FMS(表单管理系统)调用的 C 代码,用于在 CRT 屏幕上获取某个字段 - 相当旧的遗留代码)。我在 AIX 机器上,并且只安装了 dbx。GDB、valgrind 等不可用。
这是我尝试调试时得到的结果:
Unreadable instruction at address 0x53484950
我不知道如何从这里开始。
我尝试了几件事:
1.
(dbx) up
not that many levels
(dbx) down
not that many levels
(dbx) n
where
Segmentation fault in . at 0x53484950 ($t1)
0x53484950 (???) Unreadable instruction at address 0x53484950
尝试过 tracei(用于机器指令)、转储(转储提供了如此多的输出,我无法理解它)等,但似乎没有任何帮助。
(dbx) &0x53484950/X
expected variable, found "1397246288"
我习惯于在“哪里”获取堆栈跟踪并从那里继续。这是我以前没有遇到过的,看来我也不太擅长 dbx。任何帮助至少找到导致麻烦的代码行表示赞赏。
解决方案
一旦遇到段错误,就无法继续,所以 n 命令不会做任何事情。那时,您所能做的就是检查堆栈和变量,除非您拥有源代码并且可以重新编译它,否则这将毫无意义。
事实上,如果没有源代码,我不确定您如何继续修复程序。即使您可以“反编译”程序,或者至少反汇编程序,在尝试修补二进制文件以修复它时出错的风险几乎是 100%。
对不起。鉴于您正在工作的限制,我认为这个问题是无法解决的。如果没有 gdb 或 valgind 之类的工具,将很难找到问题,而没有源代码,一旦发现问题,将很难修复。
推荐阅读
- javascript - 我无法在 socketcluster 的 socket.on 中访问我的变量
- c# - 如何使用rest api为现在服务史诗或用户故事中的引用字段设置值
- node.js - 如何在 test-cafe 中使用数据发出 post 请求?
- c# - Web API 使用 C# 向 SQL Server 发布身份验证
- angular - 如何使用 Angular js 在 ionic 4 中显示图像
- angular - angular/cdk 简单拖动不适用于带有 ngFor 的 div
- flutter - 如何仅从 DateTime.now() 中提取时间;
- c - 迭代 C 中的列表时,我是否看到优化错误?
- kubernetes - Metacontroller:如何停止调用同步钩子和资源生成
- reactjs - 组件卸载是否保证为所有后代调用 componentWillUnmount?