爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
; L' M6 q/ I8 a' I; j* v
, n2 E) s+ U( |2 t( M! K简单帮助:/ N5 Q& x( N4 ?  g1 b! O. i7 k, n
====================9 o8 U4 c& R. P
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。; S; _$ g( Y# C- k. [4 W! v7 [# P$ G# z
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助." L7 @3 Z4 y5 F+ \* T0 ^6 O/ Y
8 D5 ?' q$ l6 T3 v' L; u
( W' Z1 }1 N: E8 O/ Y; k+ n2 w
搜索空白区:% T& Y2 R2 j; Q' J1 v- g
=====================: X9 f, ?0 y9 l; r
> sfe 0                        ; 帮助
; {' C) i' K+ ?: ^> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
1 q# ]0 \8 L) x# j> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间" s  x' d$ V6 i) A9 A6 B" F
- y" g+ d4 y) y
二进制拷贝:
+ M4 K, M# U0 b8 \9 u5 M: q" ^============, [! A- r, W! z; |+ A0 t0 {. z/ A$ v
> sfe b                                      ; 帮助1 [+ g. b. c, ?. J4 A
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
" D8 ]/ c+ Q2 Z; L2 x* W> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin6 L/ y/ j+ T' @( C* B- S1 {
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
  H. o" M) P- q+ P% c% c  E> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
: @# \3 Q  W- p. \6 Y
+ b: N: T( F5 d, I; ?比较文件:" g+ N7 b5 V& D1 R  E) R3 ^- e
==============/ R* O9 g8 I+ m, S9 S7 D6 s
> sfe c                                              ; 帮助
8 M* J. d7 r7 F1 Y! z: n. D. X) ?> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin  _4 g5 w8 k2 l7 S2 g$ i
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )$ W- w; Z) B% ?1 c1 N5 @# R  i6 _% |% m
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes# A/ n' G; Q9 u+ E
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )7 [0 J% m( b3 m  C* w
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A000004 o+ `' ~$ {: t/ M! G" }: T
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes: t' E1 f: W* N- m6 _
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
. y% q1 ~& o4 l0 B, R
, h* b: j' W' m) Y7 C; B0 e# g发现16进制的地方:- |4 L$ O& y1 N+ R, Z/ m
====================( S! E- y* H$ v1 {. a: k. h
> sfe f                                     ; 帮助
3 r5 W: u- A9 b> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
( k/ x* }8 D4 b  a2 |& \2 [( {  {- C> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找6 n: O; i% z. C+ P* s
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
, i; g% m, M& c) X' `3 ]( q> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
) P( b0 J/ M% b+ U5 s: f> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小! ~. v8 m; R$ B; N5 e+ F
> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.' ?* T* o" A6 G" c

5 ~. h# h% l4 W! `提取语言数据:' J- o0 W7 f- W
======================
/ f( p) m' t' H" C- F> sfe l                                          ; 帮助5 l" a' Z$ \3 X7 G
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据7 \4 o) f) y0 {' _
> sfe l src.bin 200                          ; 显示 ID 200 的字符串) s# ^& I0 R; ^. t
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
. Q- k( B/ m& b- `' t7 V> sfe l src.bin -1                             ; 提取第二种语言
7 ~. c" N: C, K; \5 [> sfe l src.bin -all                            ; 提取所有现存语言
# A  f+ a+ M  h# N> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串* C/ ^: `2 s% {5 ]+ e& z- Y
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)' l6 v5 e! S) L  U
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
7 ?, [7 _* s) K: f2 Y8 S> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 1 x( q& L' _0 |
> sfe l test.lng                   ; 检查test.lng 语言包& p# u$ q: V: k: _( a
> sfe lc test.lng                   ; 检查和更正test.lng 语言包
5 u; s" B$ a: @. i
! o# ^" V+ L" h6 U4 {提取菜单:/ E& m3 K) v9 l1 v7 Q& F
=============
& @, b; a% i8 D' ^1 k  d- l: x> sfe m             ; 帮助6 h. p$ [2 J  y  P
> sfe m src.bin    ; 提取菜单结构和入口
' A  q* l. E7 p  |
& s  d% T  c" N& J- a% U' c% @% y" `# D, |% C% h
补丁:
% k8 h  s1 k& f' \=========
2 F7 `' D! V" V/ q: b> sfe p                                        ; 帮助/ ?8 a: d/ u2 o- l2 o6 N7 H
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
1 B4 h3 U9 S9 E, A. d. ^1 i> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
- d) H) n$ M, C& h" @> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz ( X9 n& P& O: v; r0 P# Z

8 N1 D! e8 ^, w6 B  e
  i) R4 R) p, Y" m编译:6 Q1 l+ x# d! p- K; [  ?
==========7 Y' s  B  k/ d. \
> sfe a                                     ; 帮助; M! p% e6 I2 O
> sfe a src.asm                          ; 编译 src.asm* ~4 B  o/ f8 ~; u, X
> sfe a src.asm d                       ; 编译 src.asm, 完整输出" S: f0 R% Y7 l1 u2 X  Q% s
> sfe a "mov r12, #1234h"          ; 单句编译
$ M7 A4 d4 w3 \/ v3 U> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译& e  B! A) I0 u  Q. R
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
! v0 Q$ `/ H) i- n4 ?4 A8 A> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
7 k  s9 b" }0 _' p> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行, I# B6 i% e$ F! r
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
. H  ~6 c! V8 ~> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
7 e4 h+ `- m/ c8 i( `& Y
( _) D8 Z" i! z  F*) See Assembler Part to get more 'assembler' function detail
# R7 t" l: g9 \( `) ^
  ?9 l, f3 m1 X3 w0 D6 H/ |3 W/ U- k) r) W2 H. q, s/ _7 o
