爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
) ]3 [7 d# b: E. h7 ^$ F. k' F; N, K, I. z" g- w! D& H, l
简单帮助:
7 g. y/ _% l/ W4 l====================
+ ~+ I3 M. v8 z9 H4 f*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。- @, W1 v, w2 ?) J) j  s+ f
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
4 J/ j7 e5 W! l, S6 _0 @8 g
' B  h# b- `8 O+ g
  B3 R% o& v: `2 H* E( o: m搜索空白区:
/ a$ M2 d( V; A0 b=====================, T/ t( D& x9 w+ ]' Y, W
> sfe 0                        ; 帮助: _; }% {( N+ y+ y# {9 w
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes). }2 B' s/ U1 `
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
2 R& a" O7 Z2 u! s9 N0 Z1 y3 }( @  f# b9 \
二进制拷贝:
* T$ }/ o# V* `. `============
3 n. s/ @$ `4 |> sfe b                                      ; 帮助
- Y' U1 F9 N3 U2 `" d  `> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
, z& I  ?% \6 V* e5 h& x) P6 y* q> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
: N6 e' |9 R3 F) U, _> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
) B! V. l+ C. O6 e# b+ o> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
. F; c& A7 _. {) b4 _4 h- \5 Z% @/ W) Z4 D' Z2 z
比较文件:6 |  v8 I0 ~9 Z' \
==============1 D# d3 c6 W+ T5 ]
> sfe c                                              ; 帮助
0 w! I+ }+ V1 g! D> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin, n4 @) u9 _' ?, t! j" U
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
: C: |& O% w4 U3 L' q2 W% {> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
. b3 y8 g8 z/ y0 }. \" E% n) {> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )# N/ X3 m# ^, z# d2 n1 y" T
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
  s/ m6 O: E3 S, \> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes9 y% h3 h( V2 ^: E) b' J
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)  {" U4 n5 n) |& C$ @
8 _& h  y: @7 Y( e5 h  S, k
发现16进制的地方:: b# N4 g, }% @8 j- X, s, I
====================
: C% ^5 ?5 X7 h5 h> sfe f                                     ; 帮助- I- h* @- j' A" {; s" q
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
* F/ {# J/ k* X: ^, P- r; W: N> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
, l  a4 ?; e" G1 C7 J$ d  d3 o> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes( j$ _9 }* G+ b5 |* x$ j
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
- E$ t9 u1 n$ A: L9 Q5 [! a> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
9 p) Q4 m, j" d0 G5 Y' E> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.% y: g! B) t3 H/ u5 h5 U

1 U3 I% u: b8 C6 ~# G. m) r/ H6 X( L. \8 a提取语言数据:& z, [9 s  K. F+ R
======================7 }& B+ q: f/ s: {: O0 I9 I  `
> sfe l                                          ; 帮助  Y: J9 k0 I. ~2 G. i) d' i6 Y1 R; u
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据% l- m6 I' k! \$ H6 J/ D  Z
> sfe l src.bin 200                          ; 显示 ID 200 的字符串) E9 B  @+ T2 ~9 J
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
$ [; p- C5 h5 _8 o" X5 O> sfe l src.bin -1                             ; 提取第二种语言
  T* s& [, A5 V; A! e/ |> sfe l src.bin -all                            ; 提取所有现存语言
% }: x% V* n; w& p! X> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串  [! l8 b0 e5 K
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
/ G2 S6 k) e' R0 D+ W: F/ G> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
0 w+ n% ^$ |7 B4 g& @> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 / x# K! C1 Z% K9 @- E
> sfe l test.lng                   ; 检查test.lng 语言包0 X3 Y0 K6 q5 l' c  z
> sfe lc test.lng                   ; 检查和更正test.lng 语言包
4 `7 _# f! W* S: P: c# W% Y/ d) c7 b5 `$ w1 D* B
提取菜单:7 [+ @+ y& Y' s
=============- P; o. B/ o4 y/ s- \, ]2 N5 k; W
> sfe m             ; 帮助
, D8 W7 u# s) [6 a2 s0 F> sfe m src.bin    ; 提取菜单结构和入口
' f' o4 m4 w6 u  [; c  |$ ^  P7 S$ l

: v% |6 k3 I$ A0 j补丁:
% s# g6 R3 g  C$ Q. k) i3 S. w& z" h=========
% Z7 w9 j# J' f6 |5 Q# F9 c& F> sfe p                                        ; 帮助
& u( ?' [; @  D0 O, d> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin6 t6 q, X2 m# ?7 t3 G" C5 O
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
1 y0 R) F9 R4 Z8 t% g8 G# @> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
' C- N8 b9 ~# [2 c. {
" g/ |' I7 W+ C* v& Y2 r
7 j* \  V4 g2 u' d. j1 ^编译:
5 i' a* {6 j7 \/ w9 o" l5 o==========
  e# F7 p  k, u; G$ p> sfe a                                     ; 帮助
/ m4 u/ H, k( [' X/ A: x6 z> sfe a src.asm                          ; 编译 src.asm
: x: N) P6 M  x. J$ v; B> sfe a src.asm d                       ; 编译 src.asm, 完整输出0 I% i1 A5 a1 f" ^, f, b+ [
> sfe a "mov r12, #1234h"          ; 单句编译
2 |9 q" y0 c. y$ f5 q6 V6 U> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译, G) t$ A7 P' R1 D
> sfe a src.asm,TST                    ; src.asm编译成补丁格式; W! a0 F- o+ v; t: k: z2 d( Y
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式5 b$ _; L, F8 _. b. D; ^0 E
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行5 _4 L! \& ?; t, }- P+ e- [
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000006 J% \' h4 u. p+ V- a+ v
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。/ [. H8 V  e; q) E5 B. M0 b2 G+ d
! Q( x. w2 L4 T: H+ |
*) See Assembler Part to get more 'assembler' function detail
$ y7 x% }$ z( {/ @2 ^* N1 r; D, A. S% z* X( B& l4 c

" W  \! B. [( L: E5 I  A+ U0 b% Q反汇编:4 H6 _9 p! n1 c, w  }- c2 t: z' p$ {
=============
. P2 c& `% c2 u) b. h' U> sfe d                                       ; 帮助* w+ A1 W- r) Z) X- v
> sfe d src.bin                             ; 反汇编 src.bin
5 J' o  d. x3 ?/ l/ P> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
9 ~6 s# f  n+ N6 s> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节, K' F5 d. p8 ]5 j8 ]
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000' c6 x% l  \' ^" Y8 A, c+ |
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
3 W* H) X% J3 z6 v- m' A> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
7 B( J1 k4 }9 {$ \+ @# `0 }6 q! n> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件; n6 z/ e) l2 K+ U
> sfe d image.bmp                  ; 单色图形汇编输出
  y0 ?4 G0 a2 j5 S" T8 j> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。2 D0 W+ U1 ]. G: R7 H) g7 S
% l* h9 I& ]1 \: Q! f* O
调试:0 G+ X+ u1 m  a
=========
1 E- g. F+ v* B> sfe r                          ; 帮助
! `( X4 Q5 ^) K3 l! x! C. n3 I> sfe r src.bin                 ; 运行 src.bin
! S2 a. W, R% I* w) z) ?/ J> sfe r src.asm                ; 运行 src.asm 汇编文件
( F% y) r: u, m> sfe r src.asm ,n            ; 同上, 正常输出+ L& V5 b% W1 l0 ?' }5 V: x, N
> sfe r src.bin,200           ; 从 0x200 地址开始运行' c' J5 W5 I3 O. C+ P, V# C
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200, [& y+ B, \* c/ i. y
> sfe r src.bin b00000      ; 以 B00000 为基址运行$ }( Y; T/ ^7 @! C
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
1 y, X' {7 n) k0 ^" c> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
4 ?9 H  i" X; q& G( F% n( m% ]+ e4 z9 f, G( g; O

$ J9 U4 ]. S, u/ U1 x交互调试:! O1 C7 R% e7 w8 @% m
======================, D& f$ T$ }2 w( n
> h              ; 帮助0 n' o4 g, ]9 Z1 }- i
> g a00000   ; 到地址 a00000
/ O2 `6 p7 r! l) I2 B5 I> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
9 a+ k' E' T. D6 s3 g5 }" c; _> d              ; dump 内存 (现在地址); C. m1 {7 R# z$ _
> d a00000   ; dump a00000 开始的内存
! Z; G5 A  W  S4 [6 K) }> d a00000 200   ; dump a00000 开始的内存, 大小 0x200& w. p9 u! C) T6 G5 n, L2 ~
> d r            ; dump 注册; l/ A1 N. V% f5 s1 j3 D
> a              ; 单句汇编. q' K4 q* b$ T" t4 I- }7 i- w% p
> a c7d530   ; 单句汇编地址在 c7d5302 B" B- q! C5 T4 ~) Y
> u              ; 显示反汇编
  B8 b2 F. ]1 w7 K3 _3 n> u a00020   ; 显示地址 a00020的反汇编; k$ i) G% {0 }* @2 i* n
