爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:* x; U% r% {& N3 j

5 H2 r" V5 l+ A7 c简单帮助:
- M* N3 _) u- j! x" h4 }====================
: M* p; o! B5 |9 H3 y*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。9 R$ X' U: }6 J) _: [
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.) |. t7 v, h5 b6 _2 W5 ?# N

. c: a) C6 C% T2 ?9 J  \3 y3 H! l, K: C: ^5 D8 m0 l
搜索空白区:
5 V: g9 o- a! `" |+ E$ B1 z=====================6 g0 M! S- w& }8 Y) s
> sfe 0                        ; 帮助8 C# o" P, C) N9 p& @* O
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)7 [% o% f: B% b1 G
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间. R( w9 T! ]3 h4 q# f( R8 z$ m" }

9 s' I" m/ i' Z6 _% x0 y0 x1 u二进制拷贝:
- U% u3 f, W$ B6 R  v3 G9 ]============
" }: ^! B! L6 y" d( y" K, `: @6 S1 F> sfe b                                      ; 帮助
1 |; u, ]: i/ U0 G7 k> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
8 c, y: U& o* s; \/ m; L* ^> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
5 I. \3 N( X1 D4 D> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
$ U5 d( e) _& h) X9 ?/ H- I> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200, _4 V- u0 a% O( L

5 @5 P! `5 Q+ P/ S8 L5 N/ w, e比较文件:2 C8 `1 d5 Z, G1 e- A' k
==============
" E* ~$ L2 w6 S, x' T4 K> sfe c                                              ; 帮助/ a5 Q" Z, G6 f) z1 x
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin+ O2 c  u& ^0 |6 u8 T( f/ H" n, g5 ?
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )* X: y* V8 d8 L) }% q; A2 t
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes0 y8 D7 M- F8 X! _- f5 j* c# d
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
: d2 b) ]% Z  H7 R% }6 e) i- H5 m> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
4 Z( c3 R/ i' d> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
* P' }, {. r" ^( B4 K> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
& {9 k) e8 j  A- {5 e# P6 [% d7 {5 h: b: w" {* o; [
发现16进制的地方:
1 y# g8 B$ r( o. T====================$ J' l& u8 v* K
> sfe f                                     ; 帮助3 a* k/ k. V+ K% c
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
( s' z# O6 S; A! f. V> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找' `2 J, R2 [/ k" B4 p. P+ B% v
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes# p: S# e3 J! j. W9 h8 t4 ~; m5 G
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
4 `4 _. G& J" u9 N9 \> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
5 J  z& A3 Q! n4 r$ {3 N- a9 c& Z9 F> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
/ ^0 O! Y* h' p, H
2 b' v! s' p  H) J) b$ o0 ]2 u2 ?7 P提取语言数据:5 J- j4 I2 V2 Q$ t- O
======================
& ]" F7 ]. P, n- c- z5 R2 \> sfe l                                          ; 帮助1 J& y) _3 b2 V8 v8 W
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
' ]- \. e7 q- L; i& p> sfe l src.bin 200                          ; 显示 ID 200 的字符串* j* X$ a8 ^; {! {; x
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串2 J( T/ k3 k4 X/ R* J. i0 Q
> sfe l src.bin -1                             ; 提取第二种语言2 Q: m! j9 j; g1 o- G
> sfe l src.bin -all                            ; 提取所有现存语言6 v% K0 j& Z* \" ], ^1 L8 w
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串; e  i# t. T( {# j5 v' x/ y# e, e
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)" |1 M! y3 x8 C3 }9 @& y! _
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
& m* k" c6 c+ ~' w" c$ L, F1 A> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 ; ?  t- ?6 v; D
> sfe l test.lng                   ; 检查test.lng 语言包& o5 W5 o! }$ e- x; i( z0 _
> sfe lc test.lng                   ; 检查和更正test.lng 语言包3 U5 l3 }5 ~% ]* c0 m: F- s
) A( k6 i. {/ ]7 s. e8 Z/ E" V
提取菜单:
7 w4 e! U0 r( s  u& ?2 \  e/ k, @=============
7 A8 ?% e  p% f( J# u, C  f> sfe m             ; 帮助
4 s8 Z, D: Y' U, |* k' g* ]> sfe m src.bin    ; 提取菜单结构和入口, F7 c/ t/ ~5 x/ u/ w7 J& M/ F

9 d0 ~7 Q/ }& W0 C  U+ q- T% |% ~! g+ E& T* M' P/ o  I) }
补丁:% K, ~9 J! G6 |4 |6 X
=========
% B2 H6 a! v& a" Z- q7 W> sfe p                                        ; 帮助  m0 m1 J4 D: q- S
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin; P0 t# a, W9 ~, R
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz$ x6 o) R7 l9 h7 p' v* p  Y$ b5 {
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz $ t4 G$ p1 P' ]7 h  d
( H6 T8 r$ M5 W: c. _/ {8 p

" ^1 Z3 a$ e& q6 [1 a9 S编译:
- J# u1 n% R5 _/ i3 [1 q- G==========: t- C7 j$ q, x1 G; k
> sfe a                                     ; 帮助
! J/ ~* p1 f8 T  D> sfe a src.asm                          ; 编译 src.asm
) v8 T/ Y2 H& v/ g2 C# ~$ Q> sfe a src.asm d                       ; 编译 src.asm, 完整输出  U5 N) q: D9 s' I
> sfe a "mov r12, #1234h"          ; 单句编译
' N3 G* a# R! f4 @> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译- F$ x  L) Z, k4 C; ?
> sfe a src.asm,TST                    ; src.asm编译成补丁格式$ ?5 E, j" Q( f; J
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式5 c: X6 i# H" ?: r0 u
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
8 ^& O7 x" O9 A4 I> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000002 E1 Q; L; F. l6 S7 v$ o3 V8 A
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。: r/ \  q' V: y& C

$ l3 ^$ D! w% G5 t*) See Assembler Part to get more 'assembler' function detail" l$ R  [; ?! S* l, s0 y: X* e1 p
' U. L/ T, @$ V% A

