找到了有什么用呢?
看BIN中的子程序调用就知道是做什么的了。
比如说以下的程序片段:
MOV DPTR, #7DC2CBH
LCALL L7221D1
MOV R0, #08H
LCALL L722173
如果找到了7221D1和722173是哪个函数,则程序会变成下面这个样子:
MOV DPTR, #7DC2CBH
LCALL C_LLDXDATA ;从外部数据空间加载一个长整数
MOV R0, #08H
LCALL C_ULSHR ;无符号长整数右移8位
怎么找呢?
会使用UltraEdit之类的16进制查看工具,会解压海尔BIN中的应用程序部分,然后和KEIL的库文件C51L.LIB中的代码片段进行对比,发现代码在BIN中的位置,然后记下来。
海尔的BIN大家都应该有,KEIL的标准库函数文件附在下面了。因为我机器中的版本较低,附件中的版本是由xymf大侠提供的新版库文件,估计与海尔BIN开发组所使用的可接近一些。
目前我找到的函数范围如下,希望更多的函数被发现出来。
(地址范围是程序在SDRAM中的真实地址,把61000解包后的0算成720000即可)
723cd5 723d85 ?C?START
722555 722581 ?C?COPY
?C?SCDIV
?C?CLDPTR
?C?CLDIPTR
?C?CLDOPTR
?C?CLDIOPTR
?C?CILDPR
?C?CILDOPT
721e86 721e99 ?C?CSTPTR
?C?CSTOPTR
721e9a 721eab ?C?IMUL
721eac 721ebc ?C?UIDIV
721f02 721f39 ?C?SIDIV
721f3a 721f4f ?C?IILDX
721f50 721f65 ?C?ILDIX
?C?ILDPT
?C?ILDIPTR
?C?ILDOPTR
?C?ILDIOPTR
?C?IILDPTR
?C?IILDOPTR
721fb6 721fd1 ?C?ISTPTR
?C?ISTOPTR
721fd2 721fde ?C?LADD
721fdf 721fEC ?C?LSUB
721fed 72203B ?C?LMUL
72203C 722109 ?C?ULDIV
?C?SLDIV
72210A 722116 ?C?LAND
722117 722123 ?C?LOR
722124 722130 ?C?LXOR
722131 72213D ?C?LNOT
72213E 72214B ?C?LNEG
72214C 722161 ?C?SLCMP
722162 722172 ?C?ULCMP
722173 722185 ?C?ULSHR
?C?SLSHR
722186 722198 ?C?LSHL
?C?LLDPTR
?C?LLDOPTR
?C?LSTPTR
?C?LSTOPTR
?C?LILDPTR
?C?LILDOPTR
?C?LLDIPTR
?C?LLDIOPTR
7221D1 7221DC ?C?LLDXDATA
?C?LLDPDATA
7221DD 7221ec ?C?LLDCODE
72266E 72267A ?C?LLDIDATA0
7221ed 7221f8 ?C?LLDXDATA0
?C?LLDPDATA0
7221f9 722208 ?C?LLDCODE0
?C?LLDPTR0
?C?LLDOPTR0
?C?LLDIIDATA
722226 72225A ?C?LLDIXDATA
?C?LLDIPDATA
?C?LILDIDATA
72225b 72228f ?C?LILDXDATA
?C?LILDPDATA
72267b 722686 ?C?LSTIDATA
722290 72229b ?C?LSTXDATA
?C?LSTPDATA
?C?LSTKIDATA
7223a6 7223e1 ?C?LSTKXDATA
?C?LSTKPDATA
?C?LSTKPTR
?C?LSTKOPTR
?C?BCAST_L
72229c 7222ac ?C?OFFX256
7222ad 7222b8 ?C?OFFXADD
?C?OFFXADD1
722687 72268f ?C?PLDIDATA
722690 72269f ?C?PLDIIDATA
?C?PILDIDATA
7226a0 7226a8 ?C?PSTIDATA
7222b9 7222c1 ?C?PLDXDATA
7222c2 7222d8 ?C?PLDIXDATA
?C?PILDXDATA
7222d9 7222e1 ?C?PSTXDATA
?C?PLDPDATA
?C?PLDIPDATA
?C?PILDPDATA
?C?PSTPDATA
7222e2 7222ed ?C?PLDCODE
?C?PLDPTR
?C?PLDIPTR
?C?PILDPTR
?C?PSTPTR
?C?PSTPTRR
?C?PLDOPTR
?C?PLDIOPTR
?C?PILDOPTR
?C?PSTOPTR
72237e 7223a5 ?C?CCASE
?C?ICASE
7223a6 7223e1 ?C?LCASE
7223e2 7223ee ?C?ICALL
7223ef 722415 ?C?ADDXBP
722416 722425 ?C?XBPOFF
?C?CALL_XBP
?C?RET_XBP
?C?RET_XBPV
?C?CALL_PBPV
?C?RET_PBP
?C?RET_PBPV
_PUTCHAR;这个别找了,向串口0发送数据
7226a9 722ba1 _SPRINTF
_PUTS
_SRAND
_SCANF
_GETKEY
_GETCHAR
_TOINT
_ISALPHA
_ISCNTRL
_ISDIGIT
_ISNUM
_ISALNUM
_ISGRAPH
_ISPRINT
_ISPUNCT
_ISLOWER
_ISUPPER
_ISSPACE
_ISXDIGIT
_TOLOWER
_TOUPPER
_GETS
_STRCAT
_STRNCAT
_STRCMP
_STRNCMP
_STRCPY
_STRNCPY
724ac3 724ad8 _STRLEN
_STRRPOS
_STRCHR
_STRPOS
_STRRCHR
_STRSPN
_STRRPBRK
_STRPBRK
_STRCSPN
_STRSTR
_STRTOK
_STRTOL
_STRTOUL
_ATOL
762437 762528 _ATOI ;很像,但不能确定
_MEMCMP
_MEMCHR
_MEMSET
_MEMMOVE
?C?MEMMOVEAMD
?C?MEMCMPAMD
?C?COPYAMD
;余下的是各种机型的特定函数以及内存管理类的函数,例如MALLOC之类的,因为海尔BIN没启用uC/OS-II的内存管理模块,肯定找不到。
如果谁找到了,请在回帖中说明函数的名字和在BIN中的地址范围。