ZHCU820Y September 2004 – June 2021
本节中的示例说明名称还原过程。
该示例显示了示例 C++ 程序。在该示例中,所有函数的链接名称都已改编;也就是说,它们的签名信息已编码到它们的名称中。
class banana {
public:
int calories(void);
banana();
~banana();
};
int calories_in_a_banana(void)
{
banana x;
return x.calories();
}
编译器输出的汇编代码结果如下。
PUSH.W r10
SUB.W #2,SP
MOV.W SP,r12
CALL #_ZN6bananaC1Ev
MOV.W SP,r12
CALL #_ZN6banana8caloriesEv
MOV.W r12,r10
MOV.W SP,r12
CALL #_ZN6bananaD1Ev
MOV.W r10,r12
ADD.W #2,SP
POP r10
RET
执行 C++ 名称还原器将会还原它认为已改编的所有名称。输入:
dem430 calories_in_a_banana.asm
运行 C++ 名称还原器后的结果如下所示。_ZN6bananaC1Ev、_ZN6banana8caloriesEv 和 _ZN6bananaD1Ev 中的链接名称已还原。
calories_in_a_banana():
;* ----------------------------------------------------------------------------*
PUSH.W r10
SUB.W #2,SP
MOV.W SP,r12
CALL #banana::banana()
MOV.W SP,r12
CALL #banana::calories()
MOV.W r12,r10
MOV.W SP,r12
CALL #banana::~banana()
MOV.W r10,r12
ADD.W #2,SP
POP r10
RET