爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 22759|回复: 19
收起左侧

sfe.exe使用说明

[复制链接]
发表于 2005-11-9 12:24:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:

简单帮助:
====================
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.


搜索空白区:
=====================
> sfe 0                        ; 帮助
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间

二进制拷贝:
============
> sfe b                                      ; 帮助
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200

比较文件:
==============
> sfe c                                              ; 帮助
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)

发现16进制的地方:
====================
> sfe f                                     ; 帮助
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.

提取语言数据:
======================
> sfe l                                          ; 帮助
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
> sfe l src.bin -1                             ; 提取第二种语言
> sfe l src.bin -all                            ; 提取所有现存语言
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
> sfe l test.lng                   ; 检查test.lng 语言包
> sfe lc test.lng                   ; 检查和更正test.lng 语言包

提取菜单:
=============
> sfe m             ; 帮助
> sfe m src.bin    ; 提取菜单结构和入口


补丁:
=========
> sfe p                                        ; 帮助
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz


编译:
==========
> sfe a                                     ; 帮助
> sfe a src.asm                          ; 编译 src.asm
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
> sfe a "mov r12, #1234h"          ; 单句编译
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。

*) See Assembler Part to get more 'assembler' function detail


反汇编:
=============
> sfe d                                       ; 帮助
> sfe d src.bin                             ; 反汇编 src.bin
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
> sfe d image.bmp                  ; 单色图形汇编输出
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。

调试:
=========
> sfe r                          ; 帮助
> sfe r src.bin                 ; 运行 src.bin
> sfe r src.asm                ; 运行 src.asm 汇编文件
> sfe r src.asm ,n            ; 同上, 正常输出
> sfe r src.bin,200           ; 从 0x200 地址开始运行
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
> sfe r src.bin b00000      ; 以 B00000 为基址运行
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行


交互调试:
======================
> h              ; 帮助
> g a00000   ; 到地址 a00000
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
> d              ; dump 内存 (现在地址)
> d a00000   ; dump a00000 开始的内存
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
> d r            ; dump 注册
> a              ; 单句汇编
> a c7d530   ; 单句汇编地址在 c7d530
> u              ; 显示反汇编
> u a00020   ; 显示地址 a00020的反汇编
> r               ; 在现在的地址上执行一条语句
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
> r 0            ; 运行到返回语句
> r -c7d580   ; 运行到地址 c7d580
> q              ; 退出

*) 所有未声明的语句都会改变当前地址。


特别的助记符:
============================
*) 所有C166的汇编格式
*) 分号用于注释 (在一行的任何地方)
*) 特别的助记符如下 :
   #include filename    ; 包含文件(各种定义)
   #define var value    ; 设置替代变量 var = value
   var equ value        ; 变量取值 var = value
   db 'X',36h               ; 定义 byte(s) 数据区
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
   org                       ; 设定当前地址
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
   end                       ; 结束记号
   ;#name XXX.string    ; 定义补丁名称 (XXX)
   '                   ; 注释将一起进入补丁
   ''                   ; 注释将一起进入补丁,加回车
   ';                      ; 以下内容将全部是注释,直到出现 ''
   ;'                      ; 注释将一起进入补丁
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
   >> > < <<         ; 右移左移操作
   & && | || ^ ^^    ; 与, 或, 与非操作
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
   page(value),         
   pag(value),
   p(value)             ; 页值 (= value / 0x4000)
   pof(value),
   q(value)             ; 页偏移值 (= value mod 0x4000)
   segment(value),
   seg(value),
   s(value)             ; 段值 (= value div 0xFFFF)
   offset(value),
   ofs(value),
   sof(value),
   o(value)             ; 段偏移值 (= value mod 0xFFFF)

*) 例子:

;--- Testing ---

base 0A00000h                ; 自动转换文件地址为 SL45 内存地址

#ifdef ME45
  #include me45.inc
#else
  #include sl45.inc
  #define  FreeRAM 37h:3600h
  #define  memcpy  0c7b384h
#endif

;#name TST. Test Patch            ; 补丁名

'Firmware : sl45v56
'Author : rizapn
'Updated : Aug 18, 2004

org 0c7e000h
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
    extp  #p(data2), #1             ; 跳到 data2 页
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
    callr sub_1                            ; 页内调用
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
loop_1:
    mov   r2, #1234h
    mov   [-r0], r2
    calls memcpy                    ; 调用段表示的子程序
    add   r0, #2
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
    rets

sub_1:
    mov   r4, #1234h
    ret

data2:
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区

end

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Allaahu Akbar,
RizaPN <rizapn@yahoo.com>
Jakarta - Indonesia

[ 本帖最后由 wwssff 于 2005-11-13 08:41 编辑 ]

评分

参与人数 1实力分 +1 金钱数 +10 收起 理由
Dong + 1 + 10 奖:贡献-感谢你热心帮助其它会员解决问 ..

查看全部评分