8 x7 x* D% F0 h* F3 v9 B8 j  Q反汇编:+ q6 [6 m( S% [) w. b: f0 ?& O
=============
$ A$ O. D: r! C> sfe d                                       ; 帮助
# @- ]$ s3 S' h. @/ u> sfe d src.bin                             ; 反汇编 src.bin
1 L0 A# M7 U6 Y' F, t> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
) {! B3 u  S2 Q: v! `) ^4 k0 J; K> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节: K5 M0 {1 X, @1 H) y* X! {
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000& X+ ~8 B, N" u% S
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
* M4 y9 |! e+ Y) f. P, y> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
; J. }7 P. Q2 t> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件# P( W* h1 D0 j( K# i3 m1 M0 u
> sfe d image.bmp                  ; 单色图形汇编输出
* m  q6 ~1 e. B# S7 q: O> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
! ~9 z0 j' f( {8 {# u
2 i& D  d5 K* O9 f- `, Y调试:
2 q, _; O# V* y. ]; Q4 S2 a=========
. r/ h1 m$ c, p4 f' M> sfe r                          ; 帮助+ x/ V( ?! u$ e% ?. j9 C4 T
> sfe r src.bin                 ; 运行 src.bin
3 Z( p7 |1 _% W$ J- N# Y> sfe r src.asm                ; 运行 src.asm 汇编文件
1 S, F4 a0 x6 S9 P- Q: Q> sfe r src.asm ,n            ; 同上, 正常输出
9 |7 U) y5 k. u6 `/ ~> sfe r src.bin,200           ; 从 0x200 地址开始运行: G5 B$ A; K+ _+ G" S; k1 x2 {5 l0 ]
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
; c/ q4 ?9 o0 M0 A& G" |> sfe r src.bin b00000      ; 以 B00000 为基址运行0 v8 _/ v7 [  D+ T4 m2 U
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
* y" }( a3 M6 q6 Q. T  s> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行) f4 z* V( f3 P
  R0 x2 l5 c  O: W

- O0 |8 \# m. Z6 b4 K# g交互调试:
$ `2 w3 w* u; E======================& _: C: }3 C6 v  C
> h              ; 帮助
: A% y4 F# r0 @' b: c: F  U> g a00000   ; 到地址 a000003 K0 `1 k. @4 G6 u- L
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)5 s% k" V- x* i# W) E$ Y! r7 G
> d              ; dump 内存 (现在地址)
" }% ?# F$ y0 g> d a00000   ; dump a00000 开始的内存7 P6 c7 \5 e" K7 W
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
6 W) k4 V5 v1 R3 M6 o> d r            ; dump 注册1 m: d' S7 E1 c9 ~
> a              ; 单句汇编
3 o) K6 E( ~+ a0 J( e> a c7d530   ; 单句汇编地址在 c7d530, l7 M0 g6 i: I7 i& ~* ?
> u              ; 显示反汇编
# K3 u5 U, e6 V2 |  }; a. V> u a00020   ; 显示地址 a00020的反汇编
3 Z2 ~1 \2 h$ }% k- B( t> r               ; 在现在的地址上执行一条语句; E8 J7 b8 @  |4 B/ M
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
  T1 _5 }' y3 Y2 {8 P8 J6 F) k- [- W> r 0            ; 运行到返回语句' s5 B8 u/ m2 a' x% J% i
> r -c7d580   ; 运行到地址 c7d580, F6 E( p6 b, Y* B, `
> q              ; 退出" x0 V. b; c0 R( e+ Q) n. z7 Z4 c& \
3 d7 S+ q. d; {* P. l
*) 所有未声明的语句都会改变当前地址。
$ t: Q, \7 ]1 x3 C
* I) o  H/ _' G  u% i, g5 O
1 A3 i( P$ q  V3 r% X特别的助记符:  B- I9 C+ A% l3 P$ X. d
============================
) ^- A" W  C, G$ @/ X*) 所有C166的汇编格式+ J! Q% [. J9 a$ ^) d) p6 `& U0 p
*) 分号用于注释 (在一行的任何地方)
) b% ]  X; `/ O5 ?*) 特别的助记符如下 :
7 w4 Y1 V' p7 y" G# V- b   #include filename    ; 包含文件(各种定义)
& c, V- U1 g% _" b! K8 o* E1 S2 m9 F   #define var value    ; 设置替代变量 var = value+ v+ K9 B0 d( O# ?; y+ S
   var equ value        ; 变量取值 var = value
$ P" K! P7 `' ]* ?/ `. B$ {8 z# f   db 'X',36h               ; 定义 byte(s) 数据区
" c# j, {; L" U; |. q   dw 1234h,0,'AB'      ; 定义 word(s) 数据区% A9 ]" s& q5 Y& b9 C1 V
   org                       ; 设定当前地址: |: V% \. ^  T: ]& o9 Z. S
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
; \* Q, \7 d0 n5 \( v# G   end                       ; 结束记号
/ Z' ^, A' h+ Q1 \/ H# t   ;#name XXX.string    ; 定义补丁名称 (XXX), Q( \: ^$ M) v- J
   '                   ; 注释将一起进入补丁
4 z; d4 [2 @# @: |1 v   ''                   ; 注释将一起进入补丁,加回车) d+ e- h5 Y& z. s
   ';                      ; 以下内容将全部是注释,直到出现 ''  J5 u6 s+ P. x; U! z
   ;'                      ; 注释将一起进入补丁
/ Q/ C2 [  t) {4 X$ R   + - * / %            ; 加, 减, 乘, 除, 求模 操作
1 A9 M0 Q8 p/ O   >> > < <<         ; 右移左移操作
( s+ l/ X/ Y) {% ]3 @% t   & && | || ^ ^^    ; 与, 或, 与非操作$ v) w* C! c' j5 z: ^
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)! @- U+ D+ V8 [: g  O/ T: {; o4 D
   page(value),         
0 }6 t+ Q& z7 w  E( X8 x0 @   pag(value),
* @& u$ g7 l2 P( W5 p   p(value)             ; 页值 (= value / 0x4000)
) Y9 g9 D2 q% x! I- j' a) Z   pof(value),* M+ ?3 I4 S# p
   q(value)             ; 页偏移值 (= value mod 0x4000)
6 X: d+ r$ Z0 `  a5 J) {& l   segment(value),
+ ]& e, L  C- e   seg(value),- ~% E+ M' i3 U* c
   s(value)             ; 段值 (= value div 0xFFFF)
8 ]/ [  {$ n$ R8 y   offset(value),
2 o# N3 Q& ]9 @0 d- R   ofs(value),
& E" {1 ^# d8 C9 m8 ]) M   sof(value),( b1 j4 \: U0 ^- G  Y9 S8 N% K' q
   o(value)             ; 段偏移值 (= value mod 0xFFFF)8 P: y. `2 E7 T6 q) F  N; D
! X$ L; P% _* |6 b# t
*) 例子:3 ?& h5 ^! J: a$ `1 P. n

8 r8 h9 K6 `; _3 H6 d  i;--- Testing ---
( s6 ~& W- a, T/ F% z3 e, ?
+ I: h3 ^* X& m+ hbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址
; {' X8 V) d* y/ e% L2 J9 T8 D4 I' I8 W7 y4 P/ A7 W" k
#ifdef ME459 h* L3 J! A0 V. F
  #include me45.inc
0 g! B* x6 b% A3 q7 O#else8 G* {4 {4 e8 D: g" K1 Q+ B" M
  #include sl45.inc
1 _5 d; e$ j9 l6 |1 O4 Z  e  #define  FreeRAM 37h:3600h& i4 j$ }: p3 }
  #define  memcpy  0c7b384h
6 ~' Z. j- x  ^( g#endif
' |3 p5 W( g/ }: f& ~1 d" e5 ^) N4 J
" V2 v' z4 {' _8 |) C9 {1 a5 `;#name TST. Test Patch            ; 补丁名/ x5 I9 V& t7 T0 Y6 Y( M
4 U4 Q& O; _. m7 b! h) Q
'Firmware : sl45v56
  a$ i: m3 u, J' M3 |: y8 ?) W'Author : rizapn
7 z0 q! X; \- k1 T9 k'Updated : Aug 18, 2004
1 E3 d6 Y+ |) u
* g/ O0 j. i; B1 ^# c: Forg 0c7e000h
' T* q+ m' p0 D: q1 O: w: Q9 K    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移2 Z7 [7 J. F3 ?; V1 v2 }
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值2 ~  J' T* E2 p6 U/ g7 S
    extp  #p(data2), #1             ; 跳到 data2 页8 H. J. u9 ~( {1 A; Q
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
5 e3 `  w  C, G* N* C    callr sub_1                            ; 页内调用
  ^- S/ y5 b8 b% x    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
! Q* [# D) R9 m1 ]( q9 I! \loop_1:
+ o$ e4 m2 Z9 i+ f& d9 b    mov   r2, #1234h
9 y( E& a8 h) P2 \7 Q9 X9 x/ W+ Y    mov   [-r0], r2
2 Q4 P; \3 o" u8 Z' v% q0 A4 M    calls memcpy                    ; 调用段表示的子程序; H2 Q( n  \5 L5 I! k
    add   r0, #2
" T) v3 y% U2 N1 }    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
& ]  y  B: v  }, q$ w8 W    rets
: Q, o  f1 {$ U/ t9 k! [$ b) F" _1 `! N. e$ f
sub_1:, P) r1 h6 W5 L. C' }
    mov   r4, #1234h4 \; c7 P) x, X; S' S' _9 z
    ret2 o( c# h# U6 n2 \# Y7 M
0 U4 f' X6 y2 _( z- R* h" G# a
data2:
+ h% w$ c. m; l% I' u7 d1 R    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
0 e/ A1 j7 |( d/ U2 |! n9 |$ d8 f+ N8 y8 h0 i% b; w$ w8 l6 Z
end
/ h- j4 I2 w$ b  J0 N  L% y& Q1 J0 a) u3 V0 o2 ~& X& X
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
" u- F9 u( y) i* r# G2 J- t2 ^1 S" U$ R) v
Allaahu Akbar,
- s- D* \: z! p' v4 {- A! sRizaPN <rizapn@yahoo.com>
% V7 `7 u* x4 H$ ^5 c# ~) j: Y& Z; gJakarta - Indonesia
9 k! h6 F: F- r
+ |1 J1 s; |" X/ w* ^2 J[ 本帖最后由 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-3 11:23

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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