爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
) _' o& o* \0 |8 M
0 O  Y4 F( d9 r* \简单帮助:6 Y; G1 i. K7 l5 h- `% ?1 \  F" `
====================
  A7 p; M& L/ w*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
9 ]- N9 V( W* k" u*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.* [! |) o" Q# v* \

) D$ |5 j8 c0 o  `# u+ P$ P* @' u1 F& I; M
搜索空白区:; S" B9 ~) `) i' b5 _8 F
=====================
! w9 x' h" S' h3 ?, l> sfe 0                        ; 帮助' X2 V6 I, n: ?- S4 G# D
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
3 t( f$ N6 {8 M% C  Q, }> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
' ^; N% z4 ?+ h7 M- ^/ L% Z0 u( _2 c& n. X: Y* D2 Z
二进制拷贝:
2 z$ G' e) p2 W/ g============
; e! B& |& g; [> sfe b                                      ; 帮助1 b( h5 f/ c7 f
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin" h6 t, K" P2 X# _1 u$ d
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin6 t& m# O4 ]5 S* ~" T
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
) L! i0 P) S$ t+ n: C9 K> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
8 [7 u( \" I4 j7 A' F$ ~# B2 Q! v9 |$ l9 p. ?
比较文件:  t! ~8 B5 N. ]% b$ ?' g& M
==============
" \; Q6 s  N6 e2 k  Y8 l+ u8 [> sfe c                                              ; 帮助5 S4 p- K/ r# b/ Z6 y% O; @: k$ z
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin4 N9 z. h! X" U% _9 ]" |, |* N
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
  @5 Z4 z* W' S+ Y& t$ s# R4 {> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes1 L3 d! m7 E5 i5 f9 s! `3 x
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
8 q6 ~4 t. j. L+ {" Q' p! w5 T> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
- V3 r) @, [5 C6 E, h! C( ^> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes' P- Q1 H! I0 d
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)5 M6 \0 E4 Q3 C4 z# U  _
1 x# t4 B1 V3 `9 V; I( Y4 U) x: B7 W
发现16进制的地方:* W8 m8 L: a+ Z2 F  v
====================
5 ^; d6 Q  Y  }4 _7 @- `> sfe f                                     ; 帮助
/ j  }5 l1 U- c6 t  ^( n( R$ N> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个6 U/ j' s( h2 u1 X% f% A
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
/ j' s8 N, a) S& \6 A1 [> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
3 O7 o: p! H$ q. c+ e. o; c4 h& V> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找- @2 N/ C# Q$ h
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
# X' q0 ?0 P2 w+ ?> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
: R3 O* m& w- W3 T* w" h  C$ ^9 s- R
  d: P, Y* v' \1 H7 W: `- ]( `. x1 r9 q提取语言数据:
$ W& q* K0 U/ K9 a' H======================* o9 G, s3 h; L
> sfe l                                          ; 帮助
) y) y$ s: o  L! R3 `> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据8 Z1 c, y2 e+ ]3 D4 T( R' c
> sfe l src.bin 200                          ; 显示 ID 200 的字符串$ c9 v. x) P) ^0 H/ j
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串1 v+ i. A+ k) Z
> sfe l src.bin -1                             ; 提取第二种语言% |$ J1 Q  }& b5 K
> sfe l src.bin -all                            ; 提取所有现存语言
- @0 `: {: Q  j! y' r. ?> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
0 z9 p2 _- W3 M1 V% @0 F6 [> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
7 s8 Q! a! E. h0 A> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
, ?  `. m6 v$ y, U  x> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
; @& @- z  {5 X1 r5 I> sfe l test.lng                   ; 检查test.lng 语言包# D7 z4 C/ \. D+ C+ I: C+ U
> sfe lc test.lng                   ; 检查和更正test.lng 语言包7 b8 u* i  r: W* W+ k: m! }