反汇编:0 D& I$ X- H4 v7 Y
=============
* ?. K& `4 O4 r; n5 H& [) r) U> sfe d                                       ; 帮助
+ z! v# e4 ^0 Q, m> sfe d src.bin                             ; 反汇编 src.bin; D/ y7 \/ F2 S/ S& s, I
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin' ^" H1 |6 b/ r; d2 R) n
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节8 |" s4 a, D3 v8 H7 s
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000005 t7 k! C; U- k3 K9 ~0 `
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止& N+ N8 v1 ^2 M8 b4 l9 H
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
. s" s  Z0 u; e) X! S> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件7 Q" {7 L) H' b/ S2 {) P! }( V
> sfe d image.bmp                  ; 单色图形汇编输出
7 [$ a0 o! \  p: Y> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。( o2 t6 `7 D- i" k: u5 P

1 H: l  H& l' M) N/ I' z5 ~# B调试:5 z) W, x" o. E; C
=========1 j  Y8 Q. |: U7 B6 M/ k1 }+ D
> sfe r                          ; 帮助* m& H& J& T, R2 N; Y- ~4 v7 I$ G
> sfe r src.bin                 ; 运行 src.bin
" N* ^& i5 s' Y, s( F  ]> sfe r src.asm                ; 运行 src.asm 汇编文件
! I2 b2 y+ p6 [: L7 O> sfe r src.asm ,n            ; 同上, 正常输出( S8 n, p+ T1 \/ U( a9 v- p
> sfe r src.bin,200           ; 从 0x200 地址开始运行
) U1 O4 m7 C7 p. R" e; j> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200/ o- }4 C. m  n( t) C; R9 b) O2 o7 g
> sfe r src.bin b00000      ; 以 B00000 为基址运行9 Z" T1 E$ v# k% Z" |( H
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行; A' X5 H; v- t' b& O% b( f
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
' w! g% @0 M" O' k  z# V* p/ Y( g5 a9 C) a9 h3 X! Q+ ]
$ J" z: ]. y& j& U
交互调试:' A: k' s3 y4 _% R) M- N: ?
======================/ j3 n1 h! n( y2 q
> h              ; 帮助! [3 d) g+ {# e1 ~! {$ M
> g a00000   ; 到地址 a00000
* v0 b& p; v& t8 z> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
/ ?- L( Z* S/ g# g8 ?* y+ K> d              ; dump 内存 (现在地址)/ `( N! `' J1 I" h% W/ j
> d a00000   ; dump a00000 开始的内存# y- K: J/ E+ D
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
3 ~& F' Y$ c  i) ~) Z) }. f> d r            ; dump 注册( @, w3 b5 d8 l! e; o2 T( G
> a              ; 单句汇编' G5 v9 M; q6 i- F/ B1 Y/ G. t
> a c7d530   ; 单句汇编地址在 c7d530
$ @/ Q$ G1 t: A6 c- v' K, g! [8 ?> u              ; 显示反汇编
% X8 j! X1 u" d- D> u a00020   ; 显示地址 a00020的反汇编& ~* `. m1 T% Y* \9 G- m
> r               ; 在现在的地址上执行一条语句2 c" h8 r$ B" f# E
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
1 J0 i) `1 J& h$ ^2 {) h9 Z> r 0            ; 运行到返回语句
' E: R, c* I4 b2 B: ]: `* Z> r -c7d580   ; 运行到地址 c7d580
$ Q+ N! x. U! T- s> q              ; 退出3 g9 j# D& L' E6 e) A0 a3 ]
: j7 H3 J! k" ^8 L$ |
*) 所有未声明的语句都会改变当前地址。1 Z/ \" k( k9 g5 n; N7 N7 G
$ o* d+ w3 i# w+ w
7 i" x9 o5 e  ^- o, h8 |: X% N
特别的助记符:
' ]2 e0 Y1 P7 B- i' Z% }- ]============================! Z' F5 |9 q8 R7 D
*) 所有C166的汇编格式- f4 w$ s8 o2 R7 {
*) 分号用于注释 (在一行的任何地方)1 U, L! L, Z! \4 O. W" N/ I
*) 特别的助记符如下 :& Q7 _8 w; R3 u) L1 O* G4 T
   #include filename    ; 包含文件(各种定义)
