地址处的不可读指令

Unreadable instruction at address

我在某个场景中遇到分段错误(它是 C 代码,调用 DEC VAX FMS(表单管理系统)以获取 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
  1. 尝试过 tracei(用于机器指令)、dump(dump 给出了这么多输出,我无法理解它)等,但似乎没有任何帮助。

    (dbx) &0x53484950/X
    expected variable, found "1397246288"

我习惯于在“哪里”获取堆栈跟踪并从那里继续。这是我以前没有遇到过的,看来我也不太擅长dbx。感谢您至少帮助解决导致问题的代码行。

一旦遇到段错误,就无法继续,因此 n 命令不会执行任何操作。到那时,你所能做的就是检查堆栈和变量,除非你有源代码并可以重新编译它,否则那将毫无意义。

事实上,如果没有源代码,我不确定您如何继续修复程序。即使您可以“反编译”该程序,或者至少反汇编该程序,但在尝试修补二进制文件以修复它时出错的风险实际上是 100%。

对不起。鉴于您工作的限制,我认为这个问题是无法解决的。没有gdb或valgind等工具,很难发现问题,没有源代码,一旦发现问题就很难修复。