爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 19996|回复: 2
收起左侧

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
/ y2 i0 k$ J6 [- k! x
" x+ z. J$ G- y* ?# A2 O' p, ]. V简单帮助:
  K: F5 N3 ?8 t# r) P====================
  C5 y, [7 V' Z( e*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。4 Y3 [6 G- R' o& v" U' z
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
# w. x& [4 o: }6 m0 L4 w% x1 Q$ W

/ e$ H" @8 H1 h% \- c  J* y$ E# Z搜索空白区:
' N; O* X/ U/ U) g, N2 k% X=====================
$ Q  Z  h7 n- D' I> sfe 0                        ; 帮助
/ }0 |# @! k, V4 T' x> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)7 ^/ y, s; D- g+ ?, J
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间5 ?$ A% Q) [. k3 w
4 H0 A1 T! V5 X& v' B2 a$ d
二进制拷贝:
  k( t2 \% L6 w% H. x+ ~' `4 r" I% z============( I3 W3 v" J8 D# a0 G0 b. s
> sfe b                                      ; 帮助3 b: o% }& h2 _3 d* Y
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
$ T$ L1 t* a0 u- A* D  h> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin- N! Q) g- t; \$ z
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
* {* F$ A+ z% T: _> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
! B9 L3 t7 P+ w5 |0 }3 V! M
3 u' [4 {1 t% d) u, I% x* W比较文件:
$ c: _- T  ]- O: u  F7 k, J2 P==============2 _" }( j3 \+ c+ g) A$ j$ a
> sfe c                                              ; 帮助
' g6 H1 H% T2 o- {: N' P2 F: Z0 F> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
+ r* [) {; b2 l; Z7 v  V> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
4 J" m( r7 o* r! M> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
. c2 P7 _& }/ X3 a$ O6 @> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 ): P: q5 `; P; _, L4 j* Q/ z' `6 Y
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
& P  h7 A; M2 v( {8 W> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes. S% n% E6 s4 }! Y7 l+ Q- h  Q7 r  B
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)1 Q4 P2 r! x# e* G! i9 n
/ D0 }2 z. u. U" e
发现16进制的地方:
( s; u; [; y( K0 @& N# L% ^====================
0 o7 a# n" R& e  p! d> sfe f                                     ; 帮助
. Q7 I0 Q( c$ [: @9 ]/ Q/ z; d) t> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
7 l7 a! L5 O0 ?9 m! w> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
6 |6 K$ s& f8 V( v3 t& D$ d> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
# U( m/ ?. O& x! h- m> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
" ?8 B! e* o6 K! `2 z1 M> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小* C; }; m# d2 x
> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.  i6 i! O1 ]' h' L+ [2 o

, b3 `! Y/ q  v5 \提取语言数据:
* R8 c, e. Y- z7 ^( m======================  C; g- i$ D7 E3 ?1 M; r1 ?* r
> sfe l                                          ; 帮助$ V9 w3 I; }0 \- _- o( X
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据  A/ V6 Y4 J% K! K
> sfe l src.bin 200                          ; 显示 ID 200 的字符串/ x8 r, E( K/ q# Y4 U: j
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串6 A/ t7 l7 y: h
> sfe l src.bin -1                             ; 提取第二种语言% p% a& G1 v6 D) _
> sfe l src.bin -all                            ; 提取所有现存语言
3 a; s/ ?5 `" s> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
. X& M; s6 S* w. G9 H+ U$ B' @> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言): s( Q+ f# _( e
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
9 m) ^( Q# g: r" J7 M: K6 `) c* n% x> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
( p6 P& \5 j- ?9 R. @5 U( L> sfe l test.lng                   ; 检查test.lng 语言包( z$ K. Q' p8 z  N/ [. Z
> sfe lc test.lng                   ; 检查和更正test.lng 语言包
! e0 h' u, R, N# J" V
9 L3 U7 ?3 G7 C提取菜单:
- V! j! X6 U' X% S  R  n=============, u3 M7 h% D$ e, ?
> sfe m             ; 帮助
/ a% S& q3 ]& O- ?. J- x. P7 b$ N; Q> sfe m src.bin    ; 提取菜单结构和入口" @* q7 Z+ |# D* W# Q
9 H( h% G) n7 W$ y& `) y

6 z3 ~" r: |8 l$ }: S! c补丁:6 T7 K3 Z2 F) {8 A
=========
4 _7 u1 Y* e8 Y% H! A> sfe p                                        ; 帮助6 v$ M" A- H- B% a: u
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin2 y4 j; J5 A- b% n5 V/ ~
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz- j( F6 h- }7 E- u& {/ Q
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
; ?$ b2 w) m9 q4 L7 ^' A5 h2 `* I9 g, o$ j! w+ k
9 y: d' S5 C' C( _& ?8 b/ d! f5 _
编译:% c- l& o$ c( Z
==========
# Z' i8 |  @: ]* u: j> sfe a                                     ; 帮助
4 h8 X3 A. m; i# f> sfe a src.asm                          ; 编译 src.asm
( b! P4 I7 f4 G+ c: T/ [5 i> sfe a src.asm d                       ; 编译 src.asm, 完整输出
6 W) I2 v7 h7 K, ?/ E7 [> sfe a "mov r12, #1234h"          ; 单句编译
1 C/ m! q" q4 W0 q+ s& ~> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译2 N0 S3 D6 I" G9 x% g
> sfe a src.asm,TST                    ; src.asm编译成补丁格式0 x/ r2 M* U5 K: a
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
' Z* Y1 W# a, f- |> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
+ d  W8 Z0 ?7 ?) _' V' \: N> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000" w- @0 v( q) w6 o- y, D! n5 d
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。  q. K1 N8 k0 z! _( [

' a2 d7 [7 n) X*) See Assembler Part to get more 'assembler' function detail
. i8 y, \5 q' y" ~
4 q/ a- b! \9 I6 a) Z% r* w& y0 [2 R
反汇编:
, F" C& ~; Y- s=============
; O3 v* q0 p$ ~1 b> sfe d                                       ; 帮助% R. l; v! ?; ?% e) F# t. P5 n
> sfe d src.bin                             ; 反汇编 src.bin
; ^8 S; @3 X. H( W$ q/ _' Q> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
" z1 E% K% c+ R8 l" M> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节( z* S) Y( m3 s1 H# r
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000* m* S2 U, L4 y7 \5 S- l' [
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止$ P3 x: ?: J0 Q
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址% n+ }8 d) Z; t$ |; ?0 {; F
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件8 P; ]$ ~0 |8 G' X1 B+ C- ?9 _
> sfe d image.bmp                  ; 单色图形汇编输出
9 _" M$ c5 r& s> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
7 W9 F7 S, N. |. ^: {8 \4 L' E- s/ T0 Q4 L; [% E  \# \
调试:
2 W% S3 @1 n2 K=========
) U( c3 n3 g) ?7 U& q> sfe r                          ; 帮助  J: G0 x  ]- u# l) E
> sfe r src.bin                 ; 运行 src.bin) J: N' ~% C3 {) Z2 g
> sfe r src.asm                ; 运行 src.asm 汇编文件4 g; o3 @5 P9 q' D
> sfe r src.asm ,n            ; 同上, 正常输出
) V0 ~; _: `9 Y: p% `0 J7 @' Y> sfe r src.bin,200           ; 从 0x200 地址开始运行8 S6 F7 x+ w2 ^2 i7 N' k8 f, w7 W4 B
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
( T1 B9 M/ n9 x. \& S> sfe r src.bin b00000      ; 以 B00000 为基址运行
) o* o) q7 T$ _- T# f: C' X. v> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
+ D$ T- w: z+ r2 C. _$ t> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
; ^) d! N/ e+ f5 B! `$ R) Z8 z. t) s3 [$ O- a3 M( w4 w
+ q* B- t$ @. [) k, P6 g) w
交互调试:* y* f8 A/ D& v6 ]
======================; \& v/ x9 X  v7 e
> h              ; 帮助
, l& N' P& {$ l7 D/ |  Y' y* E> g a00000   ; 到地址 a00000
" s, Z8 s0 ^/ E> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
: x# c  \. y/ d9 ?; ^> d              ; dump 内存 (现在地址)/ ]1 x/ w$ S6 I: D1 F" o' |* K  \+ D
> d a00000   ; dump a00000 开始的内存2 _" x0 G" ^6 f* h$ b# E
> d a00000 200   ; dump a00000 开始的内存, 大小 0x2006 Z! O9 J  O4 z) o! ^
> d r            ; dump 注册
! I7 F4 c8 O% e4 d> a              ; 单句汇编* l* v& J9 \( `7 r  f3 R8 ~
> a c7d530   ; 单句汇编地址在 c7d530
( g* j8 b/ Z: o> u              ; 显示反汇编- z0 _, ~- c9 b3 a2 N8 L. Z& \" P' T
> u a00020   ; 显示地址 a00020的反汇编
+ P& S% R7 ?) U& N$ {& ]> r               ; 在现在的地址上执行一条语句; a" s1 U7 h" O0 e/ Q
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
0 N" I. C9 S4 h7 j7 g( Y5 T0 }> r 0            ; 运行到返回语句
. C% F& d  v: ?! o: S* h> r -c7d580   ; 运行到地址 c7d580' C/ u$ v- ~& U
> q              ; 退出
$ b( x: T3 V( e& [& C. B
2 `' [% I# q3 h2 G, C& n* X8 Z$ q* j*) 所有未声明的语句都会改变当前地址。
: V. t. a5 r& A9 g% Y
) t) P9 }1 ?9 R) t/ R9 P0 O
: {3 B4 Y$ U: t+ V0 Q! l特别的助记符:
% k1 R0 O7 d& N3 p3 p# f============================
2 [8 W& w. _4 M- Q*) 所有C166的汇编格式
8 y) k( h% ?9 V. T3 X*) 分号用于注释 (在一行的任何地方)
: h1 v2 P( R; `5 B' h*) 特别的助记符如下 :7 ]+ `7 |! f2 F- S
   #include filename    ; 包含文件(各种定义)
- e7 Q1 K- n8 r+ u8 M   #define var value    ; 设置替代变量 var = value
/ z. h( [4 D& E9 ~  R1 F, o% q   var equ value        ; 变量取值 var = value
8 B" z+ V* ?% v. L6 k" k& G   db 'X',36h               ; 定义 byte(s) 数据区) ?& J6 H8 h' _+ h& y6 H; O
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
2 X7 n" ]6 u+ L  |7 d2 k) m6 R   org                       ; 设定当前地址
) W5 s- f: p3 ~9 p  A   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
, M# D3 x4 R: p8 L   end                       ; 结束记号7 U( O4 H6 c8 `6 v
   ;#name XXX.string    ; 定义补丁名称 (XXX)
% T( _+ A* l% t   '                   ; 注释将一起进入补丁( u" U! W4 h9 N% L$ K% g1 \  ?
   ''                   ; 注释将一起进入补丁,加回车  m! M7 ?) P8 X- ?8 j4 W
   ';                      ; 以下内容将全部是注释,直到出现 ''  U% T3 [7 s! n6 g1 o! \
   ;'                      ; 注释将一起进入补丁
$ ]/ b/ b& x( `0 v9 \   + - * / %            ; 加, 减, 乘, 除, 求模 操作
) d/ F# K' N8 i; r! r5 T7 T4 m6 e& ?   >> > < <<         ; 右移左移操作: B% c. ^/ c3 f
   & && | || ^ ^^    ; 与, 或, 与非操作
( L: O  `3 f/ |0 U% n$ _   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
# L& [  d* t7 }0 d/ n$ k   page(value),         
- _' Q6 B/ w6 V   pag(value),, Z4 @. P  F* v' T: H
   p(value)             ; 页值 (= value / 0x4000)
7 V* E% V) Q3 }# B   pof(value),
; S; K0 W. c6 [/ n8 f+ m   q(value)             ; 页偏移值 (= value mod 0x4000)
% k/ T" F. ^! G0 [5 U6 H" _6 T' b   segment(value),- |: H4 t- Y+ b- _$ g
   seg(value),
: @+ ^+ i# q# m  y3 l. B   s(value)             ; 段值 (= value div 0xFFFF)
) W* ]2 X1 L, o, h7 z   offset(value),! @7 Z9 z* W- o# y& _
   ofs(value),. {/ m4 {9 \: g; n
   sof(value),
+ b, L& `7 Y5 V9 e( q, Y, w   o(value)             ; 段偏移值 (= value mod 0xFFFF)
, X- V9 J- Y! X, b" F& V! l- p  y% ^" B$ z1 e8 M  a" d0 Z
*) 例子:
7 H! }: J0 K  x& h2 ^# Y& l
( ]/ T5 e( V2 v;--- Testing ---
9 B3 a- H- c. z6 N! u  V* \- R5 N, B( w$ t/ o
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
! n/ Y9 N4 ]+ D9 x6 M$ G3 {: p# e: S$ z) z
#ifdef ME452 W1 Z& i4 `+ Y4 A& x- v' e. k
  #include me45.inc
4 C/ a# m! [/ {" F" t1 R# P1 k2 `#else
" j& {6 H& A9 l0 N. Y) v" B  #include sl45.inc
' h7 z4 M3 o. n3 \  #define  FreeRAM 37h:3600h6 Q- B. g6 M0 j; v( s% ]
  #define  memcpy  0c7b384h
, ^' r' s: i# L) x( D9 Z#endif
6 ?9 u- ~0 d, R1 o8 j- S3 i) L6 t
;#name TST. Test Patch            ; 补丁名. C5 \6 A3 S8 X/ R* V1 G3 k5 h
! I+ w6 I' l( k  _) t6 s$ \4 T
'Firmware : sl45v562 q, j! {" @3 g( P4 D' Z; j  H) b
'Author : rizapn
+ X7 H  h# n0 Q: U: a+ c& Z'Updated : Aug 18, 2004
5 h2 B5 m! W) t" j) n* y/ I0 f' ?. O7 x$ z0 U
org 0c7e000h' D* n2 Y; t* O, Y
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移/ v, w8 `6 {3 `. Y7 [! }! H
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
) S0 a. w! M! S; @& U- m- g    extp  #p(data2), #1             ; 跳到 data2 页; Y; x, M& }3 {3 X' Y4 D
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)9 H& J0 j! y1 m  L$ B" L% l. h  n
    callr sub_1                            ; 页内调用9 N$ F# ]' G/ e+ y
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
' {7 d6 X$ X; i' k, O! }loop_1:
# k  ~, e$ I2 \    mov   r2, #1234h
) l6 [- Q6 `8 Q3 c- x    mov   [-r0], r26 @  [$ |- j; Q5 a. J$ c
    calls memcpy                    ; 调用段表示的子程序
. b# \* Z  H4 n9 P    add   r0, #2
/ v' w) z' b" U    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
+ d4 O2 r9 N8 J- w    rets
! ^: @! r. I- z' A/ v7 E; m% h  ]* }- X% ?) C
sub_1:& c% }$ ~% s0 i6 U+ c9 z
    mov   r4, #1234h) e4 Z) U1 C' z/ D% r# V# |, j8 }/ A# L
    ret
5 X% G: m8 u# w; K, F5 n1 p
6 u# Q% @! X3 Ydata2:
8 P! `) q: }7 i0 T9 ]    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区2 L' u  q9 T" s; D1 Y( E3 P

; h/ z, V8 d. J9 X' ^* {end( B* A& \6 A- L) k. Q! D0 q

5 u% D9 c* U& t& ?! l) ~  j;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 \4 y7 d; j3 {) g6 T
+ G0 K& d! {+ y" }2 D* ^Allaahu Akbar,
/ o/ U5 w' s0 Q/ U0 VRizaPN <rizapn@yahoo.com>4 V2 Y# v! e$ v) K# M
Jakarta - Indonesia
7 E& {; z( h: Y/ b6 P/ D( X: f7 n* B& w: v% a+ b
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ]
发表于 2005-11-14 23:59:28 | 显示全部楼层
这个要学学了。谢谢楼主。
回复 支持 反对

使用道具 举报

发表于 2006-4-17 23:06:30 | 显示全部楼层
学习中…………
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-5 02:40

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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