, V4 s: J* u1 j& P  e' Y' y提取菜单:. M" A! Q4 a1 t" @+ g) Q: D1 n
=============# T- r- i* z" v7 E* S
> sfe m             ; 帮助  j- T6 P  @/ g4 u% O& B3 d3 t. k( U& ?
> sfe m src.bin    ; 提取菜单结构和入口
! L, @" p: ~. L/ y2 P
) {% B8 K; o% D% N
  d. W9 ?- ?. J' |2 V' s4 @( o! t补丁:
3 V4 ^5 f; H$ I/ N5 o7 ?=========' o) u+ b  q8 L2 ]+ F1 N$ G
> sfe p                                        ; 帮助" y7 c5 N/ z. \& k+ D# N8 Z, v
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin0 R+ ^& |8 f+ t" m6 `! B9 ]  J
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
2 ]' q, m4 x% E' ?! A> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 1 }4 |9 @! F* J7 i& [
7 F2 r* I) ~" [" t5 J

9 i8 b+ u  y0 p. E' q编译:3 _+ N" Z- D' T) G2 @
==========- K) `& s4 r- @8 W$ S- B7 D
> sfe a                                     ; 帮助
1 o1 b. ^+ h+ R> sfe a src.asm                          ; 编译 src.asm
3 n' @& r7 p7 ~% _( C8 B" ^  c' N> sfe a src.asm d                       ; 编译 src.asm, 完整输出
: l* ~) e5 b5 v% k3 T$ P> sfe a "mov r12, #1234h"          ; 单句编译1 {$ {4 G% l' X3 A* t& F
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
( B0 e2 o+ x* A0 u6 \5 a> sfe a src.asm,TST                    ; src.asm编译成补丁格式
' _$ x' G: u1 v# i> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
- h, C# T; c: V. Q0 b% u: R> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
" G3 q* a: @0 |1 R% {, J> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
/ N5 g8 ~* g  k( y# Z+ n+ O> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
9 I$ s2 a- t# Y8 ^
; M6 F! n: A/ \6 S$ s*) See Assembler Part to get more 'assembler' function detail
3 L' A- z9 _  \6 b
# @$ E5 x/ P2 I& S
; Q& M9 w+ b9 P% U% f, ~反汇编:( G% O$ D- X# F8 x
=============1 h% g% e; f) j& e! [2 _9 w+ o
> sfe d                                       ; 帮助
9 A3 r9 Q7 u  o/ x> sfe d src.bin                             ; 反汇编 src.bin
! N8 x- c" B+ T/ A' J6 c: B' V% _> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
2 B/ Y' ~% j* j8 i' L7 ]7 v> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节$ a( J0 ]- Z& a" \6 p
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000, u( B. C  ~; B' g
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止5 `+ c+ i6 N$ J; \1 f- f
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址4 Y0 [2 {4 |9 @& b8 T
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
2 W0 c& N, A+ |' u- N' ?3 `' Z> sfe d image.bmp                  ; 单色图形汇编输出  O- ~0 V. v# ~; g; p* C9 m$ Y/ \1 e
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
5 x# E  {4 D  c. }4 c+ K
/ [5 Y9 t! ?' i" Y" _4 n调试:
/ y0 q: c1 C; Z$ ]7 y7 y7 o& ^+ p=========/ f( Y) |; j9 _6 g6 _( K
> sfe r                          ; 帮助6 j6 Q5 n3 c; K) x$ t$ Y
> sfe r src.bin                 ; 运行 src.bin
# E2 g4 I( W  b$ t> sfe r src.asm                ; 运行 src.asm 汇编文件3 N9 O  [, V: M$ k/ J
> sfe r src.asm ,n            ; 同上, 正常输出  F  U# }' S! m2 C
> sfe r src.bin,200           ; 从 0x200 地址开始运行
( N- ]) Z2 ?$ k1 x) l# g> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200& a: M( V" I; L- Y; Q- A
> sfe r src.bin b00000      ; 以 B00000 为基址运行0 B8 o4 B9 T; p! E. Z/ L
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
3 U- B: [# C0 J, I! n4 g> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行! o0 l* t! c, ]4 X" y
5 P0 M* q5 g8 D, ^1 T; t0 C1 R! N/ j

/ n* K% `  }' P( U8 A交互调试:! `$ u2 C' ~0 p% Y3 G) Q- I
======================" @- j1 j# F7 p) R' u
> h              ; 帮助5 r7 W( T& a3 _; Q% [0 {
> g a00000   ; 到地址 a00000! e% }0 D4 K8 s2 y( d& k; Z, M
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)9 n; `  Y! [( W2 w9 @
> d              ; dump 内存 (现在地址)% e6 u! j0 y) H. ~. M
> d a00000   ; dump a00000 开始的内存, ]: E3 P. {6 R: K
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
( j8 J2 r2 ~! v> d r            ; dump 注册
& `. C7 n* {- j8 P> a              ; 单句汇编
; T/ @1 V, ^6 u' ]0 j> a c7d530   ; 单句汇编地址在 c7d530$ @3 U$ s1 Q& {( M" l, t
> u              ; 显示反汇编) H4 |6 K& L' v6 ?7 _; c1 `
> u a00020   ; 显示地址 a00020的反汇编
2 s1 Z3 D' B8 \/ ?% L1 J* Y> r               ; 在现在的地址上执行一条语句
$ u* ~# @' C# [& F. A+ _+ u> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
1 H& k. y( ]0 r' u> r 0            ; 运行到返回语句9 \0 M7 u: d$ G. @% P! I- q
> r -c7d580   ; 运行到地址 c7d580; ~( f1 }9 N; b  }- V& b9 W- `  I: {9 {
> q              ; 退出
- y( U; {, G, ~0 R' u! w! p! G
3 o4 d  H4 n8 \' z4 X6 R*) 所有未声明的语句都会改变当前地址。; Q) I: V4 \! V' `) X$ p$ D
  G" }2 C& j+ s, C' w5 h& ?

