我正在对特定芯片的8051架构程序进行逆向工程。反汇编自然不包含任何函数名称,并且寄存器名称最少。例如,地址 0xb3 是一个名为“RTC2CON”的特定寄存器。由于寄存器名称特定于芯片,因此反汇编不会显示它,而是“0xb3”。
我的问题是如何设置规则,将反汇编中出现的某个字符串(在本例中为 0xb3)替换为另一个字符串(寄存器名称 RTC2CON)。
另一个例子
| 0x0000393b c2e9 clr 0xe8.1 ;
| 0x0000393d 1239dd lcall TRANSMIT_r7_AND_GET_r7=RF_STATUS
| 0x00003940 e4 clr a
| 0x00003941 ff mov r7, a
| 0x00003942 1239dd lcall TRANSMIT_r7_AND_GET_r7=RF_STATUS
| 0x00003945 8f36 mov 0x36, r7 ;
| 0x00003947 d2e9 setb 0xe8.1 ;
\ 0x00003949 22 ret
更清楚地说,芯片是nRF24LE1。在此示例中,对地址 0xe8 (RFCON) 上的特殊功能寄存器进行了操作,首先清除第 1 位,然后在某些操作后再次置位。
我想要的只是反汇编将显示 RFCON.1 而不是 0xe8.1
我遇到的另一个问题是使用 ljmp 而不是 lcall 调用的函数。当我尝试用 afn 重命名该函数时,新名称改为使用 ljmp 调用它的函数。被调用的函数有 58 个 XREFS,因此在调用时看到它的名称而不是地址对我来说非常重要。(函数默认名称是它们的 fcn.address)。