爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:. L% S( {9 V9 R- m2 F' t# g! D4 J
3 E( @" d- [4 c. g+ o
简单帮助:( g; O2 p' L( e0 t7 `) |; P# @) W8 V
====================
6 [+ e5 a2 _" m$ m*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。+ r: Q* N8 v" G5 Y3 X; M5 K
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.' @* d  J' S, G% D

7 Y  W! X( o/ L. ^( n+ ^0 Q7 t* }/ y- p7 t5 U# m- j5 G/ N& W
搜索空白区:
+ {% o+ u% d0 b=====================6 C: H* o& Q5 P9 v+ z
> sfe 0                        ; 帮助
1 v' S8 F2 ?, ]1 A, J+ M* j" s7 i: d5 ]> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
/ e9 _" Y. K$ l: ^& l: n0 l> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
9 Q. O& K) j, Z/ k9 k# G& ?+ z7 R7 I5 |8 _% m8 P& g6 P% j
二进制拷贝:
1 V% s1 X# X7 P. W) C============5 A/ n- T8 k8 m0 |" i* h9 ^; L! m
> sfe b                                      ; 帮助) p; K5 ^0 v* r
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin- J/ L0 j3 P) U3 U# b7 X: W
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin( C  M8 D: i9 p- B6 `
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin: x* ~( J. ^- W$ v4 b0 z
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2002 i. Y+ w' e5 a$ _) v: c
9 ~7 Q+ v& B- s3 G
比较文件:
5 h- b' S$ Z: }+ o5 l% O* W==============
0 A7 Z- L: M# H9 j4 J0 f2 G; _1 R> sfe c                                              ; 帮助" b4 @7 n0 H" i' m
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
8 G0 E% A5 {& I# t* N. D+ a. t4 z> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
6 y3 y' ~5 u8 U5 w' A) z> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes6 X" I8 n: n0 s/ g) q( n( @
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
! T$ r" M# I/ g: q5 O7 r> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
4 @6 V% N0 \8 a& K> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes& s- i& N( \6 a  N
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)# Y" n# ?& G  u$ X+ R8 n3 N) `
. w# O5 a$ U, ?/ z+ ?8 h- a; c8 h) `
发现16进制的地方:# K# S  y! C; \4 @
====================3 K3 M4 c6 c- p4 f, W- J
> sfe f                                     ; 帮助% u) ^4 H4 i1 K- {8 e: X5 }7 j/ i9 f
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
: I8 b6 H' w1 O$ `5 l> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找* P3 O, M7 o) d  R& t! R; g. ^
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes/ y: ~8 a5 C0 J  e
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找# \: @7 j  O6 w* [0 l9 X" s5 j7 _
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
" u2 \( n* `' v  J" P> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.  k( j( o2 W7 E- j6 i6 `& B3 p

" v# f, e( S3 R1 C( W& k提取语言数据:
& _! W8 |' G% d1 t======================
3 g( y3 Z6 r7 P6 p; V> sfe l                                          ; 帮助0 h! A. q% ?; E/ u- d; F4 U
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
' y# j  I* W5 {4 Z8 y> sfe l src.bin 200                          ; 显示 ID 200 的字符串& {' t2 G# Z: J+ ^6 y
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
' O5 w2 F0 Y1 t> sfe l src.bin -1                             ; 提取第二种语言  s) X; S- T) N' x
> sfe l src.bin -all                            ; 提取所有现存语言
+ A/ f. X1 E  H  m' a> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串$ r; G2 g7 Z$ ^2 O# B+ N( C! a
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
6 L& K3 k. C7 T, k> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本# n/ y$ S5 f$ U( i" r$ z
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 0 G( Y' h% s* ]* a
> sfe l test.lng                   ; 检查test.lng 语言包5 J! I5 n% Q1 S" r. n: P2 j) y+ m
> sfe lc test.lng                   ; 检查和更正test.lng 语言包. R. y# T, H2 d
9 i0 d7 C, `3 v( N3 V
提取菜单:
, I% d' N1 v9 @- }' o+ s! n3 v=============
/ e* G9 S8 n8 u4 l& }7 b> sfe m             ; 帮助
7 N% {  N2 W8 C7 V* L> sfe m src.bin    ; 提取菜单结构和入口
' P; d" C, [" {& O! c7 }$ M
( i: T8 h) p3 }5 S1 T+ u2 k4 d" r. x6 o/ ]+ c: s
补丁:
) k* J1 k- l( _! E  F; Q1 d=========
; n8 C. {# H9 K; |; q> sfe p                                        ; 帮助! U; ?2 z& r" T, z! s
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin/ l4 j7 {" Y% F/ v! N1 R
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
5 w; r) A8 \! l7 _- f7 D' ]> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
* K: y; S! x# H+ ^# Y. ]9 e: m8 t1 q7 a. o: J% ~* Q
, N/ p) |2 i( z* f, I) S
编译:8 B5 K+ G1 t* s% K/ e/ q, b
==========0 M9 P' m8 D  G/ U
> sfe a                                     ; 帮助/ Y- a' [, {! H6 F" ?6 A; Y2 I
> sfe a src.asm                          ; 编译 src.asm! X; _$ @  o2 L2 l2 I
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
* P& v& z1 H; N8 m( w> sfe a "mov r12, #1234h"          ; 单句编译( X5 j4 r! o3 W. j
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译) k- [8 P0 _; h
> sfe a src.asm,TST                    ; src.asm编译成补丁格式" ~$ G1 E8 V' |/ {8 r
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式1 I4 W# a9 |4 a" Z' s
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行. @: ^( o) [! @8 L6 K* Z! H
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000. c" L9 g+ h( U* P
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
/ ~3 R9 N1 r! e- A7 l, H1 W2 I& H9 S. `$ C" i. M
*) See Assembler Part to get more 'assembler' function detail5 a! H$ \3 a4 ]* x

, j& Y0 F4 E2 ]- Y! j! K+ B2 W
5 O( W2 @! ]' N% b! P$ D0 [6 x2 c9 ~反汇编:4 o, Q# m" o& h
=============8 W! g8 S* `+ w& `0 h# W' s' S
> sfe d                                       ; 帮助1 D* C% U6 S3 o1 R
> sfe d src.bin                             ; 反汇编 src.bin3 C' i8 M7 G1 n' w0 M" O
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin5 T/ x$ S4 {7 \; _9 D3 v
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节3 u/ b1 s% k8 i$ F! x9 V" m# K
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000+ v7 e! }& N0 j8 u
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止( r) @) x1 ]8 X4 S% I2 f; P1 l2 u: ~
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址# f& S- z% ?" p; F
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件/ I! c4 U3 u' W6 J+ n9 _9 m+ Z
> sfe d image.bmp                  ; 单色图形汇编输出' ~& l, h9 G8 V. E; j
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
: v9 Z' p4 e% y) X+ ^& c2 y4 c, K* y2 G3 r$ ?& X" O
调试:5 f9 M& r. y& G* O8 v: d
=========8 p& A. X% Y* ]: W* Y: k* g
> sfe r                          ; 帮助7 T6 C, Y; S, h$ v' ^: I* @
> sfe r src.bin                 ; 运行 src.bin3 X4 u, D; }  T# V) Z& J
> sfe r src.asm                ; 运行 src.asm 汇编文件
' S! s) E2 C. m; h! h' r> sfe r src.asm ,n            ; 同上, 正常输出8 P/ `5 l0 a" B* c3 `! U* Z
> sfe r src.bin,200           ; 从 0x200 地址开始运行/ I0 h- p  h' L( F% M
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x2003 |* U- s  S- j
> sfe r src.bin b00000      ; 以 B00000 为基址运行8 ~9 }7 k+ b3 R
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行$ j4 W' c& d7 u* Y. Y
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, V' V' D! {* [9 D5 |5 b! K7 ^" ^8 U6 W
1 l& d2 Z- O& j" W; f: z
交互调试:# n! ~% Y& l0 U  G* E
======================* V+ ~' V& H" T0 w( r1 w" v  }; R
> h              ; 帮助1 P' @( R1 X6 p; ~6 g7 s
> g a00000   ; 到地址 a00000
/ }$ L% a! S" D6 Q  Q> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
' R6 t5 l( b4 M0 A> d              ; dump 内存 (现在地址)6 J* ?+ T# S( D& [0 T" f
> d a00000   ; dump a00000 开始的内存0 o: `* O: [" y$ F
> d a00000 200   ; dump a00000 开始的内存, 大小 0x2008 b, n8 [/ \8 d# e
> d r            ; dump 注册
. v6 L/ v8 L3 z: j! o$ j; T1 c> a              ; 单句汇编# X1 N( B! C$ @; g$ H$ y3 _7 F; f
> a c7d530   ; 单句汇编地址在 c7d5307 u/ I' i" O" h
> u              ; 显示反汇编
: E) n) C5 c. H8 s> u a00020   ; 显示地址 a00020的反汇编
4 E1 ]1 w# ^" i5 e! @; s> r               ; 在现在的地址上执行一条语句
8 Q/ o' q- b7 \6 R2 P> r 1            ; 在现在的地址上执行一条语句 (跳过call语句): t! f$ C, p6 x8 ~& \$ ?
> r 0            ; 运行到返回语句
/ Y! Z( I- n: L, n> r -c7d580   ; 运行到地址 c7d580
/ |! A! [3 P$ J/ j+ s/ b' k8 z> q              ; 退出
, u( r7 ?0 S1 s7 L6 ?1 o0 }: N7 @
2 P. v& u9 E4 C9 a*) 所有未声明的语句都会改变当前地址。% J8 k( s# i9 g& o
9 X! i2 H/ \' g0 e
" w- L9 ]. V; U3 y
特别的助记符:
! v8 i1 C- `. N5 M% K, F7 l) ]7 g============================! b8 f& K  }" Q. O
*) 所有C166的汇编格式% [5 P' e' k8 |4 q4 D, J
*) 分号用于注释 (在一行的任何地方)) k: i$ d( y1 M0 f
*) 特别的助记符如下 :* o& K8 O! ~/ z- w% [3 D
   #include filename    ; 包含文件(各种定义). F3 \( A4 V' U, _4 ?% u) j* A
   #define var value    ; 设置替代变量 var = value' B% |- f8 h9 \: W4 x6 B
   var equ value        ; 变量取值 var = value
* M' K- Y3 j+ K9 ?* l+ y) q' y1 f   db 'X',36h               ; 定义 byte(s) 数据区, B* K: r5 T8 i2 s! G. W
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区- q  C4 \# h3 s: e8 Z- @$ J% e+ p+ O
   org                       ; 设定当前地址, U% p# U' ~3 f4 `0 \) m1 U
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)( u5 E! v0 E5 l) N5 c" ?
   end                       ; 结束记号
1 H9 {* X# p% B. i, ]: Y# M8 u/ D   ;#name XXX.string    ; 定义补丁名称 (XXX)7 \( d8 q/ T* j1 `' Q: F3 o
   '                   ; 注释将一起进入补丁; a5 ?: z* w( U: t2 E+ Q0 T" C. M7 _( L
   ''                   ; 注释将一起进入补丁,加回车# r8 a$ f) {6 u
   ';                      ; 以下内容将全部是注释,直到出现 ''" \, q$ _, C  }% n
   ;'                      ; 注释将一起进入补丁$ R) t7 K$ W4 I1 f3 H
   + - * / %            ; 加, 减, 乘, 除, 求模 操作& v) h  o8 w# m8 {+ r$ |6 `
   >> > < <<         ; 右移左移操作
: W2 w* [+ }: s# B& X2 ?, p" B) A   & && | || ^ ^^    ; 与, 或, 与非操作
9 g3 q0 a% A2 Q( l7 `$ ?; q   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
, ~3 n! f4 f" q. N# d: U: y6 B! |* }   page(value),         % d( ]- N3 \" P
   pag(value),
0 |% r4 r( s( ?" q   p(value)             ; 页值 (= value / 0x4000)
0 ~: f" o% I+ F; l* Y& i   pof(value),/ p7 g% [) U' t& U6 m. H  j% Q
   q(value)             ; 页偏移值 (= value mod 0x4000)! |0 I/ P& _& I( s. C
   segment(value),6 t8 m- @* E3 t5 q; S
   seg(value),
/ g+ a( }# k6 @6 k# \6 Q* _   s(value)             ; 段值 (= value div 0xFFFF)0 z& F% y- |' K& h  q2 k# K) L
   offset(value),+ q+ C, S9 [# ]: H
   ofs(value),* @' A" R" x3 ]/ q6 K( o8 q3 x
   sof(value),
2 P( d7 f( F8 \3 S' a; u: s) j; h   o(value)             ; 段偏移值 (= value mod 0xFFFF)8 K" o- N) H% k- C) T1 m, {

9 m( C% f: ]0 a* O1 r, y( o*) 例子:0 y9 K# ]3 ?; S: F

5 _5 ]( M4 |1 j;--- Testing ---8 t% a0 Q8 e" W( i
) g. r* y& E2 o7 G+ ^
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
" V0 l* H% f: A8 s( Z+ y- O, @- ?6 b" m4 u7 L; w
#ifdef ME45
% Z! f3 I0 Z) L0 E( Z  #include me45.inc2 `$ Y6 U' j7 {' v* t. _* }
#else
% g/ c9 F/ O, G$ m' Z/ F/ k$ d  #include sl45.inc
" o" q( O+ F2 b" _$ B+ e1 v! h  #define  FreeRAM 37h:3600h
+ C  j3 v, C5 P; o. z  #define  memcpy  0c7b384h) m4 u% L: t8 X* m- ]. a& G/ ]
#endif
& G# o% R$ g! z5 T7 M3 U- N0 G/ U4 T
;#name TST. Test Patch            ; 补丁名
8 ^4 I) H5 f6 Y! C* C2 h5 u  u& ?* d; \
'Firmware : sl45v56
% I8 B' \& T$ ~0 v. c'Author : rizapn
; ?3 X1 ~- \7 n$ b'Updated : Aug 18, 2004
5 }) o5 c- |! y+ d( t& i% p' R6 J6 _  B  O, ?
org 0c7e000h) F- \4 P8 ?* Z3 W. P; k
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移: z. H4 D2 S! @: F! p
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
/ H5 l) m5 r) E- q7 ^- O3 ^) @* J1 d7 o    extp  #p(data2), #1             ; 跳到 data2 页7 T9 h+ {) e. ^$ p+ r
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
. |( ?' _$ g' C/ y5 s- z    callr sub_1                            ; 页内调用
' [% }1 R7 D! E' C6 w  @. u    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'8 G9 v# }3 K; O9 _6 o. R- S
loop_1:
4 U3 v$ {* L7 \4 p9 i( M$ T    mov   r2, #1234h
1 n; H5 w5 A) P3 H& e9 r: u# a, E8 D    mov   [-r0], r2
. g$ n8 {" ~* ]( z    calls memcpy                    ; 调用段表示的子程序6 H. C! ^8 w9 T+ C0 x" R
    add   r0, #2( A9 Y" w# f2 L( B  }2 J
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处% _) ^) W  F8 ?
    rets" @4 f$ {- p( E9 S! k
' E$ q3 O  Q0 C7 R8 t  G
sub_1:
7 ~. U5 H$ o0 V" [2 W- v    mov   r4, #1234h$ n1 U8 [: D  L6 p6 A( q, l) W
    ret
- b  O: K( E8 Z: N3 A6 `
# R. r; Y! M2 l' E' P) ^data2:! z2 n$ R! Y9 G4 }' h* f8 j" V
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区6 H! d! W1 [9 i& Z. A" q3 x; y7 |$ F
" j3 T' a4 f7 d5 D
end3 }/ X1 N' L  Q8 e  G5 L, U/ \
7 H3 Q# G$ {2 }3 ^0 u8 M
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/ b: B# b4 j" i

" M0 @/ o! X' g7 y/ I. UAllaahu Akbar,3 i# ]* h' g5 S
RizaPN <rizapn@yahoo.com>1 N2 j3 \' o* X+ ]
Jakarta - Indonesia/ N1 [2 ~+ O! N; O
$ l! Y0 H7 q! U
[ 本帖最后由 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-19 20:12

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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