爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
* Z' u3 c& `" A; K
4 `8 h0 P8 X7 Y; d+ ~简单帮助:
9 U. |! `$ L3 }# F* q) V: i" o====================; d& D" e" j: G5 C
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。% L7 t3 q* N* e% k2 s: q2 b8 a! x
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.& W& S, Y1 n) m. `$ D
! U5 g! V8 F4 `! [) y6 H& i, Y1 W

! u( h$ W8 k  L搜索空白区:/ s8 ?$ Z; R  F  Q
=====================
$ E5 |+ ~( d1 P- F! u$ i/ H> sfe 0                        ; 帮助
4 c& N3 W. C+ t9 e/ W6 L2 R; T# X> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)7 T* u' b0 I- W. x- b
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间4 W. m0 V7 E+ V# R

- M! s4 l5 R, S二进制拷贝:
6 N/ x  r* u5 M) E3 {' J% t============; D5 k0 v% X' T: x9 i
> sfe b                                      ; 帮助
) n# \1 ]4 b% E  M6 S+ \( F> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin6 T0 d& S& g# l- E5 h
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
0 ^& g1 e+ l/ n; T( l1 Q> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
+ a/ t! d. v6 c> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2001 c7 _) O1 Q8 d( Z2 t! K
5 q2 b) U0 P+ z; N" E# ]9 y+ E  m
比较文件:$ ]% x6 N9 R- F0 w5 \1 z( K0 u8 G
==============
- I4 R; S: u- l1 t/ @/ K9 j> sfe c                                              ; 帮助
3 U( @! V8 j2 b> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
% h" @4 T/ s1 I" Y9 |0 v" v. F7 j> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )* s. }. c. K! W; G
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes' R* a7 g- `: J8 o
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 ): R* y6 `% ~' k" D
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
# s- X8 c$ ^4 h& {6 \> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes2 Z) n/ o2 y5 K( A8 u; M: l
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)! q6 X  Q7 ^1 i* P2 a1 W3 g% |
9 P9 ?7 K  ~7 u! y  y/ f; F3 ~  x+ f
发现16进制的地方:
- N: L/ Z& `% w' K8 u6 [8 y====================
: N" T9 j( F) `( D1 d% [1 g> sfe f                                     ; 帮助
4 A9 y4 K7 B  \) F> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个# u- |* D0 u2 H2 Q7 p. P+ }
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找- S- U$ p4 X: M! n: l
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes+ p. Z; i/ M2 p9 }
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
% O" k- Z' x% ]# g> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
3 F  e7 N9 g: {1 I) d4 c> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes." Q8 f7 a; }; J7 x( l9 P5 B4 z

) [* Q# @9 E; S  F提取语言数据:
( l' q& f3 m. Y# Z======================
& B7 c3 y9 T& L7 h# Z7 K  g* s! M5 s> sfe l                                          ; 帮助
. |; b: ?  o2 p1 u5 m7 s! ]3 h, B  t> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据. c5 s8 g3 w8 p9 p. k* A: ]1 E/ {
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
4 I! h) g% L: `> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
! x: J5 i6 e7 [) {2 O4 ~0 r; O; C> sfe l src.bin -1                             ; 提取第二种语言
8 Y) Y% L. |5 H8 D5 \> sfe l src.bin -all                            ; 提取所有现存语言
/ y4 U1 M5 Y1 [) ], k+ ]' ^- w0 ~6 i+ H> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
0 z" n3 [& ]1 s2 g' m> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)) n) ]& T& F8 S" m& G4 u
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
# M- @2 P& F2 n  n- E> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
3 }4 t  I) C0 d> sfe l test.lng                   ; 检查test.lng 语言包# _) L* k. L( S- |
> sfe lc test.lng                   ; 检查和更正test.lng 语言包5 l! }  s+ b/ N6 k
" \9 @+ F7 n. {' l& |& k
提取菜单:& T. n: l( M# T: k- G% l
=============
9 b3 J5 z% ^: o9 ^> sfe m             ; 帮助
  Z2 W: U0 _) ^, I> sfe m src.bin    ; 提取菜单结构和入口# i8 u2 ?1 C/ |% H# l

+ t6 v7 x& p# k2 s( d
  {) J) ?4 Z+ B) ?; F6 Q% k补丁:; z. H; l3 ?* b! ^
=========' J* Y: l# K. @  ^: n# K! E5 o% j
> sfe p                                        ; 帮助
9 [/ ^1 D3 l, G* r> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
" G2 Y/ |# t# f) A( Y7 W> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
) H( U& J+ ]" o> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
6 H+ m; O6 W' ~3 P7 H; i6 L& u. x. L

9 B3 W' L% ^) e  d+ \1 z5 z编译:1 X' k1 c5 P; V2 a9 V! v6 k
==========) f1 y* b: b8 l! x/ g( O0 G3 S
> sfe a                                     ; 帮助
* O$ I5 ^; m* ~+ {> sfe a src.asm                          ; 编译 src.asm
2 }; E0 G" u# U3 t4 {> sfe a src.asm d                       ; 编译 src.asm, 完整输出" |' b0 z/ ^! s: J+ `2 N
> sfe a "mov r12, #1234h"          ; 单句编译& l+ \3 B+ t/ `! ~4 y0 e: w
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译1 y( Z. J$ _, r  _0 m; e/ A" d
> sfe a src.asm,TST                    ; src.asm编译成补丁格式1 S6 i5 F8 C2 |" x$ J0 M# ?
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式3 @7 G* a' o6 q4 T& g
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行# h+ V& m" d: P' w: N% ~
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
" S! Y: B/ Z+ I5 D% M> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。3 Z6 \9 ]0 O- D4 r; v+ P
+ U$ w0 u2 U' d8 W4 H( j
*) See Assembler Part to get more 'assembler' function detail
9 w, P' Q# M3 A/ H8 b. ]# X3 B6 t: M* H

) @; K; c2 j/ z( m0 y5 ?3 F反汇编:; q& H1 }4 C4 E; F2 \/ F! V
=============' I4 w3 }9 |0 u# l  V& u) w
> sfe d                                       ; 帮助- g2 s' `  O' f' t3 k) o
> sfe d src.bin                             ; 反汇编 src.bin
8 _& C; y) j; M; |1 p  f> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin+ `1 u9 J+ \% m
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节( e) e& X  v2 W
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000
: |; ]8 }+ R/ T  j5 Q> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
+ U+ A2 |& h4 r; e3 E> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
- K. D& T8 ?1 z7 x, h1 d3 E) c> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件9 a/ M" y9 ]! B. J% X; A0 r
> sfe d image.bmp                  ; 单色图形汇编输出8 D5 m2 T( T8 t7 G
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
! d. i# }6 Q7 C; W6 ^
& }! g( ^8 |) D4 b$ o8 |调试:
' N; b- p# ], V4 k, D) H8 \=========
- O/ s9 f; C+ G" I5 @/ w> sfe r                          ; 帮助9 u+ f$ a: ]1 C3 h/ M) l9 p( Z
> sfe r src.bin                 ; 运行 src.bin) K! \4 O: s' h) c
> sfe r src.asm                ; 运行 src.asm 汇编文件- c* M9 c9 a( h9 L' E1 t( _: a
> sfe r src.asm ,n            ; 同上, 正常输出
) P' ]$ ^: ?4 ^1 [- C. C> sfe r src.bin,200           ; 从 0x200 地址开始运行2 o: i- I/ i2 r
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x2006 w' G0 c; e4 Q# |4 H# d( O
> sfe r src.bin b00000      ; 以 B00000 为基址运行- O$ b' e+ d/ ^  V* J, i' U5 M
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行) F) m( V4 k+ }0 |
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
+ x! m" k& i/ `+ e8 w" ]* b
4 b% E3 o0 Y1 V" c! G5 g& i  g) q2 s8 H0 a; f$ I% ?7 ]1 y
交互调试:
# U- z& H" p3 R( Z======================
: q" @6 U! H6 o# w$ V" R> h              ; 帮助
4 N, J* l$ K( f' \- `> g a00000   ; 到地址 a00000! X) k" X, h" X( \3 w. y, |" w
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
; w1 E2 X5 k9 I> d              ; dump 内存 (现在地址); J& ]! K4 e" G  K
> d a00000   ; dump a00000 开始的内存  @  [3 Z; J- v" l1 I
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
' E- n* J3 `- A4 Z2 |2 G> d r            ; dump 注册: I+ m' _& @3 i4 d1 _1 a
> a              ; 单句汇编
4 R* W0 _- \2 M0 \3 G> a c7d530   ; 单句汇编地址在 c7d530
+ n7 F5 d; j+ |5 j( t7 Q> u              ; 显示反汇编
2 M- A' e2 a6 ?- O$ s> u a00020   ; 显示地址 a00020的反汇编* [. p) P4 Z9 Y1 D8 d* n
> r               ; 在现在的地址上执行一条语句& c5 g2 |- u: X" ~! @' J
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)" y: R+ _. a7 Q, K
> r 0            ; 运行到返回语句
$ W! y7 B3 X  b% s# [7 V> r -c7d580   ; 运行到地址 c7d5808 y  Y3 I+ ~% l6 k! `
> q              ; 退出$ [  e7 {$ M  m! t2 y- i! o
% j. w; }1 e8 x4 e7 q+ D) ^
*) 所有未声明的语句都会改变当前地址。) ~6 O' d9 r; R: z, H# R- T
# i3 B( ?! F& `1 f, q4 J

