爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
6 r9 O7 p  I, I8 Z% H0 I) W* ?! O- L" {) K
简单帮助:) P' H( w1 |; z. V5 A7 U/ o
====================
) j% h2 U8 v2 b0 L2 Z1 X& P*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
3 ^  D. i) v. v0 W! D0 e6 `" q" Q- }*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.- ?# ^2 {) F  A) S7 O) b! ~( J
  F6 Y8 F5 @& p! ~* m+ K

9 o5 B2 d6 u9 N1 [  L8 P! h搜索空白区:' f1 w( L# H6 B" h0 U
=====================! W: Y8 S  i( l
> sfe 0                        ; 帮助& K4 q1 W# y8 }! ]) \+ T3 @
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)' L6 G- b  z) l$ [# d" X2 S
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
9 G2 M8 C  R" D* l/ k9 ^/ b  w1 Y  u0 v  O5 p7 W
二进制拷贝:! \& p$ X- m4 m  F! e- r& j1 t
============' M  c2 ]& u) I8 x" a' I: }! q9 z
> sfe b                                      ; 帮助/ ~6 N; S5 ]1 B$ a
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
6 L2 A+ x  i3 |$ u5 @+ n> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
  I, F& v" ?2 I. t> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
  n7 R+ \' n, k" U4 a; n> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200( g" E0 i  d- N2 ~

/ `1 q& B3 g5 L& v- W, e比较文件:
! t2 s( |9 d% r% E) c$ H- u8 Y' a==============* W/ k$ s/ d% W, V
> sfe c                                              ; 帮助& I8 h! P$ B2 I* t
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
  u% t2 m9 x* E/ w; _6 I> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
