爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
* ~. `) \" A6 ?- H/ f: X4 Y
  G& I9 E8 ~" m简单帮助:
! \3 T7 X; L9 F+ A$ w! H====================# ~5 ~4 m, o$ [* Z
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。; V1 W4 B8 ~- A5 g! V
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.( d0 U6 l0 A/ u9 e' K. i

9 X9 F% `: C2 z! w& t# S- S2 M* F+ o7 ^+ W/ T3 ?
搜索空白区:/ w. k6 X6 N/ U& w/ W0 j, B
=====================# b8 p: `/ E  Y
> sfe 0                        ; 帮助. U" _3 x4 ?9 t0 r) A
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
6 Y0 r( E" x6 `! z> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间7 [# |+ g1 u7 m. u: {

) e+ B4 S% a; ^7 ]; o; A6 F二进制拷贝:
+ c# K2 n( a/ n============
+ q+ ]5 L7 o0 l. z  _> sfe b                                      ; 帮助
* F' _9 y$ ]! K7 x+ N> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin  j+ D% t( B1 @" G$ }7 G  b! j& ~
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin1 E2 i, N/ `! o  j! s7 Q5 J
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin0 x7 t. T5 q! f3 q) v7 g
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
+ z! _  l2 n% \2 R8 @! ~% E3 a* W+ J+ \4 E4 ~9 A
比较文件:! W  b( t# q  O% u. x' W
==============7 f8 |' w5 B% j* y- N& O- C+ l
> sfe c                                              ; 帮助
8 k% [5 \# c  F- O3 V1 u> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin* q/ D+ j! v: ~, I. \3 l  b' k0 f" B" u
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
1 a0 n" W# [5 c* Q+ e$ O> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
  W8 a& c$ w/ k2 s  |> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )0 g& Z5 F. ~% n9 f' R6 u5 s5 Q% A
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000) S* V, A& t0 @% I; V
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
9 I! |& B$ D$ X> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)4 F$ F% |' O0 [9 m. p3 [( d

. Q) J/ i/ i- n3 N9 }发现16进制的地方:1 `* }4 X+ C6 f  p& J
====================2 L3 c+ t6 T! O$ F3 v/ M+ N9 P
> sfe f                                     ; 帮助& K# w! a& E( }, M$ c3 |  E; a
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个- F2 }& _, t& F7 H8 I* O+ V
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找( G' C- q6 v7 o" e" K' U6 C
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
0 n' f5 q* I5 Z" X" ~> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找# `, S7 r* E* S: R" h' n) |! H
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小5 @, I. E9 D9 S1 P; d: F; p
> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
) f( K' w1 Y, X9 k% r5 ]
; s+ Z" x" j8 d. _提取语言数据:  a- w* W$ h& M+ O
======================
0 x% u( w- q* Y5 v3 z6 O; _3 m+ a4 X> sfe l                                          ; 帮助
: h) [/ T* V+ q3 F2 _7 ?> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据8 G! C4 [3 P/ Z, d5 m# c* q
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
* J& Z$ b3 J8 u/ {* ?> sfe l src.bin 200 2                       ; 用第三种语言显示字符串5 b4 h* G# T8 l; u& G5 O* ^& a
> sfe l src.bin -1                             ; 提取第二种语言
7 p) R& n- g; i1 ?" ^) G' g$ ]4 f> sfe l src.bin -all                            ; 提取所有现存语言& F( y$ _0 H* W; S5 b
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
* }# a" ~" E, h+ O5 s2 m> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)' J: v! {$ m0 H! a! p% x
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本/ i, _# v+ i4 N
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
* ?* ?1 n9 Y' D8 @* J+ T! G> sfe l test.lng                   ; 检查test.lng 语言包
1 i" i( s/ n$ M9 T7 d; p9 `- L$ p1 X> sfe lc test.lng                   ; 检查和更正test.lng 语言包
9 p" Y0 ^2 j/ ~+ @$ L0 M" f$ ?3 Z# ]' k: ^1 v- z1 a3 Q0 ?' `
提取菜单:9 |, `& Y/ F) W
=============0 v7 r' c- W' R, Z1 z1 U3 k
> sfe m             ; 帮助
& {* E) V/ @+ O# r. g> sfe m src.bin    ; 提取菜单结构和入口- n* A. D5 j4 y: E' D
+ Z% a( Q) ^; c  V! s1 D  [
) W" G+ H6 t0 I. q
补丁:
2 M4 J/ t# g0 T" d9 e' T=========, Y8 u2 k; F& f6 R. n8 K
> sfe p                                        ; 帮助
8 L+ t; u. J9 ~4 S0 d  E$ G> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
! M  o7 i7 X" b, L" X> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz5 e9 \; T6 _/ o3 K+ ?0 {! o
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz # S$ z. O5 V+ M4 ^

3 H+ v: a4 P9 ^, k9 g2 S  V1 I; [, A8 P
编译:) o- |" Y3 _) B8 }9 Z
==========5 q& Z7 {% t3 D3 W6 v" l6 t2 J
> sfe a                                     ; 帮助8 N: D* I$ c" e1 Y9 ?2 |
> sfe a src.asm                          ; 编译 src.asm
- p% u5 }6 \2 q  o> sfe a src.asm d                       ; 编译 src.asm, 完整输出
3 p4 V/ x4 n' `% o. }. U7 \> sfe a "mov r12, #1234h"          ; 单句编译% h! U5 p& ]$ a. X9 a% c
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译" v$ D+ H/ }" }/ Q$ x# Y4 G
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
. P- x+ h0 x3 C  q  u> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
3 @* F3 M1 ^* m! l4 m6 }> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
4 p6 \1 g, p9 R6 }# }# @> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
5 J8 P8 I7 p. R2 ^6 G> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
) c* ~% G/ r' h9 C
7 D4 V  X% q3 N' E0 S*) See Assembler Part to get more 'assembler' function detail
' T2 _3 r* s& w0 b8 Y2 b9 E
' d$ }$ v; _- j- Q) i9 G0 y
( `7 n7 O" f# R9 f; S反汇编:4 F1 v+ E2 ?+ t8 K, _1 |
=============
8 V# M; b. w3 c+ Q' C' P> sfe d                                       ; 帮助
3 k# ~4 I3 B/ ]3 G; Y  f5 j. e4 {' q! W+ t> sfe d src.bin                             ; 反汇编 src.bin
+ b7 ^6 u" q& A# H& ~1 r> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
3 F7 H2 U/ S, b3 z0 |$ O; Q> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
) ]4 a. ?. Y; `& p> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000; v7 d6 T, g2 P- T/ ~( D" h
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
) d3 U! E2 S( c( G; n5 @> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址" @4 `9 i8 q7 t5 I, p
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
# b0 y! m4 H2 \" k$ X> sfe d image.bmp                  ; 单色图形汇编输出
; H: V" j1 _2 w0 _> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
3 Y; b0 \5 U* B  k7 ^; K( h" `" c9 }" _( N/ ]& O& z, U8 B3 I0 p. T3 J
调试:
" G- ?* W1 {1 l! ?: g# D% D=========# l8 s/ \* T* t  x3 I
> sfe r                          ; 帮助
( C- l6 N, g4 ?* ?> sfe r src.bin                 ; 运行 src.bin
2 u0 v: @6 o$ j> sfe r src.asm                ; 运行 src.asm 汇编文件; ~1 U8 C& D  m1 O
> sfe r src.asm ,n            ; 同上, 正常输出' j1 a, v* @9 Q2 v0 P# N8 r! Q/ A. m
> sfe r src.bin,200           ; 从 0x200 地址开始运行& Q5 l: g3 T0 D+ k
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
6 ]: x; B* l0 Y2 g) Z$ T> sfe r src.bin b00000      ; 以 B00000 为基址运行6 o& G" r* T+ O8 {
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行1 f  j; T5 Z+ u. [' R: k
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, i& o; a1 I( x8 s2 y4 u) C
5 [: @) V/ b: F- c$ A% y/ e. f5 q! P
交互调试:: n6 G) U0 y* M9 @: R7 O
======================
) ?+ B; ?' P$ m9 m4 u: B0 ~> h              ; 帮助
1 ^9 F1 e/ R# Y% X& m/ Y& o7 l> g a00000   ; 到地址 a00000
$ o- l+ }+ R2 C> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)3 g" c) I1 s3 k2 _
> d              ; dump 内存 (现在地址)
% d- K- L$ w( ?; H  p> d a00000   ; dump a00000 开始的内存7 n* d- [( L" [/ n$ K
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
! e( J5 o/ d( ~- \> d r            ; dump 注册6 @0 U6 H3 Q1 S6 Z7 E/ M7 }$ K( n( M
> a              ; 单句汇编
# J  y$ Y) b0 y" |+ B> a c7d530   ; 单句汇编地址在 c7d5303 s2 g2 B, y$ F- ]' Z
> u              ; 显示反汇编
, I' h6 b+ b9 j' l$ r. Q> u a00020   ; 显示地址 a00020的反汇编2 D5 u* {, w8 y/ n& c) Q" |
> r               ; 在现在的地址上执行一条语句
7 M' P' M4 ?' G. c+ A: e) ~> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
+ `! x& a9 D" y5 u& V> r 0            ; 运行到返回语句6 q: L; `$ a. G5 Y  _9 b: I/ u
> r -c7d580   ; 运行到地址 c7d5803 w; b- r- K( x& t5 _" g/ l- a
> q              ; 退出: u* V) a0 o, q% N9 U, m
6 ~" a9 t7 N8 r3 g
*) 所有未声明的语句都会改变当前地址。
: F+ d1 n1 G6 l: ~, e! P, P/ w! }" U) F( {# S

* [" x% {9 ]8 ]1 K; j/ i2 z特别的助记符:+ d+ t, s3 W0 f
============================/ U% K5 \& t0 n: V
*) 所有C166的汇编格式, F% @7 m" A& R  C8 Y" h& A" x
*) 分号用于注释 (在一行的任何地方)
, U, Q5 p5 j7 G/ M*) 特别的助记符如下 :7 s+ n& |9 K) R" h6 [: }, N. D
   #include filename    ; 包含文件(各种定义)- {0 x: K3 M( q/ [3 ^6 o9 T: l
   #define var value    ; 设置替代变量 var = value
4 b6 M* J) Q, b. g5 i1 ?! S   var equ value        ; 变量取值 var = value1 k6 f& Z" y# L( o4 a$ _% G
   db 'X',36h               ; 定义 byte(s) 数据区: ~  E' F7 y9 c, n4 s4 X) g3 ]! Z
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
5 i' x8 q, l! n) u, W" U: [   org                       ; 设定当前地址
& J$ E( Z6 J3 ?& Q8 C3 H; P   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)) F; {0 c9 o3 U
   end                       ; 结束记号0 t8 q: I  u2 u. F
   ;#name XXX.string    ; 定义补丁名称 (XXX)4 a( ~6 j; k3 }7 W7 q" G
   '                   ; 注释将一起进入补丁1 \# w4 B! Q- x
   ''                   ; 注释将一起进入补丁,加回车$ O: g0 U2 N- X5 h
   ';                      ; 以下内容将全部是注释,直到出现 ''7 y8 u6 c& N' Z
   ;'                      ; 注释将一起进入补丁/ Y! o& q7 p; w; O0 j( x( `1 M
   + - * / %            ; 加, 减, 乘, 除, 求模 操作: D# S7 m  c8 B0 N$ ]% P; S
   >> > < <<         ; 右移左移操作
1 T0 ?- u) {, j! F( x   & && | || ^ ^^    ; 与, 或, 与非操作, L, p, s' b+ v9 r8 t0 k2 i
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)- O  z" C8 ]. A( N# s2 ?6 e1 x
   page(value),         
- `9 x1 m2 h5 y) w& K   pag(value),: E- N. _: f; N+ K( ?
   p(value)             ; 页值 (= value / 0x4000)& r$ s( j3 |6 a- ?$ e  u
   pof(value),% E* Y- L/ M" M! J  v
   q(value)             ; 页偏移值 (= value mod 0x4000)
& A0 U8 [, p& N$ n   segment(value),5 M2 ]% A* g+ Y% a# I
   seg(value),
3 k, |- D$ o3 x4 U   s(value)             ; 段值 (= value div 0xFFFF)6 o, m6 i8 @3 m6 a! N) f
   offset(value),
$ M  y! `0 c+ s$ ?   ofs(value),
; O# T' `" F) [; \   sof(value),
# k) n3 e  T8 h   o(value)             ; 段偏移值 (= value mod 0xFFFF)# Z! m) L3 j& X- K/ a
* Q$ n& V* _- A; W3 k9 {: W
*) 例子:: b7 V0 E/ O& F$ l4 I, a

6 b6 u' D) x$ r+ g0 _  T: h;--- Testing ---
2 d3 ?4 S1 s2 U) x5 t3 ?; Q
! Q7 C4 ~) x' H- ]* |( V* P. ]base 0A00000h                ; 自动转换文件地址为 SL45 内存地址& ?8 [, |* u" ?! c7 J9 z1 e1 Q