0 t9 k  N. w( a% M: ~8 s   #define var value    ; 设置替代变量 var = value
- {7 t' [( r# L8 c4 L" J% G7 V   var equ value        ; 变量取值 var = value
4 u! x; i5 T8 ^   db 'X',36h               ; 定义 byte(s) 数据区
/ h( l" i9 o, o2 `5 O: k   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
- @2 ?# V3 h8 }# D   org                       ; 设定当前地址; W; I: U5 h% @! W0 [
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
) f) g" f, A0 J! J" m2 S: M; L3 G   end                       ; 结束记号
5 @7 w7 W, z: L: ]: A1 W   ;#name XXX.string    ; 定义补丁名称 (XXX); c! y) }" {+ m; P0 Z, r
   '                   ; 注释将一起进入补丁- _0 m4 H7 h' T' A1 X3 m* |. i" X: i$ t
   ''                   ; 注释将一起进入补丁,加回车
) l; U% ?' S- ~1 X6 @. M0 O   ';                      ; 以下内容将全部是注释,直到出现 ''
+ o4 e0 t9 q, O: q   ;'                      ; 注释将一起进入补丁
( ]% X( Y( H" W8 h" W   + - * / %            ; 加, 减, 乘, 除, 求模 操作' R3 C( M: ?; |3 {+ I& H5 o
   >> > < <<         ; 右移左移操作
0 A. _+ R1 ^# n   & && | || ^ ^^    ; 与, 或, 与非操作
" v& x+ G) K. a# }& K   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
3 {1 O9 A: }3 l4 l3 n   page(value),         
7 |3 Q; |% |' }6 t0 Y; r( ^- R   pag(value),: o- z6 i! g+ d+ F' Y8 w) a3 E) A
   p(value)             ; 页值 (= value / 0x4000)