; c: v* M: H4 Q) j" }特别的助记符:# R- B( I: @/ ^1 b- N! z
============================+ i! b. T& d1 f' z5 \% _
*) 所有C166的汇编格式
. L1 m' ?/ N: M4 ]0 D' r*) 分号用于注释 (在一行的任何地方)7 Y4 u- z/ x1 z
*) 特别的助记符如下 :
) v+ O! G( R4 z% S; M0 V+ @5 h; D& j   #include filename    ; 包含文件(各种定义)
( Z5 D2 ~6 L6 ]! H/ N   #define var value    ; 设置替代变量 var = value* ^& f2 @$ @4 G+ b7 S
   var equ value        ; 变量取值 var = value3 M6 b& c; N+ k7 ]$ `
   db 'X',36h               ; 定义 byte(s) 数据区  Q" _1 s. a0 e8 x1 F) A+ S) I
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区9 o; o8 v3 t" z% {- m
   org                       ; 设定当前地址# x: l: H! O) n. P9 L
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
, V/ h% u) {$ x5 T  x( J   end                       ; 结束记号
$ L% H5 V  U+ A; I! U2 |0 f   ;#name XXX.string    ; 定义补丁名称 (XXX)) a: U) V2 B) W+ c  s
   '                   ; 注释将一起进入补丁: ]( {+ N7 J7 `, M7 q
   ''                   ; 注释将一起进入补丁,加回车
4 `1 A9 }3 a  Z7 `4 W   ';                      ; 以下内容将全部是注释,直到出现 ''
4 W: v$ z+ P! }   ;'                      ; 注释将一起进入补丁
7 ?# K1 h' l1 n1 d7 Y# d4 j   + - * / %            ; 加, 减, 乘, 除, 求模 操作  E4 a! O6 s7 h! J' T
   >> > < <<         ; 右移左移操作
