logo资料库

keil对lib封装库反汇编成C语言.pdf

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
www.sokutek.com 2004 台湾的扬智(ali)科技开始做 mp3,最早的产品仅仅断码屏,高速 usb 2.0,adpcm 录音。当 时深圳的盈科一直在做它的产品,对于当时高速 usb 这一优势,陆陆续续也接到了一些外单。 由于其录音的品质很差,返修率高,所以只有几家工厂在做,量一直上不去。2006 年我到扬智 驻深圳办事处去培训,在他们的公告栏上,写着“月出货量突破3kk”,那个时候,台湾 ALI 已成 为全球最大的 MP3 芯片供应商之一,其产品音质也相当突出,尤其是 ALI 的最新解码芯片 Ali M5661,还具有 USB 2.0 接口的 MP3+Flash Disk 控制芯片,可用于 U 盘+MP3 播放器等解决 方案,数据传输速率可以达到目前业界领先的水平,同时它还具有 OTG(On-The-Go)、高性 能、高度集成化、功能丰富等特点。到后来我接触到了其代码,才发现其合理性,巧妙性。对 于 ali 我所知道的,IC 型号有 5661p,5661c,m7101,5667;5661p 是针对于黑白屏的,5661c 彩 屏,它们出货的价钱不一样,它们却是同一颗 IC,以致于当时深圳的一些方案公司也投入到如何 破解其原因,极少数的公司找到了答案,修改寄存器 obCONTEXTSW----”反汇编”,去看它的 汇编语言。充分的证明了一点,知识就是金钱。 2006 年无锡华晶推出了 3301,其内核的构架与当时的 ali,action,segmatel 一样,一颗 dsp,用 于音频,视频的编解码;一颗 mcu,用于 fat,usb,lcd,key 底层的驱动。dsp 采用的是飞利浦的内 核,品质在行业中是数一数二的;mcu 是单指令周期。客观来说,华晶是当时最有优势的,但 是这仅仅是从硬件上来说的。读者可以访问他们的网站,intech.ys168.com,你会很清楚他们今 天销售的状况;他们已经退出 mp3 的舞台了,原因就是软件不稳定,很些变量的滥用。我举一 个例子,对于一个文件的预先处理,他把一个文件的 cluster 链表一次性读入 buf[];这有一个问 题,如果是 128M 的内存,它无法播放大于 90M 的文件。 Ali 及华晶的 IC,有一个非常相似的地方就是其 mcu 都是 51 内核,而且都是用 keil 编译,且都 能可以 simulate 查看其汇编程序。我想如果想让华晶翻身,可能只有充分的理解 ali 的程序编 写,包括变量的定义,主要是绝对地址的定义。但是,ai 的核心的 mcu 程序,包括 fat,usb,及 逻辑到物理层的程序,最关键的是对 flash 的处理,都是打包成 lib,用户只能调用其接口函数, 不能看其源码。我有时闲得无聊,会对看 ali 的汇编语言,开始比较吃力,后来看多了,也就得 心 应 手 , 速 度 也 越 来 越 快 。 我 把 我 的 心 得 写 下 来 , 与 大 家 分 享 , 不 足 之 处 , 请 指 教.chenshiyangyi@163.com 1.Keil 编译环境的设定 PDF 文件使用 "pdfFactory Pro" 试用版本创建 ÿ www.fineprint.com.cn
www.sokutek.com PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
www.sokutek.com 传递的参数 局部变量的定义 进行编译之后会生成 038Custm.M51 文件,里面有局部变量,全局变量的地址;函数的地址, 及函数变量的定义(有的 lib 会把变量去掉,此时你只能看到其绝对地址,这时你应该区别它是 全局的绝对地址,还是局部变量) 下面的编译信息即为封装库里的函数信息. ------- PROC _PHYWRITEPAGEFROMSRAM X:947DH SYMBOL bStorPath === X:947EH SYMBOL bLen ------- DO D:0055H SYMBOL bb ==== D:0056H SYMBOL fRet D:0057H SYMBOL bKeepSpeed D:0058H SYMBOL bAdjust ------- ENDDO C:BD3DH LINE# 7843 ……….. C:BE93H LINE# 7995 C:BE94H LINE# 7998 ------- ENDPROC _PHYWRITEPAGEFROMSRAM 可以看出其大体的框架为: PHYWRITEPAGEFROMSRAM(XBYTE bStorPath,XBYTE bLen ) { BYTE bb, fRet, bKeepSpeed, bAdjust } 2.反汇编代码的获取: 首先编译工程, 点击”start/stop debug session”按钮 PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
www.sokutek.com 点击”disassembly window” 此时你可以将所有的的汇编程序 coy 到专业的文本编辑框,保存.我所用的是 UltraEdit-32,且把文 件后缀改为.c;有时进行反汇译时,你可能对一些函数弄不明白,特别是 case 语句,此时你可以修 改右侧的 regester 及 pc ptr.对于 case 语句的跳转,你可以把 switch(cmd),试着把 cmd 的值输入 到 r7,把 switch 的输入地址填入 pc $.按 F11 单步运行就可以了. 您可以点击”Memory window”来查看二进制代码,及 xdata,idata 变量空间 如果你需要查看 xdata 地址为 1 的变量输入 x:0x0001 即可 3.汇编语言的模块程序归类 PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
www.sokutek.com 1) DWORD TMP,TMP1 IF(TMP==TMP1) { } 汇编程序: R4R5R6R7 = TMP1; R0R1R2R3 = TMP; CLR C C?ULCMP JNZ Continue_Proc { } Continue_Proc: 2) DWORD TMP,TMP1; IF(TMP>TMP1) { } 汇编程序: R4R5R6R7 = TMP1; R0R1R2R3 = TMP; SETB C C?ULCMP JC Continue_Proc { } Continue_Proc: 3) DWORD TMP,TMP1; IF(TMP>=TMP1) { } 汇编程序: R4R5R6R7 = TMP1; R0R1R2R3 = TMP; PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
www.sokutek.com CLR C C:ULCMP JC Continue_Proc { } Continue_Proc: 4) DWORD TMP,TMP1; IF(TMP
www.sokutek.com 6) DWORD TMP,TMP1; TMP/TMP1; 汇编: R4R5R6R7 = TMP1; R0R1R2R3 = TMP; C?ULDIV 其中,商放到:R4R5R6R7;余数放在:R0R1R2R3 WORD TMP,TMP1; TMP/TMP1 汇编: R6R7 = TMP; R4R5 = TMP1; 运算的结果商:R6R7,余数:R4R5 7) DWORD TMP,TMP1; TMP*TMP1; 调用 C?LMULP 积放到:R4R5R6R7 8) DWORD(XDWORD) TMP1; BYTE(XBYTE) BI; TMP1>>BI 汇编语言: R4R5R6R7 = TMP; R0 = BI; C?ULSHR , 结果放在:R4R5R6R7 如果读真需要反汇,也请把下面的模块程序看懂,我相信就没有什么问题了,如果在反汇编的 时候确实有看不懂的,您可以借助 debug 去理解其意思. C?LADD: MOV A,R7 ADD A,R3 MOV R7,A MOV A,R6 ADDC A,R2 MOV R6,A MOV A,R5 ADDC A,R1 PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
www.sokutek.com MOV R5,A MOV A,R4 ADDC A,R0 MOV R4,A RET C?LSUB: CLR C MOV A,R7 SUBB A,R3 MOV R7,A MOV A,R6 SUBB A,R2 MOV R6,A MOV A,R5 SUBB A,R1 MOV R5,A MOV A,R4 SUBB A,R0 MOV R4,A RET C?LMUL: MOV A,R0 MOV B(0xF0),R7 MUL AB XCH A,R4 MOV B(0xF0),R3 MUL AB ADD A,R4 MOV R4,A MOV A,R1 MOV B(0xF0),R6 MUL AB ADD A,R4 MOV R4,A MOV B(0xF0),R2 MOV A,R5 MUL AB ADD A,R4 MOV R4,A MOV A,R2 MOV B(0xF0),R6 MUL AB XCH A,R5 MOV R0,B(0xF0) PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
分享到:
收藏