爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
( X" h& R+ @# |2 u2 v
% d& x  N0 A( J简单帮助:
' ]4 e2 \0 z% x. S; p====================
, T8 E5 A, C# o0 L4 L/ Q*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
% J0 G/ R0 h* u( i, X+ c*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.& d. @. x# t) V
+ M1 V, `. _( n5 u2 d

0 \. o# T) N, L# q& {9 W. s搜索空白区:2 j3 F* [2 m+ K% _2 A0 z
=====================1 c7 n; O3 m, _& @7 V, Y7 K: X0 L
> sfe 0                        ; 帮助  K# `' I; R. ]; }
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)5 [5 _1 n5 ~3 w1 Z; ]. e& L
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间# o. S8 g* i3 {/ {

6 s! T: S! b! i+ h二进制拷贝:
9 T& l7 s! A" K7 d! V============
) K$ q) j. n. J. X4 d> sfe b                                      ; 帮助" @  i0 l+ @' A) |! V
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
+ _* v/ S% f$ |, N3 m4 }* x. t> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
2 W: n$ b+ @4 e# g> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
2 y7 S' c6 k1 @, a8 y> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2002 j. B9 l5 K# i# @. X2 E: m% u' e

8 w! [  e- g. U9 Y比较文件:
0 D' q# h$ F1 \9 N, h# x7 F==============: w# o% x9 p7 L- o0 ^' O
> sfe c                                              ; 帮助
& m$ e* e% d' V2 t% f7 a> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin& k( Q7 U- `( t* b" t
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )7 ?4 g  F3 I  M! }2 u8 M8 f
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
6 z: ~; W; Z# k# V; G> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
, b6 m, Z2 j* ~& h8 f> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A000009 H" [. V$ W8 f6 G
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes6 @( \) Z$ w% v  E# A1 K
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)2 j( E; H4 O, g! i, k0 P) N

1 H9 d$ u, _) D) ?. {发现16进制的地方:- F* ^5 \0 S6 F" J7 _
====================
7 }- j! H. N/ w1 N6 T> sfe f                                     ; 帮助
# Q/ {& |) N( v; D> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
/ e8 Y; R% \3 z  f4 K- J" i> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
6 g" G4 o( i' {" u% H3 s> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
" K; B9 U7 a! u" B4 M. l& L> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找9 h( p( T& }, }& _- E
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小4 w; l7 F3 `/ }# O/ m0 L
> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
' b! w. g2 _# ~( c7 M5 @$ A: {( m' y+ a9 r3 V
提取语言数据:
: F9 {8 Y+ h" n1 v  \1 H======================
, A0 |' N. z0 ~> sfe l                                          ; 帮助( q. M1 j- @; ^4 R1 U8 ~4 U9 D
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
$ ~9 f" q9 ]4 i/ d" `> sfe l src.bin 200                          ; 显示 ID 200 的字符串" o% w2 s+ M+ {1 X; F6 p: _+ Y
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串0 Y2 ]1 W: ]: e2 f& ^
> sfe l src.bin -1                             ; 提取第二种语言% x% T' E  @& u  h
> sfe l src.bin -all                            ; 提取所有现存语言
4 H& H& N0 x/ O4 B7 g9 M6 ^> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
7 Q4 S1 k: x/ T% Y9 J/ J7 Y" |9 c> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)- K9 o, F! s3 S7 b  O: w4 ^) E
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
, E2 S& l! x8 D/ C/ z$ x7 G9 P: S> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 4 t2 c- t6 B3 o, \& X9 s5 w
> sfe l test.lng                   ; 检查test.lng 语言包) g3 L  m  w! p& q! X
> sfe lc test.lng                   ; 检查和更正test.lng 语言包, E- ]" U% J* E7 r

