爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:( o' e/ ]% p9 y# n

9 O  i0 u# L! |* J. v  K3 o简单帮助:7 D1 k6 s2 X/ z3 t" {7 b+ G
====================
1 r/ q2 A& u$ X; S9 e% ~0 ?*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。4 k$ W& W, D/ A. G! A
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.5 V' E! I- ?5 j6 a

5 W% T" @  a- c& |
6 a1 l. T, V( N5 D# _2 a) i( [2 k搜索空白区:, h2 Y9 P7 W( Z7 d7 f) M% I
=====================
7 i# A" w+ Q' u( \& x5 t6 i> sfe 0                        ; 帮助  g$ n( ?5 s: N* h
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes); w& U, z7 u: e; |" V
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间! T6 v. Z9 T: I$ B6 {4 W; v
5 g7 K% ?3 S: L. x# o, |9 t
二进制拷贝:
  X0 \; q+ c* a3 B( J============
) Y  R/ e+ r# _, ?1 {, W> sfe b                                      ; 帮助
; T3 d% f7 H) J1 M2 J& Q0 c4 U> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin4 i$ j6 ^1 L* v, [! p3 }/ y) p
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
7 i, Z! g* y$ J* m* b6 r> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
) m* i! A4 z8 ]* ~0 D+ r/ ^> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200: w; f; O- v% Y7 `# }2 p9 U

# f5 R6 C7 A4 S5 \5 V比较文件:
. T$ W0 J  E& [0 B( @==============+ I2 |6 d5 U  @; T
> sfe c                                              ; 帮助. U. b+ ~7 g7 m$ ?  X& H
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
8 ]" U4 I+ {) z, O) _> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
2 y) [7 Q5 E6 k: W> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
1 E! T# \( Y0 W( K8 U0 ?8 }> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 ). F% V& J# C+ R1 a, H! u& q' g5 u
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
1 s! K! S1 y& n( E  I- u> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
6 T/ a8 [4 r9 ~4 l> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
& Q2 l" S5 A" b0 i2 g" f& F# c1 U; C9 i
发现16进制的地方:
5 h" W# @- B9 C$ }$ `, n6 c====================
. }. j6 {' [) `" K+ s> sfe f                                     ; 帮助
: D3 N$ R0 b! l, {: k1 L> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
8 \6 C/ r% J3 N# e> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
4 R, h) X- s& c3 s* h; Q' h1 M> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
% h) x0 F- {# q3 @. P6 l8 L, h8 c> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
" ?8 o% R( B" M' q% E" }- v: @* x> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
0 M, A5 U8 l; D2 o& B8 w0 [3 }4 I6 T' O> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.4 I% F* }: E9 r) u0 @8 ^2 p
/ t# @. u% ^' K2 Z9 I3 {
提取语言数据:, u. F9 X7 ?+ a1 j
======================0 T& b( {5 N4 H  e2 Z  D4 T5 w
> sfe l                                          ; 帮助3 e! A; ~9 F  m8 m2 h
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
' K( n$ _( D5 w% N) C> sfe l src.bin 200                          ; 显示 ID 200 的字符串
  \5 q- v& s/ ]7 l& ~  U> sfe l src.bin 200 2                       ; 用第三种语言显示字符串+ ~6 |' M$ m* P' g
> sfe l src.bin -1                             ; 提取第二种语言
; q" X6 D5 T# F. w! U5 S, V> sfe l src.bin -all                            ; 提取所有现存语言
* e8 M! L! O( \7 p0 M> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
( h' h* z3 C7 z, q2 r0 e: c1 `> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
# {( \3 @' {. z- f) {( c8 p> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本' }! {) @- C( ^" g# C4 F
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
7 U' ]" e' {5 g& L> sfe l test.lng                   ; 检查test.lng 语言包$ K6 E: ]" l4 r0 i0 f
> sfe lc test.lng                   ; 检查和更正test.lng 语言包1 P* Q4 U% k% C0 W0 M

* K; ~6 u" i- U- h2 @* k提取菜单:7 a) w+ f+ u7 Q* e+ {& G% d2 }* A
=============( ^5 ]2 e$ M$ L( S+ B  K" E# S
> sfe m             ; 帮助
8 C" ^5 x$ E: w! f  J/ ?6 G' g" V> sfe m src.bin    ; 提取菜单结构和入口! T2 |. w8 d" m" j( R

1 T& b+ e' c  P
# B2 p& g+ z: @+ Z补丁:3 C- [" h/ v+ A3 s  T
=========
  G& L( \7 Q4 s6 a# c) G" z> sfe p                                        ; 帮助% d. p# D9 P0 j- d( S2 t
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
; Z( L6 A& p6 p8 ?; w, K1 R> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz; d, Q" q" V. y
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz . f9 V, v; ~, e+ w% U

0 g7 G. R( x5 A6 ^# X! n6 x5 S
/ ~9 E9 k, [6 _  G' _" h编译:
6 [1 {+ m5 w; I9 t' |1 S# E==========
( r& v+ V1 d, v9 a0 j% s; a5 \> sfe a                                     ; 帮助
, h) m% X: y6 {. |9 w" v9 d0 r> sfe a src.asm                          ; 编译 src.asm! B2 m# G, H0 |+ c
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
! C4 }" E2 I. P1 U> sfe a "mov r12, #1234h"          ; 单句编译2 k0 I$ C1 Z; D$ R. Y
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
3 H# ~  f  g' j1 G3 s> sfe a src.asm,TST                    ; src.asm编译成补丁格式
* U7 t, E. [2 g; o> sfe a src.asm,TST p                 ; src.asm编译成补丁格式4 @; ]' j  Y# m! y
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
+ O4 L' t9 W1 G8 E5 p> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000007 }' H9 B  t5 I
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。* C9 m, a: E" ]( X6 D8 a/ f

' `  {, A- m3 `3 q*) See Assembler Part to get more 'assembler' function detail
2 K& h5 ~0 ?. l& K2 s' e* t9 @' Z( c/ ~

/ R4 E$ f3 O% D! i1 V( ?% A: ]反汇编:% J5 X  ~/ l0 L  \. Z9 |
=============. L! o5 U* x* _- f1 g: N9 ~
> sfe d                                       ; 帮助
* J- n; B0 Y# {) z" h" I1 ^> sfe d src.bin                             ; 反汇编 src.bin
: b8 p/ P( g% f( B/ \; V4 ^( C  h> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
$ b* x0 T2 [( O/ Y7 K! _9 Z> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
7 F' ^, c/ h) B> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000006 s/ Y) l( O& @
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止1 K7 Z) ~4 J/ l, Q4 ~% y
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
. Y6 B# w; g% ~% I" q$ a> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
/ u* K4 M$ k* D0 \( U/ r> sfe d image.bmp                  ; 单色图形汇编输出1 V( z/ f1 o: {) x
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。5 B, x6 Z0 ~% n/ w9 h) t
  B% D9 }# C) R: M8 ]
调试:9 N+ O9 S! H% `- M, Y  b
=========3 H6 ?; J. z! Y) z
> sfe r                          ; 帮助; p# N5 P# q3 j+ ?+ `3 w
> sfe r src.bin                 ; 运行 src.bin1 {' k+ `7 ]& y7 R8 K
> sfe r src.asm                ; 运行 src.asm 汇编文件+ ^4 t( T& p* A. I! {
> sfe r src.asm ,n            ; 同上, 正常输出: H! {( L2 U9 I& S+ J* W4 ]
> sfe r src.bin,200           ; 从 0x200 地址开始运行/ |- O  D; S- r2 c( w
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
* K! N0 \# Q! R6 t> sfe r src.bin b00000      ; 以 B00000 为基址运行
9 G4 ?) V! D8 ^6 `* H' g3 R8 r> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
3 _7 |# L' k+ X> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
+ \# s8 |& ]  G/ V. b
. R+ p2 W; [* \6 V
6 ~9 R. p2 ^+ M: z* R) x; S% b交互调试:( i/ N! V# K# y
======================4 `" |3 p, A  W6 p
> h              ; 帮助1 i$ W) \0 q. f0 I6 e7 s: {. X' U
> g a00000   ; 到地址 a00000
0 L. s* w* H5 x. _/ K> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
) M/ }( G% G5 r" T( K; y> d              ; dump 内存 (现在地址)% n9 G+ F( e& @8 p
> d a00000   ; dump a00000 开始的内存: q, a: O# e6 @/ D
> d a00000 200   ; dump a00000 开始的内存, 大小 0x2001 }" h# e+ n5 H8 @6 [8 V
> d r            ; dump 注册
' p* A, J6 V) _, |" E0 T* p> a              ; 单句汇编
! d0 |6 s6 T* G$ ^! b- T> a c7d530   ; 单句汇编地址在 c7d530
  A' Z- p; K! L' d- \> u              ; 显示反汇编
$ G, W( ^7 M# J. Z6 T> u a00020   ; 显示地址 a00020的反汇编
+ q: N( G3 D1 C6 e; F> r               ; 在现在的地址上执行一条语句
. d0 |  I# |0 w3 J+ m> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)) p7 v. f. t8 D% P' E6 i3 |! C
> r 0            ; 运行到返回语句
' ^6 D- X/ e' D5 n: f> r -c7d580   ; 运行到地址 c7d580
% Q! e1 z! V- J. R$ X+ Q& n& Y> q              ; 退出
+ p( h2 |) X2 I( R; M
6 |( N5 m$ x8 z* A; d+ D6 M, a*) 所有未声明的语句都会改变当前地址。
8 {% v  T. W/ R6 |, ^8 E' T/ X4 o, B6 ]

* z5 p4 `# V1 i8 }/ W# r8 E特别的助记符:
3 Z- A1 Q' y6 s2 m- o+ I============================5 r. A( Y$ v' w8 Z
*) 所有C166的汇编格式
4 N; b& J1 M1 k: w*) 分号用于注释 (在一行的任何地方)
0 d: z; ?) ^' M5 V*) 特别的助记符如下 :
  M, D+ q) `9 r- Y   #include filename    ; 包含文件(各种定义)( ?' ]. S. S" H  T
   #define var value    ; 设置替代变量 var = value
) W9 q. w# E; f4 n! u" R5 T   var equ value        ; 变量取值 var = value3 \3 O% E: G8 I0 b% Q4 w/ O
   db 'X',36h               ; 定义 byte(s) 数据区; e5 ]2 J  U6 \) k1 k
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区; r/ X. ]/ _9 c
   org                       ; 设定当前地址9 t( W4 u$ t6 H# B% x# H
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
, F. F" P* i$ @7 _   end                       ; 结束记号
$ D! {$ D6 {$ p( u+ b   ;#name XXX.string    ; 定义补丁名称 (XXX)
! w; e  }& I' B/ }& M7 e   '                   ; 注释将一起进入补丁
1 r0 o$ ~( @4 Z   ''                   ; 注释将一起进入补丁,加回车. b9 F3 h$ T6 K5 I9 l
   ';                      ; 以下内容将全部是注释,直到出现 ''
* J' K6 V: ]* ]. e   ;'                      ; 注释将一起进入补丁
' M) K( V0 W: o& {0 p) k/ H   + - * / %            ; 加, 减, 乘, 除, 求模 操作% ~: s6 ~, V2 ~6 H
   >> > < <<         ; 右移左移操作9 J% f6 W0 D' M
   & && | || ^ ^^    ; 与, 或, 与非操作8 X  P1 z+ p$ Q% E# E, K' K% g
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
+ U" }: R, A$ ]' A   page(value),         
7 B" n$ V" V# Y/ u   pag(value),
$ O/ i8 X1 K7 p   p(value)             ; 页值 (= value / 0x4000): F4 e4 x2 p5 z2 _$ r  ~) U* x
   pof(value),
8 U! w3 o% o! ?   q(value)             ; 页偏移值 (= value mod 0x4000)
" c( o0 h. p$ d' l* @   segment(value),
' Y( U8 q3 \  k+ d8 n% v   seg(value),
1 `. P4 [' k6 N" u( Z; ]8 m2 z% A   s(value)             ; 段值 (= value div 0xFFFF)
2 y3 ?9 x* v5 E- O, k& a5 J   offset(value),
7 j+ I% _* Y' D: S4 w   ofs(value),
) V6 Y4 V6 \* B/ u" R! I( Q& Z   sof(value),. c- L& ?& W0 \8 Q
   o(value)             ; 段偏移值 (= value mod 0xFFFF)9 X" `$ p8 P8 n- |9 `/ z+ ?
/ j) r$ t  @/ f/ ]2 h+ h! b1 S
*) 例子:
; X5 f7 m) ]) F2 W; W2 `! {2 U- a5 E% Z& A, A" r2 F4 y
;--- Testing ---
$ ^9 r0 l; \7 P
! M% v4 g' _. |* G8 M/ O  qbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址
$ u% \% l& n5 p( a2 D! U3 Y6 ]$ g# t' P5 A0 E- m& |& p
#ifdef ME45/ K( V2 o7 D  ?  ^6 a: _4 [
  #include me45.inc2 k9 ^& L+ J+ H7 d8 t7 b( b" R
#else1 a0 x; m( t: ]# B8 \/ S6 c( d
  #include sl45.inc
3 |: U6 g; {- I  E; O  #define  FreeRAM 37h:3600h
0 }7 t# S- E; }8 F. Q  #define  memcpy  0c7b384h2 Q- S4 z. ^% \  Q# M
#endif9 T% d! ^& ]) r% O# B+ b

& i1 @- a9 v1 g( c* _;#name TST. Test Patch            ; 补丁名3 {% a" u" s. D2 D
$ R. g+ W, j0 r, J  u
'Firmware : sl45v56
: V) j9 @& l8 Y, b0 s8 x0 ]'Author : rizapn  V5 W# Y* R7 k& N" H  Y
'Updated : Aug 18, 2004: z- s# o* m# `3 ?$ m

! T+ [! ^8 k/ [- w' z  o# o' lorg 0c7e000h
4 l9 v( R. k( s( u    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移& E* Q7 i; A6 p5 O7 ?; A
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值- O- S. H, m: P6 F- f4 p5 v- ~
    extp  #p(data2), #1             ; 跳到 data2 页' e' J- {& w: v  k  D" X$ N# c
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
; _8 q: \7 }2 r# G    callr sub_1                            ; 页内调用0 Z) w- }& M. J, P( ]
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'' j6 {: I( G) @! [
loop_1:1 j; }( L% z1 O  @
    mov   r2, #1234h: \4 f) ~7 h4 V# [( c
    mov   [-r0], r27 F5 `1 L/ m6 m% V2 B- I
    calls memcpy                    ; 调用段表示的子程序
- o4 X) k# h. P  p5 n0 J/ C3 O$ m    add   r0, #2+ P* k/ r! w9 a% D# D$ F/ g2 F
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
' g. }; O. _& [3 a' p0 R! x    rets' ~" q$ b4 E! ~& I+ I  j2 ^6 d

( E7 D  G; |+ F8 msub_1:% V0 U. y- U; ~
    mov   r4, #1234h8 s! _3 o5 g% P; e$ k9 u  A! |
    ret% y! W& Y% M, S3 v9 t9 t
' }& }. g  I9 p! t/ A1 \
data2:- E) h+ U; y/ f4 N
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
  U7 }& D) m" F1 Z
1 o" u# y5 }: t/ wend
) l; ^1 N. g% h: h8 l
" w7 U, X$ Q+ I7 X8 m7 N  c& R;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  R9 p# G! W7 f; v9 [8 y+ @
7 k0 U! H: |# i% |Allaahu Akbar,
9 b/ S0 O5 [6 h# H) nRizaPN <rizapn@yahoo.com>( B; c7 X: ~0 Z! r% |3 ~3 C$ V
Jakarta - Indonesia
9 ^( O0 }5 f: M1 A5 h( C& ^1 E% l- \& {4 a# \( R4 Z
[ 本帖最后由 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-10-23 01:08

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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