" I$ X4 E" q- \, @8 M2 E特别的助记符:
( W& V4 k" d% J9 u! U============================3 k3 s( i  x+ J4 c% a; X9 K+ q
*) 所有C166的汇编格式+ m7 x0 \3 ]  a# w
*) 分号用于注释 (在一行的任何地方)6 O, i- ?& Y) y! r5 n/ _' u- I
*) 特别的助记符如下 :/ r9 a; e8 n2 Z6 Q; x' Y4 q
   #include filename    ; 包含文件(各种定义)/ j0 `0 L; l" e- Z6 z7 C) J, U
   #define var value    ; 设置替代变量 var = value1 }, O1 L# n0 y% U9 J
   var equ value        ; 变量取值 var = value2 r. U2 L" i! I' O2 N
   db 'X',36h               ; 定义 byte(s) 数据区, Y% W! @& b$ C. N$ h( A
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
" x4 G. E! p0 ^   org                       ; 设定当前地址
1 e1 z, {+ [# _/ \. A   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)3 F" V/ N8 L4 u; b$ G: l
   end                       ; 结束记号+ X% e. ~) d! u" v( k' f
   ;#name XXX.string    ; 定义补丁名称 (XXX)1 j- X/ |6 _/ C; s
   '                   ; 注释将一起进入补丁
' G  T; r" O8 o% \+ j, F' a6 i" b   ''                   ; 注释将一起进入补丁,加回车4 E+ ]3 E& t& [5 X0 f6 B
   ';                      ; 以下内容将全部是注释,直到出现 ''$ I, _8 W" [0 M; |+ C3 X9 d0 `3 d
   ;'                      ; 注释将一起进入补丁" G' t8 n4 e2 W" |& g2 J8 o1 O4 n
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
, |* f' w% n7 e. x( a) [! a# y9 L   >> > < <<         ; 右移左移操作7 e( R- }; J; {9 ?3 u7 X
   & && | || ^ ^^    ; 与, 或, 与非操作
# Z( M' S; r7 n# L& d. @   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)0 w( W; N4 `" K- W' O& r% k
   page(value),         # r! W  {) x: [( q2 o
   pag(value),6 K" m* }6 x2 R0 g' n$ ]  v
   p(value)             ; 页值 (= value / 0x4000)
5 U' J5 ?" H( P0 a" L8 s# ?$ _   pof(value),
2 n) }7 Q0 J/ |2 d. r. f# M   q(value)             ; 页偏移值 (= value mod 0x4000)
. ]' F8 |& W* c" T* F7 f   segment(value),3 N" [: c, u  ^) S. F7 F( o/ y
   seg(value),1 T0 h/ |+ E9 t3 H
   s(value)             ; 段值 (= value div 0xFFFF)  j1 r: ?, l, L# \- O
   offset(value),
) {# ^0 p' s- ^# g+ J. L   ofs(value),
" i1 y2 i- _! C2 Y   sof(value),
3 W* Y, H# X  |3 ~/ s   o(value)             ; 段偏移值 (= value mod 0xFFFF)
3 _3 \- X+ e7 u4 x. I; |* W. K6 w7 {  ]' C7 b% s, H, x2 C7 z
*) 例子:
: U% H! Z1 r* i0 E; o; K: `- g2 _7 P: Y9 }7 A0 Z# F
;--- Testing ---
' Y6 e8 `4 _4 `
: Z9 R+ f8 ^# o& c% O5 c& C' cbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址/ w; S# r2 m, X; z3 V/ G7 z" T
& ~4 Y# H( o$ L* D# n
#ifdef ME45* ^* d8 d$ Q) B; j
  #include me45.inc5 v/ ~' `+ E8 j0 X5 H/ Y% m
