爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:9 v2 u" _+ o* U9 e# k
- {4 \0 {: p7 b( Q3 ^
简单帮助:& B& I5 ~& i# D2 l* f! e
====================
) d8 y, F8 g5 y0 Z- f, n% [*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
" L5 ?, [& V& T*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
/ V2 K5 i6 Q" J! E7 d
( U$ z* ]% q/ p) v& S- z3 V: T4 x- p- U$ n: G+ U
搜索空白区:
" f6 H* m0 [0 B9 p# F) W( T=====================
/ y, i( x7 [- ?, r/ @6 C# E! N> sfe 0                        ; 帮助
& T9 D4 k  m$ ~> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
3 p; x0 H% R5 p# Z" [' T' V0 u> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
7 \3 b% R' M. Y" N0 a/ Y! L) v  k" f- S
二进制拷贝:
! E' Y. ?: ?# D* Z============3 j$ {1 Q6 z  K
> sfe b                                      ; 帮助
$ P7 A' {' J& ~2 b> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin  X/ Y% p& s% c- ~, u& P" R. }( k8 N
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin2 g. |  q: h2 p- c8 J
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
, I* R* j$ o) J( x& g> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
& `# k4 G' B6 g4 [
& |- f( X" L% u; a; ~比较文件:2 m9 N) y  j1 J% k& p7 F
==============
! H0 Z% i; v# f: J* R) |- h* v> sfe c                                              ; 帮助
  ^& C  y! J( N. R' n> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin/ X+ ]& g2 q9 A
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin ). q# a( w' \( P5 |. x
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
# G8 O8 o0 F, N9 I> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
; e. z  x" u+ f6 q7 A+ X1 l> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
4 H$ B, [; J- F5 y> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
3 L. S4 Q( y( M% h" c% ]> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)4 ~2 A3 p0 ^) U

4 V3 {) {0 R7 V# U4 t# H发现16进制的地方:
# G+ P) o6 X9 n, j& y% V+ O) d9 G====================4 E: T6 O  z, H9 R0 @
> sfe f                                     ; 帮助7 Q  K! e4 w- f; R! x4 C
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
( I6 M" _5 Z2 Q1 J# y> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
+ R% b: p1 C  I8 v" r, u8 U> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
$ d& l3 B  M$ ^/ h' g$ r) W7 L5 s* s+ I> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找, J8 f& `4 ?: j6 G
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
& I+ t' C3 N- }7 c& \$ ?> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.# w" G5 P8 M0 l# B

; f2 [- H9 h5 x& w; v提取语言数据:
! `) k+ s$ t: Y8 R======================3 U9 k! q$ L# S6 t8 W
> sfe l                                          ; 帮助
* f! q/ R' t1 K> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
% x: o" k4 w7 `$ J7 ~3 {> sfe l src.bin 200                          ; 显示 ID 200 的字符串
" `3 W$ C& T$ P. F> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
5 v# i: L# c7 F> sfe l src.bin -1                             ; 提取第二种语言4 B; U" V* M8 @
> sfe l src.bin -all                            ; 提取所有现存语言
( r/ Z, s7 O: I4 F/ ]9 `> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
, u; I9 Q. e# S> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
5 Z0 v8 k! a* t8 N. e> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
, m8 F7 w9 W" _* d$ n' P> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 & {8 R) W# O0 |1 \8 e) F
> sfe l test.lng                   ; 检查test.lng 语言包' V- v, j% t0 d8 V% A) Q6 W! b
> sfe lc test.lng                   ; 检查和更正test.lng 语言包6 K) T; s: I6 d! i& {$ H( [

( v, C1 _: I7 s8 a: Q; h5 j, _提取菜单:9 X" I! T, G" `* S2 d) F. k4 L
=============
, y) j* R8 H8 e9 p" _/ e' X' j$ e> sfe m             ; 帮助' a0 V% ?0 q1 @3 C# X- a4 B
> sfe m src.bin    ; 提取菜单结构和入口
2 g7 E5 L8 Y/ @# j. N7 m8 ?. a
) t$ Y' O. _4 a
" R) y. i) `" F5 K4 A, J补丁:: i. b# @* L; G2 ^( j% y6 W
=========+ P. E+ d$ I+ n& t+ ~1 b! q) H
> sfe p                                        ; 帮助5 q' D6 u( |6 [: V3 Q" r
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
% V8 K; B2 {3 ]> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz9 f5 H( t3 n! b. C, O  p1 [( S
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
1 r/ y' a  P4 K% X% b, t; p( y/ }* G$ t9 R
# K: S3 I' U  l! _# ~
编译:
8 }1 m1 b/ E# Z8 h( `' \) N==========
8 H6 i$ ~- c3 F( Q+ b3 K> sfe a                                     ; 帮助
8 s, t+ L9 R% ^% C- Y9 c> sfe a src.asm                          ; 编译 src.asm
) _" U7 u6 ]7 d4 U> sfe a src.asm d                       ; 编译 src.asm, 完整输出
% x1 P3 v( M% t; H7 G> sfe a "mov r12, #1234h"          ; 单句编译) @0 l9 k8 J2 ?9 @4 a8 S
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
3 h* R' A9 R8 T' S1 |> sfe a src.asm,TST                    ; src.asm编译成补丁格式. G1 {! i, [8 Y+ H9 z
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式  t3 z5 E! _; ]( z
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
! m7 d! J. |4 Y> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000) x! f+ A9 ?5 |* c( C) P  C% }2 t
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
+ I7 p9 J& N4 F9 _1 d  j7 i) {
4 o5 W8 a. a, l*) See Assembler Part to get more 'assembler' function detail! A8 B$ x9 a; Z" Q
( c9 u3 ]8 I9 Y6 J+ K( |

& r8 z9 o8 `, M8 t8 s! I反汇编:
2 ?: g/ l+ B# L9 _- P$ r2 R=============3 P/ M" k. I* `3 Z0 ~& z4 d- d
> sfe d                                       ; 帮助- d& u* A0 B0 n6 y/ Q  T
> sfe d src.bin                             ; 反汇编 src.bin
( r( W, j' \4 d3 A! w2 Z1 c7 [> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin2 q- Q( d. C! x1 i/ z6 ]9 {
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节$ ?* Y8 m7 ]; P) Y+ U
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000
+ K8 k; K% @4 @  v> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止, |- ]( d$ d' n0 v5 @7 N; j9 Z1 X
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址1 h) t6 ?4 J+ _, b$ I6 E
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
1 P/ W+ [. f' K% \4 l> sfe d image.bmp                  ; 单色图形汇编输出( ~( p6 P4 z1 C# N5 i! x1 {
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
* I) p$ O9 `" C) g$ f5 c7 b; ?2 K
% j4 J+ |$ Z: U' T1 e4 F. {, ]$ a调试:
& V0 w* C, n5 l* q0 V=========
/ k2 D% W" V* C9 r( `' |. J* W, ?' ~> sfe r                          ; 帮助( Y! x. d( M4 e9 M- K, ]( d  r6 i
> sfe r src.bin                 ; 运行 src.bin2 k3 ~" Q8 Q% L9 Q& V+ k5 D0 j& l! |
> sfe r src.asm                ; 运行 src.asm 汇编文件
3 b4 I+ G- P3 u6 ]- j3 D8 b> sfe r src.asm ,n            ; 同上, 正常输出
/ i, w" k) e( P4 t; P/ p> sfe r src.bin,200           ; 从 0x200 地址开始运行  o; n0 ^6 o# o* ?$ M1 h
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x2002 b1 V) M' k4 {; U1 y6 g6 \$ j
> sfe r src.bin b00000      ; 以 B00000 为基址运行
) i  I6 H! g- z/ V' W0 P> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行. s2 A( F* k5 r; X
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
: X: l$ M1 h0 X# B4 {7 T
" P; z$ X- }6 H) \1 Z4 @3 G4 I- M5 K+ H1 S: b
交互调试:
/ d# H" h4 {/ I6 Z) j======================: D# ]7 P/ A" u0 K- H5 A) H
> h              ; 帮助3 Q3 B3 T% G0 ~3 e$ L
> g a00000   ; 到地址 a000005 Z) s$ {, D7 L
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)& M; y, j! W' H' m8 R+ }
> d              ; dump 内存 (现在地址)1 [" h+ d2 b. M0 c- y1 E6 i
> d a00000   ; dump a00000 开始的内存6 |& k* x2 x$ s& V! k" Q% N: \
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
4 o" v) e) e1 q8 ?: l> d r            ; dump 注册
* ^. m" s9 C3 |/ G4 `" B1 |> a              ; 单句汇编' O5 _0 [- P2 g0 H" y4 a9 R% G! ~
> a c7d530   ; 单句汇编地址在 c7d530) Y, [7 p- M/ _. H
> u              ; 显示反汇编
  b% @9 U5 I4 l" @& m3 H3 ^4 E> u a00020   ; 显示地址 a00020的反汇编
; Q+ ^; v9 k" A" N6 y> r               ; 在现在的地址上执行一条语句7 C4 l! [3 R5 [( k7 @3 T5 t
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
* c2 }4 ?9 P  ~2 y) {# M0 @> r 0            ; 运行到返回语句
8 S4 {5 y2 v) D4 i9 V> r -c7d580   ; 运行到地址 c7d580' v" N. |6 i. E) a3 L' s
> q              ; 退出
) L0 r, F% b3 _# F# @/ v
2 j* f/ q8 s$ M*) 所有未声明的语句都会改变当前地址。6 z0 H6 u! i9 y) c
+ y5 |, E& l" _
+ O7 Y4 E( H0 c+ X: E
特别的助记符:; C' {1 C# M, p& X( e: X
============================9 b% j" W. J2 I  [
*) 所有C166的汇编格式
: U! Q! e+ }3 `) c9 C0 l/ C*) 分号用于注释 (在一行的任何地方)4 _. D6 r2 d& d% K# h( V/ t
*) 特别的助记符如下 :
% X/ D. ]) `" `7 s   #include filename    ; 包含文件(各种定义)
% l6 B$ ?8 ^- S* n1 G   #define var value    ; 设置替代变量 var = value7 {) p; Y: o, d7 h2 O( ]2 J/ x
   var equ value        ; 变量取值 var = value
  W7 @0 s4 N, O( H   db 'X',36h               ; 定义 byte(s) 数据区
( x! Z. P% R! c/ o! N" k! T$ R   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
4 l$ I( \: L4 e3 w( F   org                       ; 设定当前地址
# J8 r# ]4 o% V& W+ }   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
' P. a/ w2 W( A4 l& r   end                       ; 结束记号5 j  u7 K* o* X+ N7 ^* S; D
   ;#name XXX.string    ; 定义补丁名称 (XXX)1 _+ \4 D0 R7 u/ h
   '                   ; 注释将一起进入补丁- J8 }9 s& ^; M) G
   ''                   ; 注释将一起进入补丁,加回车
% k. {" l$ U# P- U   ';                      ; 以下内容将全部是注释,直到出现 ''
; r8 h6 _) u: ~. A; Z# Q   ;'                      ; 注释将一起进入补丁
' D, T* z3 ^& u' o8 F9 q   + - * / %            ; 加, 减, 乘, 除, 求模 操作+ B% ^' h; F# ^, b
   >> > < <<         ; 右移左移操作
; q' d* N. d5 V   & && | || ^ ^^    ; 与, 或, 与非操作
" k6 |5 N, i9 E2 ]1 K: E   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2), v# `  Y) p+ \  W% o& E) S1 ]
   page(value),         
4 ?& Z0 l; k2 l( K( `' |8 ~   pag(value),) l& k+ _; P( p
   p(value)             ; 页值 (= value / 0x4000)0 _, E1 v* \' s' x: t/ @. w& ~
   pof(value),
/ ~- q/ D  E3 H$ U0 s* ^   q(value)             ; 页偏移值 (= value mod 0x4000)5 Y* L% f6 `6 f. [: I* R
   segment(value),
+ i2 t  W" l8 A4 a   seg(value),& O- X0 L( O9 g0 w. T
   s(value)             ; 段值 (= value div 0xFFFF)
4 V' N+ x& f3 g0 K! d& q- r& M% D   offset(value),
0 f1 I, G  F3 ]6 O( f   ofs(value),
, M& _3 n0 O; c   sof(value),; ~! R/ G% g  _! P+ a% c" a3 z
   o(value)             ; 段偏移值 (= value mod 0xFFFF)
# E3 T- g+ v% G+ s$ @& q1 M7 K! ^/ V
*) 例子:
- G+ {* R& [- e# }6 g1 |7 r4 e" @) P" q! ^, Q1 n
;--- Testing ---
+ k" D. S. ~& S3 `, V% J- p, t8 v0 S" B
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
: r2 z  w  W* |( m2 c# k6 F0 I: F, {  x# }/ S! W6 J
#ifdef ME453 ~6 x8 Y) g3 t2 }  G  q
  #include me45.inc  C  z5 n* {5 W! [: i5 `
#else
' E. ?: }# T1 s7 M3 N9 E7 ~  #include sl45.inc
' A4 G1 h, C% |) {  #define  FreeRAM 37h:3600h5 {+ ^9 |$ a( f" M8 h) W
  #define  memcpy  0c7b384h9 R7 o2 Z3 C" e5 _  V& m: C
#endif
# @+ z) r# d, a6 m; N7 E. a8 z4 y
$ D  v2 A6 h( k+ S# q;#name TST. Test Patch            ; 补丁名) O- N. N3 C" u* M/ y
: y7 F- `- F9 e9 E9 S( Q
'Firmware : sl45v56
% ]4 p7 t3 I* O$ k9 q+ d'Author : rizapn
* J. m3 Y: w- r( b4 _: g$ J'Updated : Aug 18, 2004( @4 U& O0 h0 ]5 d$ E

/ U: u" g& B9 Y) V7 Zorg 0c7e000h
& r  [/ W/ p0 x3 A& p    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
* ^4 g9 B% v2 R    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值+ w  m& v5 d" K1 k
    extp  #p(data2), #1             ; 跳到 data2 页) s# `1 j8 x9 |) b8 y2 v; w8 z
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)+ ~% G. H8 M  U2 O2 H
    callr sub_1                            ; 页内调用
! W4 h1 O$ u& r& L; E& {# F    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
" m1 r/ T5 |# ?* I$ Uloop_1:
& N7 r, [& e) W" m% x3 v+ \  i* o* v    mov   r2, #1234h# Z: o( T  B, m& k; B1 w" t$ N4 s
    mov   [-r0], r2  f$ Q8 F, V, _
    calls memcpy                    ; 调用段表示的子程序  S6 G$ w' P1 g$ \4 C4 k
    add   r0, #2
; L& x, q* C9 ^    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处7 |  ~/ F; c2 T% Q) x6 Y) b, K
    rets' [: ^% c8 G* n# o

4 c5 e' r) ^# e5 @6 g8 tsub_1:6 @7 a/ X$ o5 z& V  {$ y) X
    mov   r4, #1234h2 W6 n# x! B( w& x1 U
    ret
" n# L9 ^( J, {
; W) p7 W5 n- w- x8 u7 jdata2:
5 m( e$ d* w5 ^5 N4 g& |    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
! Q$ v2 A0 S, g/ R& ]# d* ~! r0 p
end
2 }' w( ^8 g8 `. e4 X4 y0 O* s2 [0 Q7 ^0 t
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 A, `" Y0 P: p* K  {7 B* P9 C# U( P: m1 |. t+ K% X! o
Allaahu Akbar,
; o& \3 D0 c8 Q9 Y* XRizaPN <rizapn@yahoo.com>( ^( [  v9 L$ w
Jakarta - Indonesia
/ C, t1 J8 o; M; f+ S
! T$ Q/ ~1 \# ]: t$ V[ 本帖最后由 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-6-7 17:47

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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