爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:7 g7 p- ^( E8 ~9 f, v% b  C* J" b

8 K; {3 }2 z& ]简单帮助:7 Z! ?) s5 N8 w' k; p, V
====================3 l1 ~. V- q: y
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
% y! P3 w0 w, w3 k*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.2 J6 h- `5 E! e8 x8 ^
5 {* i! i; Q  o3 M; o7 O. B3 J9 w1 s

, W$ {+ R6 Q3 G/ A* r搜索空白区:
! }; v; M& w& o) `) x  D=====================
; K6 @1 K5 W" B3 P> sfe 0                        ; 帮助2 y8 i) K) M8 x
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
- J' J& y! D/ Q) j8 L& ?4 X9 D> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
' ~9 z1 Q: k/ k3 u9 o
  A2 M/ g- E) g+ Z9 a3 B/ |# U二进制拷贝:* c+ p4 u- O1 l( d1 d4 s
============
4 i* p" s# U( L" J2 m! a> sfe b                                      ; 帮助
! K; s. h! q6 c. x) O* M3 H3 o. `> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin- }9 |% U: }$ |& I. Z4 U
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin3 S3 y5 b) {5 m: w# a; t
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
9 `4 @2 E4 G$ Q1 E) J> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200' K# l/ Q; V- b# ^1 _' {
  M- i( v2 W! x
比较文件:
  H! l& f. p8 l2 Y* k! n==============  L* Y  B' H2 A- {
> sfe c                                              ; 帮助
  ^% V8 w# B. O6 ^* B7 N8 d> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
1 I: I+ p# }( P6 U! e( s> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )* m5 L! k9 G. J, u' ^
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
; F& V" H0 z# X; A/ F. P> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
  c; G, j- @3 @; ?0 ~$ ?  A> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A000006 g0 W" K( b7 X/ s5 t; H: {9 f/ S
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
( r5 g4 T1 G6 q& O% |> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
$ S, D, I$ W. W/ U& P! n+ G2 Z  I9 u, v7 o0 _6 \( F9 N# J/ j
发现16进制的地方:
( j. q/ j- H, N4 S; S# S- g2 k6 Q$ w====================- N- g" d1 P( r+ I
> sfe f                                     ; 帮助$ ]6 `6 L6 g+ N5 v
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个$ \( S- \4 O: ~3 Y1 w
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
; I% R; g( X2 D" O8 _> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes  G8 ]1 z: e5 o2 e% {( H5 }& A
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
4 v; D  t8 B; ?5 K, b0 @> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
) O% c; z0 A8 h8 k> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
: Z+ ^8 M# n9 f, s. l0 G
: A) E/ y! V% F- s" d- x提取语言数据:" w$ y2 P# ~/ u8 N- v
======================$ O6 g( T, @4 Y, U+ U
> sfe l                                          ; 帮助% l- N6 p8 W& u+ h$ \6 ]  O$ `% I" w
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据$ [& A0 w1 y* J7 q- ]3 X
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
) H# `  Y+ y9 \+ b7 v) ^> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
. a9 o2 Z# U* F8 Z2 P' D6 S> sfe l src.bin -1                             ; 提取第二种语言- y& B) M7 B, m6 D( g/ u+ L; ]
> sfe l src.bin -all                            ; 提取所有现存语言
* k8 k0 E9 T# Y: k> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
. d: x) I2 ^" d8 D/ I> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
% ^* R7 H! V, D% r% Y> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
- D! T, Q5 h# e1 d2 F; m/ U> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 + Y/ R: ^1 A# s& U1 N& Q
> sfe l test.lng                   ; 检查test.lng 语言包) f$ t! w" T8 B% ~7 U
> sfe lc test.lng                   ; 检查和更正test.lng 语言包' d0 v( `3 L6 ?- a$ U7 y# B$ _
4 O' m, [' O# `) M% f8 _% t2 z" J; M
提取菜单:2 N8 d7 P! v4 p% [: c8 Q5 {2 y
=============
% v' a' ?5 t& ~! _> sfe m             ; 帮助
+ n& x/ j7 F. C> sfe m src.bin    ; 提取菜单结构和入口- e' K/ v( n5 o  Z6 \

% u8 B  }- Y% r* }# u" n" d5 ^% J& Y$ }& }+ i
补丁:
' r. ]/ B+ R3 x7 Z% g=========
+ |  w- D; E- f! y% D1 d/ L% f* Q> sfe p                                        ; 帮助& E6 k, g  |( V
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
8 p1 s3 E6 e4 H. o/ C, K' E. H> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
9 X* ]. S  M" S" W' }: A  Y> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
. a  J- r. ~) O/ @2 s
7 a1 o  Q6 X( R2 r; Z( u: _# L
3 C6 O8 T& Z+ z) d% s. ]编译:
5 o* G7 v4 M: S4 l3 r+ E==========% M+ d0 G) g" B- H  H
> sfe a                                     ; 帮助
; u4 u, J# D6 o  i> sfe a src.asm                          ; 编译 src.asm/ ?6 b& I' i. q# ?0 l
> sfe a src.asm d                       ; 编译 src.asm, 完整输出* r2 s# N! J% v; p
> sfe a "mov r12, #1234h"          ; 单句编译
4 R. K( N9 a; a$ v> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
9 I/ q* a) {. G+ E6 X: O; Y$ W> sfe a src.asm,TST                    ; src.asm编译成补丁格式
0 v6 K% i7 S% A7 {  }! H- d> sfe a src.asm,TST p                 ; src.asm编译成补丁格式* @- Q- w, y" ^; n! l* t) `
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
1 B2 w# W$ s/ D4 [> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000006 l2 c+ D2 r5 O* t
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。: K% F' I- S. P* i( i( E  Z9 r/ u
) n- y4 F1 q, B0 }; C" _! R
*) See Assembler Part to get more 'assembler' function detail
/ P" [) }7 _+ V# \0 C1 o
& i4 V5 d! V' H  t: l- A
; g! l1 z& q, J8 @5 O反汇编:
$ b/ e: n( ]1 K=============
3 Z8 n' o7 r( h& c> sfe d                                       ; 帮助1 v9 W. w) o& ^4 n8 E
> sfe d src.bin                             ; 反汇编 src.bin3 K* v2 k5 X, b: U/ d' j2 c
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin# g! X  B+ L. Q/ [) `- P  l
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节4 {* J% G+ O4 }& o* C, n
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000$ V0 H. _' Q9 g/ p3 v
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
" g4 D& c3 W) M8 V) F> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
9 A1 b* t  Z* ]; c; d/ T- `> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件; d" m& [9 Y/ o
> sfe d image.bmp                  ; 单色图形汇编输出
0 E! r* X% L4 q3 f: N5 }2 y> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
! x1 z& G0 U& A2 D& k, y
+ W9 N7 b* }$ K- C' S5 i3 ?0 A  `4 m调试:* N7 B2 _( T+ B0 P3 o9 A* |
=========
9 Q% @" M. |' [> sfe r                          ; 帮助
* }+ G  ?! z2 I4 x3 F) o' p) w0 k  B2 A> sfe r src.bin                 ; 运行 src.bin' i) \  A1 S: B- A$ C6 T; g
> sfe r src.asm                ; 运行 src.asm 汇编文件
$ f& h) g8 t# S1 T" @7 C> sfe r src.asm ,n            ; 同上, 正常输出" Z/ J& S  o' L8 P9 @$ R; N# V( n% a
> sfe r src.bin,200           ; 从 0x200 地址开始运行; [; K8 O5 H9 j# ~
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
3 g) e0 `0 p9 w( F( S2 y0 w> sfe r src.bin b00000      ; 以 B00000 为基址运行
) \2 r) V. K) R; y2 n8 ^# l> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行1 L7 B( R  @) s  p8 b
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行. n4 a8 g( I) v- l. o
7 [9 Y3 Q) d+ z2 l; ?" ?

: a7 `# e) u  e" g交互调试:# |) J/ Z* ^& D0 J1 c$ W
======================
! A, F* b$ {" K0 X+ p> h              ; 帮助# y( E% p: Z" P4 x* {9 i0 B1 D& k& j
> g a00000   ; 到地址 a00000  v0 X* o  A$ P; F* p' l/ a
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)2 t, g3 R7 c, \2 U6 Y: [
> d              ; dump 内存 (现在地址)$ M' p9 k: F6 ]$ q
> d a00000   ; dump a00000 开始的内存
; b4 s) P' u- _, n8 w1 D- h1 a> d a00000 200   ; dump a00000 开始的内存, 大小 0x2005 i, l8 F1 k  c5 J) x: C5 F
> d r            ; dump 注册- ^  `# Q8 c2 h  ?, x5 }
> a              ; 单句汇编
& {& \* [# e- O# T# O# H> a c7d530   ; 单句汇编地址在 c7d530
% R3 K, v* I  Z. y0 h> u              ; 显示反汇编: x- N2 S1 u8 A- Y( h, W
> u a00020   ; 显示地址 a00020的反汇编% s' r/ z/ E' x
> r               ; 在现在的地址上执行一条语句* D$ Q: n' e3 K6 @
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)3 D0 v- `; M6 B4 y) s
> r 0            ; 运行到返回语句
: H) P; x6 }& M# r> r -c7d580   ; 运行到地址 c7d580
9 k" o* N# u. v/ w: e' X4 r  d> q              ; 退出
: W6 Y: {7 Z& ^0 H# k, }0 {) ~7 |9 J( e/ y* k; z: w
*) 所有未声明的语句都会改变当前地址。% @% p2 H* d. o6 F/ h' e; F$ L  S