> r               ; 在现在的地址上执行一条语句
! u0 O/ e$ B& t' {> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)* W0 j! |+ y; V5 S# a: _
> r 0            ; 运行到返回语句
1 U5 K- b/ m" A! v1 W, D> r -c7d580   ; 运行到地址 c7d5809 _' c( P6 T- }8 |8 ]4 H: T
> q              ; 退出
& ~/ Q* q: R8 y4 N5 I! N! y. ?% K; O# r  G; J2 S3 s
*) 所有未声明的语句都会改变当前地址。
2 J6 i: c9 X- `: g3 T
) J7 t$ A7 |! _  [! n! S
7 j1 {) d  F/ B# f7 N& o$ z+ _: u特别的助记符:' T8 m' z- N' h1 Y
============================
* q6 i- U* ]8 v# y( L! M*) 所有C166的汇编格式- W6 r% ?7 z+ r7 z. l' B
*) 分号用于注释 (在一行的任何地方)
" ]9 M' |9 m" _*) 特别的助记符如下 :/ J4 {( o& T8 m  h; t/ V+ K. |
   #include filename    ; 包含文件(各种定义)
1 q" d( T; h3 ~: A* N3 Q   #define var value    ; 设置替代变量 var = value
7 [5 x0 B1 s! g4 n, l5 \3 w   var equ value        ; 变量取值 var = value1 b/ P  j+ N4 V6 |+ a5 j
   db 'X',36h               ; 定义 byte(s) 数据区
. n7 m, f: d  |7 d' G! p3 s4 m) O   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
5 X1 |: j5 u( K- A( z; {& C  n   org                       ; 设定当前地址
$ Y* ?1 j+ I+ Y" A. _9 A, H   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)2 L1 `0 M& @( U8 Q: n& N' Y% E& c- G+ r
   end                       ; 结束记号& q% d5 E& p, |+ X
   ;#name XXX.string    ; 定义补丁名称 (XXX)
8 S; C* o0 @4 B   '                   ; 注释将一起进入补丁
/ Y! G- x' m) F4 S2 S" f( s   ''                   ; 注释将一起进入补丁,加回车
8 H- Z/ L* ]0 j7 F! J  i   ';                      ; 以下内容将全部是注释,直到出现 ''( u6 N# }5 E- T& T) e
   ;'                      ; 注释将一起进入补丁
