爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:; Y+ @- E3 [1 g8 W2 h4 }
1 Y  p, z& n" V+ m, ?
简单帮助:
( r4 J. f! y1 i- }. ~" [& J====================
8 M. L  N& c( Y8 q+ |+ a*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
: l( u8 b" t' r" C6 ~*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
5 J4 L' F7 L5 ]9 L- v
0 B! j4 G5 O( ^( p9 C7 V# N7 Y$ w+ ~) L+ ]# ~) _1 T9 `
搜索空白区:% J0 l0 K, M' K: f4 R
=====================
( q# d: n3 G1 _& ]> sfe 0                        ; 帮助
- k. _2 `" p8 y8 s# d> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
  j8 }" F7 a; o) X, ~0 |> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间. A/ [, C% o; G* w
. D# @5 [/ O9 [( {
二进制拷贝:, D# q6 g4 a& J2 a
============- u8 |# g1 t, e/ M# m  h5 ^5 S
> sfe b                                      ; 帮助
. e" K6 q; ]0 f" \0 y$ W* Y> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
' {: {+ n" O1 i' [: d/ u> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin7 W: f$ f9 k/ a$ ~9 o
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
. I. ]5 f3 o/ x> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2008 }9 t% A7 H6 H! U, J& P- m  ?5 _

- }6 J7 V  B9 P% c比较文件:/ M0 ^" b) E* g
==============. I6 b) p: i( d: H4 ]/ c1 @
> sfe c                                              ; 帮助
/ m7 |; z8 b0 d1 a& O+ _> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin* s5 s# h# a( M6 h, ^" E: \2 {" ?
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
0 Q3 X2 ]* F, B( j> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
3 v9 L  ]% B) J3 ?5 W. o& V+ t4 z> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
" R  S  N) ^8 [4 M9 J> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A000003 ?9 Z3 h" H( Q) y9 R6 q* q
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes3 _- F) h+ X8 C/ n1 a" r
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)1 R! l7 d% B' O) A' }+ q5 J
* p" R" n0 g. b" L, f: I/ _
发现16进制的地方:
7 s& D" @3 F$ |, }. I7 P- o( H====================
: i7 f3 R8 N- h  X4 ?2 Q> sfe f                                     ; 帮助% M$ w* A1 _- B' f9 g
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个- u7 ?  Z8 t) f" n2 x/ K+ a! _
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
8 u% m0 A6 O' A( m0 B9 v> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
; P" t7 N0 h8 g! e$ X' {+ T- `  E6 G> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找6 F2 d. m: x: X
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
0 D$ V: P" i$ i$ [- C> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.: ?" H; X0 u2 C' _& H' d1 @8 |2 X
6 |# n5 d" b2 o7 O
提取语言数据:
; r! p7 Q5 c. u======================
/ ?( H1 E/ J6 ~7 Y2 a- y1 O> sfe l                                          ; 帮助
, m3 V+ o1 o; h' ~$ `> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
. i* e% \- {2 o5 w' Y" f9 g> sfe l src.bin 200                          ; 显示 ID 200 的字符串2 x8 _" v4 o6 S4 z! X3 j
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串0 T- k* Y; @9 a$ c
> sfe l src.bin -1                             ; 提取第二种语言( b: d- C* J6 ^" K! w+ }6 E
> sfe l src.bin -all                            ; 提取所有现存语言. V" o, O& J8 X2 q6 K6 `: p2 Y
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
  ]* \* e. b% f" J- W> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)& e5 `; m- H; x3 ^+ v" Q- \3 u# g
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本' `5 c( j# m4 m) B
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
2 }8 ]2 W' h' N# s1 D9 s> sfe l test.lng                   ; 检查test.lng 语言包
, q  _9 y$ S2 ?& F: @  x$ O' B; N> sfe lc test.lng                   ; 检查和更正test.lng 语言包
7 Q; x. r# e# M& D" T/ V7 ]( \$ \0 ~3 _' x- k* O- z
提取菜单:" j5 x5 E- k2 k. v6 V7 G
=============
+ d9 Y( {# I5 J0 D7 U> sfe m             ; 帮助
# V7 U1 j1 P* ^( A> sfe m src.bin    ; 提取菜单结构和入口- C& z, f1 l2 V6 E1 t1 [5 z

# A0 @0 |0 I- }0 H) F: k4 w# I5 P4 v0 j% \# a
补丁:
) k' |* I8 v# |& _=========; h9 i% G0 o# I" J! E& p* m- V
> sfe p                                        ; 帮助6 u" b' r) ^1 C  a. |# V
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
" _1 k8 i8 `3 K2 H> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
8 t: O4 v  p7 t& S> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 9 u1 p" z# T8 f4 F0 m; i

! K0 h) |7 g. A2 Y. ^! {- e8 {& z
* a; F4 b4 s! c  d$ K编译:
. N: X. X3 x) q+ m==========
- K' J8 t8 X# a6 o8 v> sfe a                                     ; 帮助
; w& s1 v# n1 v# U. C; Y& ~> sfe a src.asm                          ; 编译 src.asm
/ o6 P" L" n, N5 P) h# k> sfe a src.asm d                       ; 编译 src.asm, 完整输出
/ f  O- r6 F1 s) D> sfe a "mov r12, #1234h"          ; 单句编译
$ n7 z% I2 E# M: f# d> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
  l1 C' a5 C1 D  |; O/ w! Y> sfe a src.asm,TST                    ; src.asm编译成补丁格式. ^# i4 T5 }& z; i
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
) {# \7 _) t' g, }0 m4 {5 G> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行/ Y9 N! m8 T& n" n. m6 t1 R/ B4 u
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000/ y. z5 ^2 o) c+ c/ G
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
" O% J: D  X0 u7 `
, m! v( y6 }8 \9 k*) See Assembler Part to get more 'assembler' function detail8 M7 O5 ^7 L/ e/ E( j0 I0 ?
7 s7 x: m/ E* H* `) w8 ~9 ~

% O- ~6 t; M& F% c. n反汇编:! F% J' [! u0 |! {  h
=============  V) X/ X; t) P; N6 a
> sfe d                                       ; 帮助
2 q- A" z' e# }% z5 C> sfe d src.bin                             ; 反汇编 src.bin. `8 `# B; I! g7 {0 I
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
6 q. O' B3 J2 @> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
! U% Y. o; B$ ]" A> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000009 i$ R( S5 S8 ?# H5 t5 N
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
* H4 ?1 a1 }8 g" K> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
. |! z$ S' N: I. V& q  m) K5 l' `# n( t> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
7 [6 S# w$ `* d, U* k7 W> sfe d image.bmp                  ; 单色图形汇编输出1 E% m! B4 G( ?% Z! ^8 F& k6 n1 V
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。( f8 Q, H/ D; |$ \+ R6 V

: U) ?) S& E" Y5 g6 l# J& ~7 S调试:! o* Q1 F2 H3 r/ |
=========7 }* A8 [+ W9 Y: H" ?2 ]
> sfe r                          ; 帮助
  h& b( ^- C* B> sfe r src.bin                 ; 运行 src.bin
# P9 U' _$ b/ y' t4 |# V9 s. Z6 X> sfe r src.asm                ; 运行 src.asm 汇编文件
9 l& _: W5 R, B, T> sfe r src.asm ,n            ; 同上, 正常输出
6 V0 k9 Q8 D' v1 |2 j> sfe r src.bin,200           ; 从 0x200 地址开始运行3 s6 v' x; a. F, n. X
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
1 X7 _) C+ ]2 M+ ^. k& R8 s* L# @1 C1 |> sfe r src.bin b00000      ; 以 B00000 为基址运行1 Z4 m0 t- D2 |8 }& o
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行6 g$ b7 l  R  |2 F8 i
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
; @, a; A6 M& l2 _% a8 G4 s
/ [" }" m3 y" @  z: Z% v
' B: G+ u/ w  H! p- _; d5 \( k交互调试:
! S& n9 A, |- m======================
- v6 S9 ^7 @- ?3 w- y1 i" S4 b> h              ; 帮助
. a5 u; u& X& t4 {> g a00000   ; 到地址 a00000
. c. j2 q( K8 j! J" G6 R& V3 ^> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)( V( ^! a) I* S5 |% ]8 F
> d              ; dump 内存 (现在地址)
9 A3 K: }" k3 ?9 Q0 R3 i> d a00000   ; dump a00000 开始的内存% t9 ^( F( j$ ?, Z% Z: V
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200/ {" T& Q5 _5 D5 R0 f/ ]
> d r            ; dump 注册4 _1 t) j- ~, E4 p( K
> a              ; 单句汇编
/ v$ u5 f7 R7 j5 f> a c7d530   ; 单句汇编地址在 c7d530
1 F. `1 [( p8 q& y  g7 f: v> u              ; 显示反汇编
- [( f! x; ^) U1 ~0 t> u a00020   ; 显示地址 a00020的反汇编9 l7 f! p+ @% C# n) R5 _
> r               ; 在现在的地址上执行一条语句- B, X! j$ j5 b  d/ F: a5 e) p- P
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
( r1 w  O+ b( S) M1 \3 |> r 0            ; 运行到返回语句
$ g6 T8 _# t+ X" M3 b: k! s> r -c7d580   ; 运行到地址 c7d580
6 D' F. I& d7 d8 `> q              ; 退出
) j5 X3 y  x0 ?  g0 P6 B; |
$ s8 m+ n2 u- P. ?( q0 y8 w- k# \*) 所有未声明的语句都会改变当前地址。+ t9 A$ Y5 i3 ]& p& Y& H9 H9 y+ G

' y6 V$ b" ~7 R: z6 U4 n
+ s% m5 X( ]! ?# V5 c' D. l特别的助记符:* k( e$ p% |* B9 {
============================
4 Y0 r# w1 R% }4 s$ s( O*) 所有C166的汇编格式2 s* r% ^& L: t
*) 分号用于注释 (在一行的任何地方)% T' M% @, L/ Y7 ?* @' T7 I
*) 特别的助记符如下 :
9 x# R3 _. |6 }2 ]/ ~; V  H1 m   #include filename    ; 包含文件(各种定义)
3 {+ t5 l4 a+ q% j! Z3 `   #define var value    ; 设置替代变量 var = value. Z8 R. r3 q! L% o7 m
   var equ value        ; 变量取值 var = value
8 w  c: A3 V3 D8 A/ C' x   db 'X',36h               ; 定义 byte(s) 数据区
* q; ~" @: Q& J   dw 1234h,0,'AB'      ; 定义 word(s) 数据区! u( x5 E7 M# h- [6 q
   org                       ; 设定当前地址
. V4 w7 m. ~& o3 L) {, d   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)4 |; P; R( p7 h$ c
   end                       ; 结束记号
. t. u% ^  m5 Y( N! V   ;#name XXX.string    ; 定义补丁名称 (XXX)
7 P$ {& R# ]% `" I4 u+ D* u) D0 O: u   '                   ; 注释将一起进入补丁
. C, O' W) M$ ^: n& b$ i   ''                   ; 注释将一起进入补丁,加回车
$ I2 b' |0 G1 Y/ ^( ]# c* N   ';                      ; 以下内容将全部是注释,直到出现 ''7 Z0 d0 U+ B! x% r/ t
   ;'                      ; 注释将一起进入补丁. T$ l3 c) I  i" ~+ z
   + - * / %            ; 加, 减, 乘, 除, 求模 操作# [0 F. C; V$ I: }
   >> > < <<         ; 右移左移操作; A8 _/ z5 W6 Q: k
   & && | || ^ ^^    ; 与, 或, 与非操作& _0 ^# o( O/ w7 x  d* J* E
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)0 [; b  |) U2 y% o$ G4 @2 D2 g
   page(value),         
' n. |- E# s5 M5 O* Z- }   pag(value),
" o% R* i7 `. K& [) M4 _- g. V   p(value)             ; 页值 (= value / 0x4000)
( L. p  \( m# @+ P: t   pof(value),9 i# W5 Q4 U; T# Z  H
   q(value)             ; 页偏移值 (= value mod 0x4000)
) T" }' ]' ?* [3 R, ?+ t   segment(value),
, F8 m9 U. r3 G' f2 T   seg(value),
0 w( M4 P# \! H/ s  j2 ~   s(value)             ; 段值 (= value div 0xFFFF)
( M5 u$ {" Z$ n4 ]" O( ^- t9 M4 R   offset(value),0 b9 o& X0 Y' X0 Z6 I
   ofs(value),
1 r! v- q6 u3 j7 e( ]: X8 y   sof(value),
3 k. E' P4 l/ b4 |* B   o(value)             ; 段偏移值 (= value mod 0xFFFF); X$ [" {* Y' |* ]" v6 a* F
) }# H( B6 v: d$ m: j* V8 H
*) 例子:
' |7 ]1 ?6 q4 I( e) _2 U) m) }4 ]% h$ y0 Q6 n+ i3 b
;--- Testing ---1 u/ \2 Q& ?& }: W' O$ N7 x
* U" ~# m9 @! D  p, ^7 x
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
' S- S3 v% A- b# |- f+ ^6 ?, {. r0 ~; H) s  N7 z/ \2 A8 q" `
#ifdef ME45- B- |+ F) d2 |/ M
  #include me45.inc
/ ~( [" e: M7 y6 O2 z3 d" e#else/ s* ?3 w, V8 d4 e
  #include sl45.inc
6 D" B+ F0 ^2 k) D  #define  FreeRAM 37h:3600h) X" |2 {0 Q" s) n
  #define  memcpy  0c7b384h
) Y. v+ }. Y) y5 j( L  j; ~#endif
, S- r1 `+ i) X  M
: M$ R$ B. B2 P- I3 a;#name TST. Test Patch            ; 补丁名+ l2 }, j& w, L2 y3 \. ~
; s  S+ _5 K- y# T! ^
'Firmware : sl45v565 e8 U9 D& ]( f  j) a
'Author : rizapn
+ A, n& W! i4 \4 F0 z+ ^'Updated : Aug 18, 2004
  t3 a5 g6 a, B7 N3 u. K8 f( l! Y6 r, t; T6 W1 v" \
org 0c7e000h" J) }. z- b$ y# J% B- e+ E
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移$ f. d: g6 G# ^
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值0 I( W2 S1 V: @9 m1 K5 f2 L
    extp  #p(data2), #1             ; 跳到 data2 页7 k1 z& j8 J& I6 |5 S  F4 M
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)6 g$ w% A. z" M2 \
    callr sub_1                            ; 页内调用; W- S/ i* Z6 A- B# x
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'2 V% ?" I- o: ^7 l
loop_1:" M2 s- y( Z$ ]
    mov   r2, #1234h
0 V: }0 C. j, ^  z+ X( T3 G+ L    mov   [-r0], r2
  P+ c/ d9 C; G0 {! \5 _    calls memcpy                    ; 调用段表示的子程序
' i* ^8 U4 D+ n( c0 ~    add   r0, #2! f) `& I5 \! x" M
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处$ w, |! L$ ^, h* J2 p+ R
    rets, {6 x0 s4 Y( i5 I$ }
* P2 Z& |7 h6 @* I! Q
sub_1:4 N6 ]$ ~0 j: U0 |0 ^; f3 J+ \
    mov   r4, #1234h
. Q: O. {, a: E5 L3 R- H, ~    ret- T/ z1 X% q& W- I) W1 M
1 a. b7 i( S8 i, ~0 B8 _1 B6 h
data2:
9 {* `# ~9 }( O' U/ e8 t% @/ F    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区9 d* `" @0 I& q5 l( `8 L& |
8 r2 s! q1 b! _( [( |9 F! M6 v
end
& h8 w; M! m' f) h3 Q. [5 y2 d
. g+ S  [- a. C3 I5 U9 H0 C;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~, t5 V$ H$ ]+ r* H

8 Q  D; W4 F& A* h, M- f' D; H6 FAllaahu Akbar,+ N7 X% F; z, \. o
RizaPN <rizapn@yahoo.com>8 p$ n6 q  k% Q$ j1 G- _* \
Jakarta - Indonesia
3 M+ C* @; Q( ^* j1 ^9 R' M- _" x3 V1 h  o/ x. [
[ 本帖最后由 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-22 18:03

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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