; k2 J, H3 G8 G, L   pof(value),. q  |, J1 J' t% r. F" x
   q(value)             ; 页偏移值 (= value mod 0x4000)- [$ ?9 w# S( q, w# G9 e
   segment(value),
8 x% N5 ^% X9 L3 s+ ~   seg(value),$ C) i& h; j8 A; P: O2 B
   s(value)             ; 段值 (= value div 0xFFFF)8 g1 ]9 ]/ Z9 ~2 N' u- `# I- A2 g
   offset(value),6 @* W( ?8 T8 ~! W+ w* P& Q/ i
   ofs(value),2 t# x* _; O2 i7 N
   sof(value),
8 Z/ d" l. h  O) T1 n4 T   o(value)             ; 段偏移值 (= value mod 0xFFFF)- N+ I; r; K, O
- q) {& A& C1 z* A' l' {
*) 例子:
0 d. M. Z( G% _& A, K7 R4 G
  n0 N  f" O7 l0 V: z;--- Testing ---* r4 M# g: b9 @! Y1 U% s
! M: A! Y! Z/ y& A2 x: A) a/ f' z& a
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址. g5 X/ w. X$ L6 i: C& `  M1 w

2 Z1 v6 N, O! p$ P+ ], p4 N#ifdef ME45+ P" [% Y( s, ^0 R) O
  #include me45.inc
; Z( G% P) `" M$ d4 E/ ^  i( g2 s#else
- E, O3 T3 b+ u  j  #include sl45.inc- _' e$ j" H* E( w& ]
  #define  FreeRAM 37h:3600h  |8 s( R2 C, F- m4 _6 C; H
  #define  memcpy  0c7b384h$ E/ ^* y" L* V% C$ r1 @4 Y, g* z  r
#endif/ s8 j6 J* a4 m8 r9 S0 n

- F. E* z+ B# w8 A7 r;#name TST. Test Patch            ; 补丁名
. @+ V2 a/ p( G4 V7 e
6 `. s* e# ~  F% m' l'Firmware : sl45v56
0 Q! B8 C* V' h, d+ |% }, X'Author : rizapn  j& P4 S% z3 \7 U! v* u) p8 s* ?
'Updated : Aug 18, 2004  @8 b, |# y0 ^1 R+ S4 y  i. c% V
! Y& ^2 g) ~1 I, U9 U5 q
org 0c7e000h, K+ h, g. z5 b( R
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
# t' T5 q& J% r$ u# ]& W1 E    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
. V$ }9 }* P4 W# k( Z3 s    extp  #p(data2), #1             ; 跳到 data2 页0 k- F, m/ ?9 `
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
8 V% P  `0 t4 {/ E    callr sub_1                            ; 页内调用1 _' d9 s2 K5 I5 ?7 i0 q
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'0 x+ N) B. @2 E# O/ L- ^  O
loop_1:4 V$ v% }3 z  W( _
    mov   r2, #1234h
6 ]/ v9 A% q1 z    mov   [-r0], r2
7 i9 @, n6 U% `! U; u0 V4 O& W9 Y" v    calls memcpy                    ; 调用段表示的子程序
: o6 v( ], g5 S  E    add   r0, #2/ k% h" h$ ~3 T3 M
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处4 X2 Y+ Z+ O7 V9 h& c" G
    rets
( Q: P' l" w1 ~- Z5 I" [( p1 X
3 Q, n' q: b6 Y; ]" M  q5 Y' bsub_1:. q) L5 q$ p. c5 p$ c, U( S
    mov   r4, #1234h( w1 X0 N6 w, X, p$ g6 O
    ret
: k+ o4 e, }7 d% j1 Z4 e6 C3 U5 i( |) K. M5 n; E- K0 f* x
data2:1 V6 a% z5 J/ K+ u
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
) ?8 G2 \7 n* W! H8 ]4 o! i! j: E& j; X% ?- p9 {4 X
end
4 n$ K4 A* m& g8 X7 b, r" |7 m  l. \4 M+ [" i/ [/ Y4 [
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 `. B7 T! O3 E- K8 v- S# t/ x, j! E9 A
Allaahu Akbar,
4 O8 k% l3 X' x  ~2 jRizaPN <rizapn@yahoo.com>1 l* H$ T" Y2 ^* E9 n
Jakarta - Indonesia; |5 ^5 t, j. D4 {$ X

1 C1 \5 a3 u/ @1 p8 R* I  q[ 本帖最后由 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-18 09:20

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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