+ n3 p6 G8 C* Z4 F提取菜单:
, F; B/ ?$ U6 N$ D2 r$ w/ R=============
/ C3 D) L1 d6 s> sfe m             ; 帮助
6 L3 v  R6 i( _> sfe m src.bin    ; 提取菜单结构和入口
2 {* p3 u# R0 y) s! x& q
0 M& J& \" n" C, ?  k6 h4 N7 Q
6 d8 \: L$ h) `; ~2 ^) r补丁:
/ u% f( D/ S) x8 K' w1 q' V) c=========2 G, f" G& U, s$ q7 t, O- b
> sfe p                                        ; 帮助* ~0 i9 `& V  f+ V, o: o
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
/ s7 i6 B5 j% Y- w* `5 s5 o> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz' ~. |0 Y1 i% a6 N& i
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz * X1 D. ^+ s$ l( D' B
  P. q& H; t, x/ j* @6 y# q0 Y# A
- J# k5 j4 \, P  H) W8 n; r
编译:
" ?  v8 V" v9 E! b$ g6 i3 t==========: c4 C) M2 }1 R1 y& }* h- y
> sfe a                                     ; 帮助) ], v1 H! }2 m0 k. s1 O# s
> sfe a src.asm                          ; 编译 src.asm1 D% p3 ?6 R& o
> sfe a src.asm d                       ; 编译 src.asm, 完整输出4 p" a. V+ T! _: g0 W) {% K& j
> sfe a "mov r12, #1234h"          ; 单句编译8 m. E% s& \3 Q+ [, W4 x
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译5 q' t$ W: q1 i. Z' f% W0 [, ^  `
> sfe a src.asm,TST                    ; src.asm编译成补丁格式7 A- {3 e2 G' F) g! S' U  O+ n. \
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式4 u6 x* N' Q5 y9 p
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行# s4 q7 ]% d3 ?/ r
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
8 W% _& K' g% M" @5 D0 u2 I% c- E> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
* U& l% r- g7 p6 `, X2 j" J: {% F5 s0 b* }
*) See Assembler Part to get more 'assembler' function detail: Y/ g, D( w( j/ w
0 a' m7 f& G/ J* B; H; ^# X
% b. }  r8 ^; a- X  S- g# b( x# y
反汇编:8 U* c9 |6 E. k* |1 }
=============
' ~) ?' N5 _+ k, ^7 j  ?  m> sfe d                                       ; 帮助* j  Y. L  \5 H
> sfe d src.bin                             ; 反汇编 src.bin
% W, x5 [8 F2 Z& D2 R> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
& b, n6 w8 H, U" R1 t> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
6 J& Y  |* G7 k7 l% K9 I> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000
" Z# H; i1 a& H* P1 {6 m2 D> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止; ?1 w. a5 {% Y6 a1 ~  {
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
0 {# N) o, ^! z9 j1 d> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件4 w8 T; E2 m! S
> sfe d image.bmp                  ; 单色图形汇编输出
! w5 ^- y$ q# s7 I( I> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
/ G: x5 E6 u) f3 }8 j5 \) h, ^* \0 y% {  v$ X- B" H
调试:
% P- G7 ~' p6 G- d- T=========
6 C! V1 ?! j% @. g! r> sfe r                          ; 帮助" L  r6 u! n/ @  b1 X+ z
> sfe r src.bin                 ; 运行 src.bin
; Z3 O7 D2 W, ^" r7 E> sfe r src.asm                ; 运行 src.asm 汇编文件
! Q( i8 J( q% O. M> sfe r src.asm ,n            ; 同上, 正常输出
8 F3 q) Q* a, |0 g0 N0 y# ?& i+ y> sfe r src.bin,200           ; 从 0x200 地址开始运行
% x: c! H7 G3 C7 I- o6 E" c> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
7 S( g2 g: s; A5 H  {> sfe r src.bin b00000      ; 以 B00000 为基址运行7 r0 M5 m, W9 _$ [9 P/ S+ V
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
0 L" K  z# p( L: b3 }> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行1 w8 L  Z6 T- d5 M6 D7 ~

% L, |* M: S1 Y$ U4 W5 [: m7 z8 a9 l+ V+ }) S
交互调试:
. x0 O( J/ S% h8 a======================
8 G% h% x; B, D> h              ; 帮助
. [  _6 I% s" m3 C( t3 w> g a00000   ; 到地址 a00000
& ?" s, A9 i6 F8 _$ h; ?) J* `5 i: \> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)' W  a# _( ^, n
> d              ; dump 内存 (现在地址)
! q1 O1 h$ s/ ~# c, C> d a00000   ; dump a00000 开始的内存* ]  L1 X6 @' t
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
" a0 N4 T4 w( m% @: D> d r            ; dump 注册
4 l9 _& [$ Q1 W$ o> a              ; 单句汇编- ~3 L6 \1 ~' h& N- C6 P" t
> a c7d530   ; 单句汇编地址在 c7d530
+ M& A1 L; d% Q, l0 g' S7 q> u              ; 显示反汇编
9 u  q. M3 N6 I! ]  `> u a00020   ; 显示地址 a00020的反汇编$ b$ \2 Y; Z" L! I( N9 _  ~  R
> r               ; 在现在的地址上执行一条语句* y7 e1 o7 S. \# h7 w' o" s: s  X
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)3 ?5 e5 U% L+ D7 `  h5 I* V! X
> r 0            ; 运行到返回语句; u& A6 x, [) s+ D3 |+ }
> r -c7d580   ; 运行到地址 c7d580
: k: _3 u8 N8 X; `( o7 a9 P> q              ; 退出
; R) ?) Y4 I+ }& d+ I7 l2 @3 A' ]9 t9 A4 Z( r( d0 Q
*) 所有未声明的语句都会改变当前地址。
7 _3 l8 B0 b+ _; Y
: s0 I* ?9 J" Z' G6 l
/ Z# b+ D, x4 r" Z. @/ ~特别的助记符:9 n1 G0 w, j: X1 a8 }* t. F! O
============================  D. M5 A0 C! ]/ q
*) 所有C166的汇编格式
. y) Q8 _7 I8 l( B  F  E*) 分号用于注释 (在一行的任何地方)4 b" @0 b9 @6 [- K: Z7 `$ Y' k
*) 特别的助记符如下 :6 X; s7 Z. G9 m
   #include filename    ; 包含文件(各种定义)# j# m* F! k. S6 z! a
   #define var value    ; 设置替代变量 var = value% n, F3 _7 \7 O- k! |5 ^' q. q# q  J0 |* Q
   var equ value        ; 变量取值 var = value
