0

我使用 Code Composer Studio 3.3 加载了一个程序,通过反汇编窗口我们可以看到如下内容:

00000C5C  00000000            NOP 
00000C60  DD7ABCD2            .word         0xdd7abcd2       

第一列表示PC,第二列表示对应内存中的32位数据,最后一列表示CCS3.3这样认为的指令。

显然在第二行,CCS3.3不认为这是一条指令。但是它可以翻译成正确的指令,所以我想知道CCS3.3如何决定是将32位数据翻译成指令还是不是?谢谢你。

4

1 回答 1

0

每个值都是指令和变量。用作变量的值理论上也可以用作指令(但这很少没有意义,当它做错时,会导致异常)。

  • 找出哪个值用作指令的一种方法是仿真。运行程序时可以到达的地方是指令。
  • 另一种找出方法是分析哪些部分是可写和可读的,哪些是可执行的(但也有一些部分两者都是)。但是,如果某个部分不可执行,则不确定该值是否永远不会用作代码,因为程序(或包含的 DLL)可以将该值复制到可执行部分并跳转到那里。
  • 第三种方法是分析哪些值会导致异常(例如,由于操作码无效)。但这并不总是很清楚,因为这些值也可以用作变量。
于 2015-05-12T15:34:21.033 回答