赞助论坛
  • 4609阅读
  • 0回复

标准c函数在海尔BIN中的位置,我找到了一部分,更多的希望大家一起找 [复制链接]

楼层直达
byzx  

发帖
445
精华
12
金币
658
威望
178
贡献
331
好评
134
注册
2010-03-02
楼主    byzx 发表于: 2010-05-03 20:57:02 
找到了有什么用呢?
看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中的地址范围。
本帖最近评分记录: 1 条评分