#else( N8 I8 g0 N  m
  #include sl45.inc! e5 ]( K  j+ |& b, O* B
  #define  FreeRAM 37h:3600h
9 K4 k1 t4 V9 I) ~  #define  memcpy  0c7b384h
+ Q8 J  g, B0 S#endif
0 G5 W/ l. c# e2 h8 I5 x
' z: W+ c# l* x! h;#name TST. Test Patch            ; 补丁名
& U: `. Z3 a1 o) T% B( P
3 x( F% S2 B7 u, _'Firmware : sl45v56) J6 k; O9 n2 A+ M
'Author : rizapn5 b9 C6 p& L4 ?6 a# g8 s( F, o
'Updated : Aug 18, 2004. H/ o3 s0 f9 Q5 T
2 C4 F  q. |4 s: J/ R
org 0c7e000h
" U4 S% ~) ?- L, c2 R. X    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
, d$ Y- u- J" L6 x1 b% e    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值5 m' e/ J: q( ^# \8 l
    extp  #p(data2), #1             ; 跳到 data2 页
4 f4 @1 a4 i  x( O4 e/ ^; C    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
! o' Z: ]) v- h$ T/ T$ B+ x    callr sub_1                            ; 页内调用; n; x2 x2 h% Y( _( x+ D
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'* s" G0 N' j# @( ^3 S6 p
loop_1:
, b' l. h  L/ e4 \% w    mov   r2, #1234h! y) f+ i1 F, p
    mov   [-r0], r2
/ _+ i* _" ^1 J; Z0 i    calls memcpy                    ; 调用段表示的子程序
1 s1 P' o* K0 y. `3 X! |( S. ]    add   r0, #2, S" T/ l/ G* Y: d# p- k, [
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处5 Q' L. r2 A2 b* P8 L6 g
    rets
* ]" G9 l4 q8 w) Z. N/ t& k; n/ i6 p' \, A+ T' K
sub_1:- A+ W3 D+ U2 T1 T7 E+ q  T; L- ~
    mov   r4, #1234h
1 _' G9 @% X8 u1 g5 D# \3 r    ret7 \) c5 L  Z$ R+ c# W' k- d

8 x) U' l' a) cdata2:
! s: `0 e1 n' y5 M    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区  V2 U) h. K8 m( u0 o

6 G9 G$ x. x) `' i$ r! Yend
  S% z/ z8 S7 K: ^! e* s' x0 F9 y+ y& d+ j
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6 U  p" ]3 n. k5 v  R

! K! X$ a" b, q. AAllaahu Akbar,
0 q, C: E" Z7 TRizaPN <rizapn@yahoo.com>/ L  y8 ^9 F5 g, ^( E
Jakarta - Indonesia* @" }' I$ m) N7 j; V% c* Q
& w; B) T6 I/ k  Z2 V1 T4 H3 k
[ 本帖最后由 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-6-9 14:42

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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