$ I* L2 S2 I) d6 D6 Y1 {! N# q   db 'X',36h               ; 定义 byte(s) 数据区
: ]2 c5 T$ }' M   dw 1234h,0,'AB'      ; 定义 word(s) 数据区6 y9 m- |0 O5 k; ]
   org                       ; 设定当前地址7 N3 `9 ^8 p6 k6 H4 S
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
* n) a5 p8 ]2 V   end                       ; 结束记号
* u; _. ]( d. _: m2 f: M   ;#name XXX.string    ; 定义补丁名称 (XXX)
( e/ J& i. G8 Z   '                   ; 注释将一起进入补丁% _- U- I# g5 J2 P- `
   ''                   ; 注释将一起进入补丁,加回车
* r& W$ f  |' x& |5 e' ~   ';                      ; 以下内容将全部是注释,直到出现 ''3 E" Q/ x# c- m8 E& j" l5 e2 _+ ^
   ;'                      ; 注释将一起进入补丁
! K: i% @0 M6 Y( J5 G   + - * / %            ; 加, 减, 乘, 除, 求模 操作% S4 c" d, X9 c; @* J$ {8 f
   >> > < <<         ; 右移左移操作4 _# z3 y( o: V
   & && | || ^ ^^    ; 与, 或, 与非操作" o- C0 B7 d6 P4 n. P8 o7 b# W/ a( O
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
2 R2 X; Z- u, F8 l   page(value),         % j( u% G3 m4 U  d5 H+ ]
   pag(value),
& a$ i  X7 R# V8 b3 W) {   p(value)             ; 页值 (= value / 0x4000)+ t6 f. l, J6 l0 S: a8 m
   pof(value),$ ]' }4 ]4 m: [( f
   q(value)             ; 页偏移值 (= value mod 0x4000)