7 T# U9 j0 c4 X# T2 X6 c   & && | || ^ ^^    ; 与, 或, 与非操作' n( R# ^" p+ }% t, m6 P4 e
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)% f* `8 ^( B$ z3 K% c" U
   page(value),         6 L& G! x) U! H' }' x8 L+ J
   pag(value),: o3 s+ Q8 p# P8 j
   p(value)             ; 页值 (= value / 0x4000)
( U- U) ]7 z  [; p   pof(value),
' h* |- I4 A9 |8 a8 D$ Y   q(value)             ; 页偏移值 (= value mod 0x4000)
( l5 t# s9 e) |   segment(value),
( P6 L0 `4 h0 C7 n( r( g5 x   seg(value),
3 Q+ N6 b2 c* a# ], T   s(value)             ; 段值 (= value div 0xFFFF)+ _# V9 b' F  A' a9 P7 {
   offset(value),0 x" t% n' T" S. f, G1 L
   ofs(value),
4 O4 I' c7 t+ o# _+ H+ b   sof(value),
. S) c/ ~6 C5 T# [1 S( y7 m   o(value)             ; 段偏移值 (= value mod 0xFFFF)
" |  p% n6 o6 R; Q* s  Y- l6 S# K. V6 @6 i/ p, z
*) 例子:
5 F! w9 k5 G! d, M3 _
0 r1 i2 f$ S+ ]5 }5 J1 ~, O, T' d;--- Testing ---
8 [1 l) h, y0 [6 K' b; N: n' ~  T; g
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
  j; B- D8 A" J  h9 i$ e8 n. V1 U: b* p0 _/ ]5 \  }0 N  X  z
#ifdef ME45: g# i  B, \$ B  }6 `% H
  #include me45.inc
2 d5 e, p) K' ^  v# e#else
$ h6 q, t/ A8 ]* e" w8 L* Q  #include sl45.inc$ |- K$ F' |/ x& N9 T$ V9 }
  #define  FreeRAM 37h:3600h; g  q4 F1 k  O9 p& B1 V. ?" ^
  #define  memcpy  0c7b384h* @3 K0 K7 `# `0 a% W% X
#endif$ K. |. n* ~$ @1 k. T  F) X

  O$ L1 K, X) m' m;#name TST. Test Patch            ; 补丁名
) a+ r$ a9 E# d+ [; m0 f8 e8 k! v) l( p" P  p( E+ l
'Firmware : sl45v56
+ C% }! o2 O2 _'Author : rizapn
1 O, [4 B- _  W2 s* Q( [1 I) j. }'Updated : Aug 18, 2004
: X8 ~* F# o$ y$ S, @$ X; {6 Z$ x
$ O! N# i. |6 corg 0c7e000h
0 X+ {( S7 e" B9 ~" l7 a# x# ~. r- l  m    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移$ d: ]: B8 W) V* D3 |8 v. y
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
: l% m! s2 D( A) {    extp  #p(data2), #1             ; 跳到 data2 页
' H& l2 I/ y; }/ M+ u8 [8 i    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)4 O9 D1 Z- N) r  i. A4 t0 O
    callr sub_1                            ; 页内调用
- v! V0 |9 G" m9 |" x    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
, `! m( F/ y  }3 e5 W6 H0 i$ `8 jloop_1:( J+ }$ n8 i) I5 w- g8 V
    mov   r2, #1234h4 F0 }. E0 t; E! Z5 i+ J7 Q3 T
    mov   [-r0], r2
# r/ D5 o: V, q( _/ \& c' c1 [    calls memcpy                    ; 调用段表示的子程序
0 N. v0 S6 C4 S0 m( w, \1 Q' S7 q    add   r0, #2' L! U5 h/ X  P& C9 j$ y: I
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
0 [% n8 W/ r  P$ Y& s8 K* ?    rets" o' _4 y" i- h- z

2 L% c$ s4 [$ I$ qsub_1:# ~/ U4 M. K6 X
    mov   r4, #1234h
- S7 \; Z+ Y  J5 b    ret' C( S' b8 ^7 m2 T4 _; ^
3 ~5 u* ?- u3 J5 r8 B
data2:
' ]( O0 ~4 O$ P; w    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区! e* i7 x( f) d8 h
6 `( f" O8 c/ P6 S( C& T* V4 m
end6 o3 _" \5 h3 R3 e
5 F' K2 g, Q3 F9 Z9 U
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" I& q& j7 q* }3 l
5 W9 V( p5 \! Q% k6 N
Allaahu Akbar,8 t# D2 l) {4 v; S* v
RizaPN <rizapn@yahoo.com>
+ {& [  J& w' h$ V; C9 h; iJakarta - Indonesia% H4 W. X* T, n; |3 u
( R, S% n- r3 \. s4 H/ i
[ 本帖最后由 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-7-20 08:46

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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