* l$ Y# D1 i# i8 E3 L
, H* o! |: m# W* V! y特别的助记符:
0 h1 w' X, o' O: T, j============================: d+ G7 ?' i2 Z, n: D* s! n- ~
*) 所有C166的汇编格式5 g4 Q" H5 V! J' x
*) 分号用于注释 (在一行的任何地方)  ]# v# v! G3 ^+ h0 Y0 f" s
*) 特别的助记符如下 :
0 H: d' ^0 }3 w2 K4 N+ d) _   #include filename    ; 包含文件(各种定义)" v2 \+ ?4 m$ G- c
   #define var value    ; 设置替代变量 var = value
+ u0 l9 o( w1 @1 _6 y   var equ value        ; 变量取值 var = value) T0 @0 \0 s: G
   db 'X',36h               ; 定义 byte(s) 数据区
, c" `: r( o. J# }0 R   dw 1234h,0,'AB'      ; 定义 word(s) 数据区* C+ V" t1 O/ I
   org                       ; 设定当前地址- E6 u! g3 o8 J. S: C  T# M" d
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)9 S/ m5 X5 {$ M* D! \
   end                       ; 结束记号, N+ M# b( b; G& Z, m$ `' U; j' Y
   ;#name XXX.string    ; 定义补丁名称 (XXX)  x  n( r3 Q9 H4 C6 l+ ?" f0 O( u) Q
   '                   ; 注释将一起进入补丁" Q0 @8 L7 T; o& J: u* U: W, O" B
   ''                   ; 注释将一起进入补丁,加回车
# ~& E" M& I) b   ';                      ; 以下内容将全部是注释,直到出现 ''
' _0 [. c# W4 G8 z   ;'                      ; 注释将一起进入补丁! [8 R7 L- P2 z+ |
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
6 L$ S5 k- Q/ v# W; |   >> > < <<         ; 右移左移操作
" d4 Z6 F* t' L6 ^' L  F   & && | || ^ ^^    ; 与, 或, 与非操作7 O5 _7 B5 O: H" r
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)% t1 [4 Q& b0 F' l3 W
   page(value),         ! P$ T, J0 Q! ?" w! s2 ]. w0 I
   pag(value),' ^/ z4 C# Z6 G+ g7 ~7 P- f
   p(value)             ; 页值 (= value / 0x4000)
% ?+ A! {) v/ v8 X' F# l  L   pof(value),' q4 d5 T& ~- o* v6 c  z
   q(value)             ; 页偏移值 (= value mod 0x4000)( N1 c& h$ ^, `  \
   segment(value),
# Y3 ]1 \0 ]& i   seg(value),' a7 @* e4 E6 x% k+ l' x
   s(value)             ; 段值 (= value div 0xFFFF)
6 x& H8 F) R( ~  j9 }0 F( y   offset(value),
  c% q' v3 B# i   ofs(value),$ }. O, i! A4 ?/ ^3 z7 u8 E
   sof(value),1 {" b0 J7 T, B* P  Q
   o(value)             ; 段偏移值 (= value mod 0xFFFF)5 L: H) c7 Y+ J5 [. e0 W* Y

& I/ L0 |* c$ G- c/ T0 V+ E! C*) 例子:
; D. ^( Y$ q) z( L4 P6 {8 f) m, O
0 T! K+ L7 Z" g6 e& p6 u;--- Testing ---5 A" G: U, _6 I$ O4 m

+ J5 k9 x8 }' ]5 H$ @base 0A00000h                ; 自动转换文件地址为 SL45 内存地址4 F  v4 X' G/ h3 S: o; W" d
; F" U  h( G1 \9 E& G$ r
#ifdef ME45
$ J/ i/ z5 d0 _  #include me45.inc1 F9 U) O& q* D
#else, L4 S+ p$ o+ k' s" Q1 `
  #include sl45.inc
& k/ r6 G7 r- f: H8 t7 n  #define  FreeRAM 37h:3600h+ d9 I( T/ T/ `) {
  #define  memcpy  0c7b384h& q# Q) @* i% _. ~
#endif+ S! U' z9 _, ?" U& r2 t. g& e
" z: f/ H% C  t
;#name TST. Test Patch            ; 补丁名( a0 j) b. n, A/ N! ~8 r  y) f+ n

; \. I: X4 H8 I2 n* T( A$ c'Firmware : sl45v56
# h0 b5 L' ]4 g'Author : rizapn" M( M: k! R( @) |! f
'Updated : Aug 18, 20042 b9 s- c4 X* ]5 p/ f  F4 ~4 B% {
, C1 m6 O4 [" [# F
org 0c7e000h
1 v& \7 p% f) R: e( W) \( l. s    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移' ^; I6 R# d# l
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
/ |4 I2 y% ^! ^- Z7 P    extp  #p(data2), #1             ; 跳到 data2 页
6 h  s4 L3 ~, u: j    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)$ X5 d+ v5 _: _
    callr sub_1                            ; 页内调用0 R0 F5 V" B9 Q
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'! x. u/ Q2 i! D( I$ V
loop_1:
% Y* s( x* {# s% T8 T    mov   r2, #1234h
: x/ d1 @: d, B1 A' x- O% r' v    mov   [-r0], r2
% t9 ]. n. O" c9 h6 Q    calls memcpy                    ; 调用段表示的子程序. r; s: {6 N+ b1 Y
    add   r0, #2
: L3 _. G" j/ d% _" j    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处* T5 p8 t; f; T
    rets7 N5 I5 }" O* R3 P; K1 W" k

2 w: ~* k0 `8 i7 [% bsub_1:: L9 \8 N* z5 g6 n1 s. M( O$ M" S0 P
    mov   r4, #1234h
) P9 Y# I7 E+ B6 f$ I    ret
. t" s3 g& s  r, K$ K6 w, w& k; g* F3 D( P) j% S+ f
data2:' U" M% ?; \' m/ x2 y- a
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
& Z( t* m$ \2 P9 R8 i# G+ H* n8 a. O2 e* j% w0 A6 h2 ~) Q
end
: e5 R: t0 B* ]) u2 q- d4 `- t; r5 h% u* k1 R
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 i  g4 A! [7 l$ Z! M- B/ c
. M9 V2 L6 r) I, cAllaahu Akbar,7 J/ Q1 u- I7 u" ?. ]
RizaPN <rizapn@yahoo.com>
+ Y, s# E! [" U' h, _2 b2 H" ^/ WJakarta - Indonesia- [) J, ?4 a, E3 {3 r! s9 L) G! C* K

% Q4 f( H. a; [$ N8 ][ 本帖最后由 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-18 17:46

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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