( K5 ^: \; v7 y* |> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes0 H2 v3 l( O1 y1 N" i
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )3 J8 d3 E' f! N0 N# \; x
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
( S( u# t( ]* o% }) E. S> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
: E1 q6 z# c# a" F& J9 ?- Z> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
- p5 e  Q4 S8 P$ Z* e1 R! _0 i, K8 K: q) P: Y5 H) E
发现16进制的地方:
. S/ H) @$ Z% F& T+ C6 }8 l====================
% R# Z7 E6 N2 V5 m0 X1 E  r: K> sfe f                                     ; 帮助
6 ~, i+ \$ Q9 {9 o> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
3 k* b2 D" A9 C/ ]3 R3 U> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
/ S" M: J  p" n3 t> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
7 R7 H' u; V# P6 o  ^* e> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
( P" L$ m! P$ g, M& F, ^- }  B& ]> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
. p. g  B2 N# H> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.- m, H# E+ |: X" ^
" ?' I  y" ]& J, @1 C
提取语言数据:
) }8 c1 D! B' N. Q' P& B7 m7 {. b======================
0 E/ @4 q2 O  _( z> sfe l                                          ; 帮助
1 G% H2 c/ a0 R5 _> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
& [5 W! ~& S; ?, p> sfe l src.bin 200                          ; 显示 ID 200 的字符串
: b  M6 a2 t. p% L$ K( A> sfe l src.bin 200 2                       ; 用第三种语言显示字符串7 |# t. l" e: l- T% S+ {+ P
> sfe l src.bin -1                             ; 提取第二种语言0 @9 }9 c( g1 N( v& W
> sfe l src.bin -all                            ; 提取所有现存语言/ `% [3 _/ y' d
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
- K. Y5 y1 V6 [> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言), o' o1 o" o# r, Z9 N& Q+ @
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
4 m8 d) T  ~6 I5 N, h- h0 c2 [> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
* M8 @" w" i0 Y  g  D! h( T> sfe l test.lng                   ; 检查test.lng 语言包9 g8 w- @& k$ j$ W9 \
> sfe lc test.lng                   ; 检查和更正test.lng 语言包0 N* @) H2 P7 c# Y( @$ r
9 [8 D4 k- [3 ]" Z! z  f8 O' T
提取菜单:
6 \7 H# d' a* i7 G6 e# D$ ~=============; {1 j( T& U2 J" c# q* W. R! P# q
> sfe m             ; 帮助
$ j9 y5 T% c- R/ B+ P9 ]% j5 V> sfe m src.bin    ; 提取菜单结构和入口
; m" p( @) V/ Y; z: E
% P6 Z9 V+ W0 h8 |& p
0 ]" w% _/ V) q补丁:
& C. i! b/ H) j$ ]=========' n6 j4 i+ t" G& Z8 n3 W0 e
> sfe p                                        ; 帮助. k& ~3 H" n* k4 ^+ l5 a
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
$ T; h# j6 @' n& b+ r! N5 u5 q7 |> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
) j! b; M! b; H7 Z7 f> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz + R& z! d1 ?( }5 e- ^" ~' W
# w# ]! z( j0 n2 ~8 _4 C
- i% N4 q9 C9 N3 G% J& F# m
编译:+ y# w. j, Y0 o; k- W
==========- U+ p& x+ k/ Z2 r
> sfe a                                     ; 帮助
: O1 m, z  W: R8 h# [> sfe a src.asm                          ; 编译 src.asm6 a' V) F, D( D, y. F
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
& ^- N; N* B! i> sfe a "mov r12, #1234h"          ; 单句编译( V$ C, C) Y  v' s7 s7 M
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译7 P9 [8 a$ {7 z& o0 c/ i  L6 ]  Z
> sfe a src.asm,TST                    ; src.asm编译成补丁格式, t5 B+ `/ |9 D8 q! s2 g; R
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
1 Y7 P# X4 M2 t3 Y- x> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行5 G: S- s# |. c2 X+ V9 T! p
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000008 c# Q5 O7 B% H$ M% Y. \+ Y
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。6 G" O) {0 c, j" w6 J3 G# y
8 G: M5 O( S" j# C9 J/ q6 }& t
*) See Assembler Part to get more 'assembler' function detail
$ d& y2 V- o  i& ^: @' @: o% P( ?; g0 u! \- J; M& P

) p& h6 S' q3 d" z反汇编:
! w! z) L4 q# c# h: f. Y% i0 X=============8 @3 R2 G8 L* o
> sfe d                                       ; 帮助
9 f" K; [4 b$ d8 x9 n> sfe d src.bin                             ; 反汇编 src.bin' R7 r1 L  R" R( ?& m+ F
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin, V4 `5 K7 h7 {3 x! |
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
* o( `; K+ g( e$ k! ?> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000- V9 K2 j! R; F9 z+ m, L
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止9 m% Q& t" P8 J- ~
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址) e6 b- w: d6 N) r
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件% G0 j; g! f% I( ]3 H+ K# {; n, N6 Y* c
> sfe d image.bmp                  ; 单色图形汇编输出
9 u' w, t7 G. m, I> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。3 I7 S3 k9 K( ?9 i: Y

8 |4 _" R. K7 M, a; U4 Z# q" E/ C5 g调试:% J2 }8 L2 H9 ]1 m5 _1 P! Y* u* L
=========8 w/ s' X4 I% f' y; F
> sfe r                          ; 帮助
% e0 w0 }4 v5 G9 b2 R7 m2 `9 I> sfe r src.bin                 ; 运行 src.bin
& r: ~  b1 u7 n; [& ~> sfe r src.asm                ; 运行 src.asm 汇编文件0 {% O" ^5 q& @4 n0 G5 L% s
> sfe r src.asm ,n            ; 同上, 正常输出0 ?; r. Q2 v' S
> sfe r src.bin,200           ; 从 0x200 地址开始运行
+ T. G9 \6 Z2 j( Q> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
/ C9 A  u* O$ O1 c> sfe r src.bin b00000      ; 以 B00000 为基址运行
# n! }$ e6 c( I> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行$ E5 }, o# E/ `; ~
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行4 U6 U5 Q8 I0 W# `0 s& H
( Z: W- W* b' D, q" s

+ h. E; d  P, ^' e# r交互调试:
( U, C% E! S* w& g======================/ T4 w: ]5 f: `) |" _) ^$ d
> h              ; 帮助/ ?) U0 N2 p6 E( b
> g a00000   ; 到地址 a000008 k$ f) D# _) b) b/ U# u: @
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)4 B; p% B  N4 \
> d              ; dump 内存 (现在地址)
  s  p3 M  }( y( ?" o> d a00000   ; dump a00000 开始的内存
# ]2 B' I1 R! a, o> d a00000 200   ; dump a00000 开始的内存, 大小 0x200. ]' o& ?: f7 p4 S9 Z
> d r            ; dump 注册
/ e) g+ ?. G3 V3 x( N6 i; [+ A4 A> a              ; 单句汇编; o% y3 _$ T; M. ~! R8 m
> a c7d530   ; 单句汇编地址在 c7d530, o7 h+ X3 z4 W. Y' S  P+ a& ~( G2 A
> u              ; 显示反汇编
4 |$ v# Z0 [- Q9 \+ ~> u a00020   ; 显示地址 a00020的反汇编7 l: ^& E1 a1 H% ?+ z
> r               ; 在现在的地址上执行一条语句
( G0 }. k. T* \' J3 ^> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
% S; l' \) o1 k/ P> r 0            ; 运行到返回语句) {% E  u# i0 Y! n+ n
> r -c7d580   ; 运行到地址 c7d580
1 f6 z% ^+ n4 |> q              ; 退出6 c9 [3 E3 A' \* K% @! H1 y7 ~7 L
8 f% L; j! T  W1 ~& l4 ~4 U
*) 所有未声明的语句都会改变当前地址。. G3 R2 M$ h- x3 P  F

4 k6 x5 l" m1 ^+ ^' Y- w" ?5 B
2 z' G+ r; T/ \- B! H: T1 N, r. w特别的助记符:
. K$ I- \2 t* l7 _) F============================5 Y) R6 t" ?+ u' _$ _$ V& B
*) 所有C166的汇编格式: K! q: y+ C( ]8 w
*) 分号用于注释 (在一行的任何地方)# y! L8 I- Z2 }
*) 特别的助记符如下 :
. m  R% P6 g0 G5 O* ]   #include filename    ; 包含文件(各种定义)
8 B: Z- @+ V- n4 N& ]) i   #define var value    ; 设置替代变量 var = value
. [* b+ E+ A0 N$ R   var equ value        ; 变量取值 var = value, @% \0 M; t' P2 z% n
   db 'X',36h               ; 定义 byte(s) 数据区
, j) M) R) v+ ?: F* T* c' ?   dw 1234h,0,'AB'      ; 定义 word(s) 数据区4 j( U( ?- _4 o8 n8 {) P' }2 w
   org                       ; 设定当前地址, y) M( X0 ]1 B7 d  H
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)1 F- t; l3 j/ f6 }/ A
   end                       ; 结束记号4 D+ q$ i" o6 Y6 Z6 ^% Q* d
   ;#name XXX.string    ; 定义补丁名称 (XXX)0 X! W+ I6 S( N6 g
   '                   ; 注释将一起进入补丁
* y0 g! I3 v8 V/ ~) Q- {   ''                   ; 注释将一起进入补丁,加回车  N, |; L* X1 P( G3 X
   ';                      ; 以下内容将全部是注释,直到出现 ''
9 V0 ]3 l2 j/ d8 S   ;'                      ; 注释将一起进入补丁. A0 q& g. V3 _/ S; T- X
   + - * / %            ; 加, 减, 乘, 除, 求模 操作; t% @3 s1 R/ D9 l2 E- |4 p) k
   >> > < <<         ; 右移左移操作
: _1 t" d5 B1 w4 s# I7 W; Q5 |   & && | || ^ ^^    ; 与, 或, 与非操作; e7 [1 m# M  X$ P; o
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
  x( c' |( n% j   page(value),         
8 g* z1 V- v9 \2 U3 n" \- [, ^7 }   pag(value),
( N7 {' ]9 K4 F5 Y   p(value)             ; 页值 (= value / 0x4000)! M2 u% D) f3 }3 }% \% N. r
   pof(value),; f( ~) ^/ q  W( n6 m
   q(value)             ; 页偏移值 (= value mod 0x4000)# \) P5 H* F8 o" c+ A
   segment(value),$ C' b0 y; j. N0 O: r
   seg(value),$ B/ z; D% Y: e) E! P6 j7 J- ]) P
   s(value)             ; 段值 (= value div 0xFFFF)8 D. o; c2 W( |
   offset(value),
2 O7 ^% _1 y4 o7 Z   ofs(value),
/ D0 z: C1 W. H: {   sof(value),. z7 n4 U0 I2 A) N
   o(value)             ; 段偏移值 (= value mod 0xFFFF)
! k2 k1 c! d, S  T% O6 B# M5 f0 g
4 e9 S" D9 O' ]) {" s% y$ Y*) 例子:
9 k$ u0 \; k! R
7 W$ Y. B1 D3 d. b& d+ [;--- Testing ---
! V: J7 y& y9 J6 V& d& S- z  A) V/ B1 s3 Y: S9 o
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址* P' G. X/ O0 {  b# Q+ x' A5 m

% y# U) {# D& H9 I#ifdef ME45
. ^, P7 S4 B5 q2 q: g  k  #include me45.inc0 K) Q: V7 U) ~% w  X
#else
4 J& G0 I% P: i: E/ D9 k7 S" ?  #include sl45.inc
' U# z' U, M( c  #define  FreeRAM 37h:3600h8 M4 c2 x3 e: {7 C3 ~* M8 `
  #define  memcpy  0c7b384h: w6 g% O+ c, G9 E( {
#endif
- Q, k" b2 Q( C- C0 Y7 }0 q
! X5 M4 o/ W7 u;#name TST. Test Patch            ; 补丁名
3 B) @" |* \; i: `6 q
+ v1 s. T; `* l) [# I: F0 T'Firmware : sl45v563 m: J. B) I/ f: Y$ {! F
'Author : rizapn
# G2 U. r; C* {1 E8 `'Updated : Aug 18, 2004
1 V4 T& O" R( ~- [" O
& V2 o  T9 n3 q( Iorg 0c7e000h
& i: T+ n, M8 }7 }8 g/ M% D    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移4 ~- n8 I/ _0 \: ^2 k4 y1 F* w& h) _
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值. n! |% J( M- C; S2 n. ~
    extp  #p(data2), #1             ; 跳到 data2 页
  O' U3 i! P8 ^) S    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)+ Z7 O9 n; f9 ]8 U$ {" \$ _
    callr sub_1                            ; 页内调用  {* T; m( }. ~0 f
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
8 ^) t# n2 \0 P  Cloop_1:
) i- x5 B% h# ?% R4 C. \  N# O  b8 e    mov   r2, #1234h8 i9 {0 o; q* I5 |5 t, a
    mov   [-r0], r21 Y, V+ q" T6 y7 @% u1 B; V8 M
    calls memcpy                    ; 调用段表示的子程序. q& r! N& w/ i' ~% x1 p$ K
    add   r0, #2/ y) r0 V+ u, m* _
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处, U$ a! ]% F  B1 u4 q* l4 {
    rets
4 X0 w& l+ l5 i3 K( N6 B. e4 V" F  h. u1 g4 S7 V$ s7 S
sub_1:. c7 n; _) i& s3 J* R; _( k
    mov   r4, #1234h2 z, O) _/ [  e5 J; s) G  _
    ret
- J( E( u9 f6 v6 |, Y$ B2 _* w8 N9 r4 R# w) s/ Z9 X" O
data2:
1 U; ]' X8 T; R; s. g" F: z7 P    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区( X. H5 e/ J. ~# [
, H. m( Y: [( I. f
end! g/ M. D8 {0 j  J

8 y7 L: @# C5 Z  A8 ^. A& I;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; \! R* I4 q+ n( K& p8 `- J+ X. |
, `7 u6 k4 a; w' TAllaahu Akbar,( @4 ^7 i8 |% h
RizaPN <rizapn@yahoo.com>  F3 x: w/ k% N7 f
Jakarta - Indonesia
2 u& Y8 u9 ?' t2 C  p4 H0 m
; d# ]0 A. ^* O[ 本帖最后由 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-24 22:06

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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