8 B$ N4 B+ n' [! R   + - * / %            ; 加, 减, 乘, 除, 求模 操作( L/ U! I" t: C4 ?% p  R
   >> > < <<         ; 右移左移操作' e: a( n' v, M! y2 e
   & && | || ^ ^^    ; 与, 或, 与非操作
2 y  }( J/ [/ h9 b5 Q5 c+ y" l! o. a   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
: L/ m  }1 [0 A" ]   page(value),         
7 |2 h4 G# p" D- O" [, T9 `$ W   pag(value),: A# ~0 S/ o3 U1 {
   p(value)             ; 页值 (= value / 0x4000)
- G- ^' x% A$ x6 Y9 |   pof(value),
  }5 d' ~9 {  \! v4 i) s7 h   q(value)             ; 页偏移值 (= value mod 0x4000)
; U5 O1 [0 F" o% {% |' O! u( O   segment(value),
7 c4 m5 }3 `+ s  k4 C, O   seg(value),
) i3 j7 ~) A( C   s(value)             ; 段值 (= value div 0xFFFF)6 Z* C6 e( W& [  B+ }
   offset(value),9 g# K/ O) Z2 b7 \) D% E( B% ?
   ofs(value),/ f8 s% ?# F% j7 z
   sof(value),  n) Z% b; P  t1 c* |
   o(value)             ; 段偏移值 (= value mod 0xFFFF)
" H1 [- _' \" {* x5 K; D$ B7 g
# ]* h: ~( t& y0 f2 g*) 例子:
+ q/ i1 V8 c& C/ J" W
+ j2 d6 e( }5 q$ h; ~" S$ i;--- Testing ---+ D) T: o  _6 a: X2 g3 q# m
& D- W0 w3 U% t2 I  b+ a
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
. n* @; b- \: E5 b' j; A% u) {$ O# x8 e- L) D1 g+ I
#ifdef ME45& r3 i2 c5 F1 J4 I" [& V
  #include me45.inc
! b" A- s6 w9 G% K, c#else) d( X( F; o" c; T. V6 U3 n- `
  #include sl45.inc
+ ^- m0 F1 w3 ?& ^6 g" y# Q  #define  FreeRAM 37h:3600h
) z$ }0 O. a" A' i5 W  #define  memcpy  0c7b384h
% _9 Q; M# o6 W, p#endif
; Q9 [: `! _, a! [, U) s1 F! z. L1 u* h  K1 L6 R
;#name TST. Test Patch            ; 补丁名3 x8 d' I, R6 A, C/ v2 A6 E
2 M! p& I. L# s2 I
'Firmware : sl45v56
) e1 Q5 C2 T( k$ A6 o' l8 {* M1 C$ h% A'Author : rizapn3 |; F  \# M1 Q, b% V
'Updated : Aug 18, 2004+ p2 \( I, @+ a2 {2 Z
5 V; f0 Q0 w& s# C5 k; l# Q
org 0c7e000h
( i9 D/ z# {- z7 j. p    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移. N6 t+ P* O0 L4 ?$ T6 e+ \$ a
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值9 Y- S4 X3 E0 o
    extp  #p(data2), #1             ; 跳到 data2 页6 I) l$ V/ d8 V; B) t+ G
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)" z( W0 W$ D4 Q' V, z7 r
    callr sub_1                            ; 页内调用
5 x, b) A% D# i5 p- _    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
, _( X1 h  |- f9 Q  n# z  ]loop_1:: _* w5 R. i/ g) H" L2 s$ g
    mov   r2, #1234h
9 _  h' E( X; N  _2 \! P3 q# T& y    mov   [-r0], r2
! ]: h7 k" d/ p8 R  _( D0 P* F8 G/ N    calls memcpy                    ; 调用段表示的子程序
4 W' }: \" @  N" \8 E    add   r0, #2: i2 G+ `( `. N# j1 G2 O
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处7 w- V; E! i; Y* r
    rets) E- N* I1 c' b3 D3 A
6 P1 m$ _7 o$ X) A' i
sub_1:
; _7 N6 e3 t* B# O/ ?/ k/ {/ b    mov   r4, #1234h
( w/ Y/ g0 D8 y9 }& ?    ret
% ]) T  d8 X  d; q
6 S4 d: I- b' c5 o4 zdata2:
# V+ Q" M) v0 s9 Z4 a" o; y/ w6 D1 ~    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区( c: v; V. l; i6 j/ o( |
1 f1 w! f7 Z; j: R/ k4 _6 U- w( W
end
, D. i5 ^: r+ q6 z$ I. R, ?& O2 g4 c* b. s
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# [# [/ R; ]9 y7 T9 N, u* s

4 }4 |, r. D- |/ v8 lAllaahu Akbar,0 b4 `6 `# u' Z; N
RizaPN <rizapn@yahoo.com>- T9 ^: u; X4 G) j
Jakarta - Indonesia, ^  d  S1 c& k' q& t  }/ G$ A

% \: D' z4 G0 f* c9 t# O& U. E[ 本帖最后由 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-4 17:16

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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