# j( \; b* @7 \/ ?- x: b- z5 d) Y   segment(value),# f) C0 ~; e. \( \3 u& X
   seg(value),
5 H5 a* T7 Q: h6 S   s(value)             ; 段值 (= value div 0xFFFF)+ u2 e( k+ v  z4 W
   offset(value),) y$ i4 C# t% @/ a9 Z
   ofs(value),
' _- s& q4 S' q, U  E   sof(value),
* O& \! H! K/ s1 j   o(value)             ; 段偏移值 (= value mod 0xFFFF)
6 P& S- I  |9 e1 |- A+ e( k& O- k1 E- W4 O' d1 b
*) 例子:
4 S  k5 I2 @+ L0 ~
. }. ?6 c; V" N* D( h' a  p;--- Testing ---; R2 D7 v" P: {/ B7 k9 b
$ L( ]1 c; E1 W2 }. x9 m( B
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址$ P* o+ L# D8 w$ L5 D

3 A% s% V8 j2 k#ifdef ME45
6 a9 A4 Q5 a; O/ m0 Z6 ^  #include me45.inc, e7 Q; j* V9 s" P! m
#else) V3 I& x2 u/ d
  #include sl45.inc
( u& i% ~' u2 _; f" X8 P  #define  FreeRAM 37h:3600h
; I6 \2 ]& T8 ^* e* u3 M  #define  memcpy  0c7b384h
- F6 R% B* v. V8 k/ `#endif
' J& J& P- t; o8 \
: Z6 ?/ X2 Q/ N;#name TST. Test Patch            ; 补丁名4 o0 n6 h) Q3 P3 X0 e

! n. U8 J9 b& M'Firmware : sl45v56
8 N' L3 N( C4 y' d: M'Author : rizapn% b3 A8 j' w# n3 w
'Updated : Aug 18, 2004% X7 J! ^1 O1 ?- N' r' s  C
  O3 `3 w; o! Z/ o" v- }- ?# }
org 0c7e000h% a# B! b# ^6 ?" z% g3 d
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移1 N9 K' _9 g, u3 Q1 @; k
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值5 l, _4 ?0 E: J5 q1 A
    extp  #p(data2), #1             ; 跳到 data2 页2 @, C+ i& T7 R5 N' H. S/ K7 c: c% |6 V
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)7 @4 D+ _% x0 {. A
    callr sub_1                            ; 页内调用
( ^% j; k1 V) C: c+ t5 S    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'& w2 X$ k4 I) O. \; J% `- S6 k
loop_1:; g0 p2 \8 ?: s' @( L  q% O
    mov   r2, #1234h3 |5 {7 L6 O6 n3 n- s
    mov   [-r0], r2
! z3 M& N8 b% P* L& G    calls memcpy                    ; 调用段表示的子程序8 Q' `) A* W# n. ?( D% ^
    add   r0, #2
/ ^7 E! q/ n' N    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处' H4 M$ j. `! T2 c) \& G  q% _* o
    rets
' u% }; P/ I7 I! x
3 o! g9 T. l. T& v/ L. ~2 hsub_1:# E9 f$ @  R+ V6 ~, u9 R/ p5 X
    mov   r4, #1234h, T+ J; P- J, I% P+ `
    ret* M2 M# G  }7 B" g

! Y# x8 }  r% s( vdata2:
3 k3 M; O9 J2 w1 X1 A& ^. R9 X  ^5 O; I! N    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区3 V$ X% B! P8 |/ a+ N7 m2 N
3 b; E+ {- W) J7 u
end
2 |) B& o) J0 S$ v& J5 F3 b+ Y
: _) i0 Z4 ^3 ^  G/ ~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6 p  [/ I* N9 b

8 h1 C7 d$ a  y) Z3 M" A) LAllaahu Akbar,
  H+ V& w$ O2 h; \# P  TRizaPN <rizapn@yahoo.com>
9 _' Y. v- l- BJakarta - Indonesia" v& L( [% h7 J; c0 m
. A3 G  h5 @0 _( h+ X
[ 本帖最后由 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-9-18 21:08

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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