7 a2 X, s$ F8 S#ifdef ME45- m9 _  l% }, ?( H2 o. N: t3 X
  #include me45.inc
( L# S. Z3 @, B" G" ]#else% }6 u; O0 r) P: |# f
  #include sl45.inc
' L2 \% K1 i0 E$ X  #define  FreeRAM 37h:3600h: e8 s: K; f9 R9 T* W, ~
  #define  memcpy  0c7b384h
" `# C6 R" ^2 b  v! z) ~#endif1 y1 U# \# C* D

7 V+ z( W8 t& |' O2 g;#name TST. Test Patch            ; 补丁名
: _, b+ J+ s8 I$ C- u
& o- I% p; |6 \. _. x# Y  u'Firmware : sl45v56
  B6 j% ?+ e% V'Author : rizapn& w% R1 x% M/ e, ~
'Updated : Aug 18, 2004
4 c' f0 q( \$ R0 h4 V) R3 L! q' h1 B' ~/ v
org 0c7e000h
6 X% o' Q: M5 A    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移1 H8 v0 J$ h8 _8 @0 g$ B; R' B
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值! m. G5 N3 O: \& J( J  ~' A
    extp  #p(data2), #1             ; 跳到 data2 页
- P0 x% ?; H( ]( O- x+ J+ w: y    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
  y% j- P4 P4 S  D8 P% V# w6 h    callr sub_1                            ; 页内调用
; F; f: O2 `2 i: ^% I5 K8 k, U# a    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
$ e' c1 j; \5 {$ R: Gloop_1:! T! Y8 `) ]9 T) ^) P
    mov   r2, #1234h6 H+ Q( u% b9 u- `9 q
    mov   [-r0], r2& Z  k4 D) x' N7 E; x
    calls memcpy                    ; 调用段表示的子程序% \- o8 N( r3 @3 {8 S2 b8 n
    add   r0, #25 u' Z: z# A; l( ^; P6 b! \* k
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
$ ?! Z- l# c; w& F    rets
3 J) N4 r- h/ \- E/ U
8 \5 N  h5 R6 T; @sub_1:6 ~: A  b' I. x! P7 _6 p" d' |
    mov   r4, #1234h
* K# [" t4 e1 d) W5 C. J; V    ret
$ y4 F9 C8 P: D* X' _/ I$ \5 Y. ]1 ]+ M% S! @8 Z+ u
data2:* W. y1 b6 ~, M/ x: ~
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
! {  w$ A3 u5 t9 V( J/ i6 Q9 u# m: k6 q, j+ v8 |* F
end
6 G, D  ?  w/ K$ @, Z% t. K2 H8 X, k# y. Z* `
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~- W( L) }- U0 e

6 J) f# p( u4 u/ F! t' I; p+ jAllaahu Akbar,$ y  ]3 M1 g4 f& h( |7 T- y" @1 S
RizaPN <rizapn@yahoo.com>
/ x, w( C  q1 f6 fJakarta - Indonesia6 L. ~% g6 Z; Y
0 I6 C  C1 ?" m: _( w* 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-9-18 19:26

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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