发表于 2005-11-9 12:26:43 | 显示全部楼层
顶了再看~~~~~~~~~~~~~~~~··
回复 支持 反对

使用道具 举报

发表于 2005-11-9 12:28:02 | 显示全部楼层
俺只会用最简单的不入门的功能-_-)))))
汗.......
回复 支持 反对

使用道具 举报

发表于 2005-11-9 12:30:10 | 显示全部楼层
想给你送一朵花
不会送-_-##

想给你加一分
没权限-_-##

想给你送点银子
不舍的-_-##

只好回帖表示支持了
回复 支持 反对

使用道具 举报

发表于 2005-11-9 12:37:57 | 显示全部楼层
云河真有耐心,性情真好!
辛苦了~~~
回复 支持 反对

使用道具 举报

发表于 2005-11-9 12:56:11 | 显示全部楼层
只用过比较。。。。。谢谢,收藏了。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-11-9 13:13:14 | 显示全部楼层
是用在48个应用程序那个sfe吗?
回复 支持 反对

使用道具 举报

发表于 2005-11-9 13:24:29 | 显示全部楼层
下了有空学学,云河加油啊~
回复 支持 反对

使用道具 举报

发表于 2005-11-9 14:45:10 | 显示全部楼层
对大家有帮助的。
支持.............
回复 支持 反对

使用道具 举报

发表于 2005-11-9 15:12:29 | 显示全部楼层
虽然不会用,但是知道是好东东
回复 支持 反对

使用道具 举报

发表于 2005-11-9 15:14:35 | 显示全部楼层
好东西啊,收藏,顶!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-9 17:40:18 | 显示全部楼层
原帖由 lp622 于 2005-11-9 13:13 发表
是用在48个应用程序那个sfe吗?

那是个补丁, 而SFE.EXE是制作补丁的工具.
回复 支持 反对

使用道具 举报

发表于 2005-11-9 20:14:37 | 显示全部楼层
深奥///////////
回复 支持 反对

使用道具 举报

发表于 2005-11-9 23:57:07 | 显示全部楼层
谢谢楼主的教学文件
回复 支持 反对

使用道具 举报

发表于 2005-11-10 08:53:57 | 显示全部楼层
这么强~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-11-10 09:00:02 | 显示全部楼层
[Patch工具]sfe使用详解 http://mobile.0110.cn/viewthread ... &extra=page%3D1

[ 本帖最后由 Xinshou 于 2005-11-10 09:02 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2006-7-19 09:37:36 | 显示全部楼层
顶。。。。。
回复 支持 反对

使用道具 举报

发表于 2006-7-19 10:11:03 | 显示全部楼层
顺路贴出重要的,反汇编一个补丁输出源码和从源码汇编输出一个vkp补丁:

源码文件内容最前面加一行
base 0a00000h
接着加一行
org 0F4e740h (表示补丁地址在0x54e740)
存为txt文件后,
用sfe编译此文件,命令为:sfe a pic.txt p FullFlash.bin >pic.vkp
(FullFlash.bin 可能不需写?)

使用D功能(反汇编),这个功能我可以用于FULLFLASH.比如:sfe d 6688.bin,551500,10 p 这样是可以反汇编出地址551500后的一些代码. 但是也可以直接反汇编一个VKP的补丁,
如 sfe d patch.txt,1f2b50,200

patch.txt 里面地址后只跟补丁新数据,不要就数据、也要删去注释,地址和数据只空一格!
1f2b50 为反汇编的开始地址
200 为要反汇编的数量,可以任意数量,如 6, 8 , 100, 10000 ......

反汇编时,如果不要显示左边的地址和补丁代码,只要显示asm源码,可以如此写:

sfe d patch.txt,1f2b50,101 a00000,p  
101 为要反汇编的数量,但它特指到db00结束。

只要 sfe d patch.txt,4f0000,10000 a00000,p (加 a00000,p 是为了不要显示左边的地址和补丁代码,只要显示asm源码)就得到 patch.txt的源代码了,把它另存为patch.asm, 打开该文件,在前面加上基址和欲搬移到的目的地址,即, 如
base 0A00000h
org   0Fca050h  (这里为地址 0x5CA050)

再用 sfe a patch.asm p,10,a00000  就得到patch的补丁vkp了。


另外,也可以将asm源代码存为txt格式,如 patchcode.txt

编译语句:sfe a patchcode.txt p 6688Flash.bin
(有时可以不用加上6688Flash.bin)

sfe a cal.asm p > cal.txt 这句是将源码汇编生成一个txt格式补丁
sfe p Calendar.bin cal.txt 08  这句是从txt格式补丁生成一个bin格式文件

另外,还可以运行 sfe pd file.bin patch.txt 直接生成bin文件。
回复 支持 反对

使用道具 举报

发表于 2006-7-19 10:25:31 | 显示全部楼层
好教材
回复 支持 反对

使用道具 举报

发表于 2006-7-23 18:10:15 | 显示全部楼层
再顶人看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-6-16 17:04

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表