爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
: T5 p4 }, \( H# d3 D7 A( m* F) m  v; K/ w) x& r
简单帮助:
8 W; d: Y; D. \9 P( \0 e( f# `+ l  U====================, S) i! o" g" z; {1 \& i4 z9 z9 F3 b$ U
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。: n2 D6 H# P( N0 Z$ r+ q
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
3 C. ?2 K0 [7 @6 ?# v. l5 ~$ H) F: ^7 N5 F8 ^; k' Q; e

  E& ^8 f2 v, U搜索空白区:! l" w* u: e  Z2 E, O
=====================5 d' C* L  n+ b0 R: w2 B8 S
> sfe 0                        ; 帮助
$ i# i* e2 K+ z* e% V# H> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
# ]8 N) c5 D% u* p> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
( z; x# |: V, Y2 Y+ }' Z3 @+ C) G! v0 g" B: M! J0 b4 s! @
二进制拷贝:
( W( W- r1 `. ?# v# m- \+ F============$ ]. K$ \; e& k
> sfe b                                      ; 帮助
4 a* v" X4 U* j. a+ s+ R$ Y> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
3 Z' Z3 G1 L8 y( r3 n! S+ h> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin6 _  d. _8 P8 y
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin" u5 G. _& y* d
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2004 q+ n, S, r# f. u0 o
5 I4 c( p4 V- u2 M$ y3 G
比较文件:
: U6 S4 i9 t8 |2 U( j( K5 E==============+ z# |: o8 K6 q
> sfe c                                              ; 帮助
  b! b" ?+ Q' [5 `& ~> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin* `% ]4 T* o2 ?( V& i
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )+ ]" S( w$ I$ ^, \7 R) A
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
  e4 B) ^, j8 J6 W  M! q) D> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )* r4 s3 m$ a1 T/ r9 P  B$ K& i
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A000003 Y( o9 U0 h) n$ o) t; I0 Z" O
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes% A! c) f7 _- m. g' Z( P
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
6 S+ E% b+ C- \0 u+ w" y. _/ t6 W* u( }/ ]2 [5 Y
发现16进制的地方:6 @3 V9 [# _0 P* V" T# O+ p
====================
9 d* r8 v# I6 {3 p: @1 R> sfe f                                     ; 帮助- r: c. M3 u2 F8 R$ _8 K- K' F" r
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
$ [) p5 x' D# ?1 k> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找& ?% ~8 D2 T9 I
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes' K  D. r% Z# I+ t+ l' `
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找' X9 K  A/ Y4 ]
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
' R; V% ]$ ~( g8 r! E> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.8 R& U. q2 P" P# j& q) I  c
: _5 L* h# W9 K: N& J
提取语言数据:4 T& y( C# ]( j
======================6 b- f. H* \! N, D9 `, [3 J# [
> sfe l                                          ; 帮助+ P* l5 F, m. W# h
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
$ Q3 g' v/ d  ?0 h* |> sfe l src.bin 200                          ; 显示 ID 200 的字符串9 L5 l. I/ U  T: j! X7 N
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串- \# Y1 d2 `, @+ p8 I( b- m% `
> sfe l src.bin -1                             ; 提取第二种语言$ f' u- c! t+ ~8 V  W' B: }
> sfe l src.bin -all                            ; 提取所有现存语言
, H" z1 ~1 v! a( }> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串* E9 b) W3 s6 }7 n8 u# w6 `
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)/ |  L4 o" _: W2 I
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
. N' |2 \8 n5 `' Y> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 * [6 m$ D% t1 s6 P  r8 `7 }% M2 a
> sfe l test.lng                   ; 检查test.lng 语言包
9 s  f8 n$ W3 z6 \$ J5 b1 F3 h> sfe lc test.lng                   ; 检查和更正test.lng 语言包# @; h4 T! d1 Y& J8 y& \, O1 k
: @2 x: `+ z$ Q  h' _/ d
提取菜单:& R% q3 w% U( m" ~
=============8 j- b9 x, Y$ p% h% [" b9 d
> sfe m             ; 帮助: H; F' F6 c/ }
> sfe m src.bin    ; 提取菜单结构和入口2 Y, p0 L- j- V! O: U
% ?7 i! b$ ~4 P1 S7 X. m% C

+ {$ l4 d4 {2 }8 o1 W1 `补丁:* `2 _& B/ j1 [+ u8 T
=========# t  N+ i2 |' D; Z
> sfe p                                        ; 帮助
6 t) h( U3 N( e$ N! g0 b7 L> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin: a4 Q  v8 [5 E8 c
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
' l" _5 \6 H, n# Q( U9 ]$ U9 ?( Q> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
: x! U0 ~* o4 R2 ?/ i4 B: L8 f8 t

# e( m* f/ j% X编译:
2 c0 p+ q3 D& ]==========9 n! e3 A! i% f3 L
> sfe a                                     ; 帮助
& D% r8 S: g6 h; A$ A6 ?- }> sfe a src.asm                          ; 编译 src.asm9 i4 q& i. G" r. _
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
/ M/ s5 `0 O/ j> sfe a "mov r12, #1234h"          ; 单句编译
! N; g' {: B  V" }$ R* w> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译0 o+ j( H  J  W0 U8 Y) r8 s
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
! p/ R& ~, D; h7 o, u7 T> sfe a src.asm,TST p                 ; src.asm编译成补丁格式6 J, r5 W# s. o% ^3 [3 p; M
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
9 K7 p- H4 ~/ |9 m9 F9 b* O> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000; J: m+ p/ ?- Z0 L: ]. Z& A8 v
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。" J0 W( k! g/ \, ^. ?
! L5 U. g. y$ E
*) See Assembler Part to get more 'assembler' function detail& x1 ~& h1 D& R/ d( }, J: C3 I+ y
( U0 ?& ?- j$ P4 p* M& a$ p

. l7 B, ]$ L% n# {" j7 j" |反汇编:
; u7 ^8 E& l; @% U* x=============9 G: H. M) ?. X- x1 v0 d% W
> sfe d                                       ; 帮助- h6 ]% T- L1 k( k2 O8 O9 r
> sfe d src.bin                             ; 反汇编 src.bin
. W) s  K* U! f+ u' C9 a: h; \0 C> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin! s. G, U5 q- h( K( H& \  e+ ~
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
+ j/ U8 |+ ?. ~' p. ^. M> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000003 c/ P8 B* c( w
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
5 q( P  q+ }( A9 t> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址- e% D+ S' I, d. r! H
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件6 I3 U5 S+ x! @
> sfe d image.bmp                  ; 单色图形汇编输出
' a$ F6 I( Z5 j. g( S7 t> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
  b% k2 f' W% y1 p) |" H+ t6 M: i7 W
9 S* ^$ x, I4 p  [1 X$ Y# `2 O调试:
% _% o* t$ S- K0 R4 S. Z=========
" [" p- W! L  p' W9 K. U7 R5 k  I! J> sfe r                          ; 帮助% K, [7 {: x# i: h+ \9 K
> sfe r src.bin                 ; 运行 src.bin
4 V" q: L: W1 ^! ?6 P> sfe r src.asm                ; 运行 src.asm 汇编文件& m7 |5 Z, j" _% r7 c
> sfe r src.asm ,n            ; 同上, 正常输出. g0 g6 r6 E9 b" ?- o3 f+ M  w
> sfe r src.bin,200           ; 从 0x200 地址开始运行
' A- U/ g  ?) g4 o; {: I- I+ `> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200, j( v  Q  [( c( k4 D
> sfe r src.bin b00000      ; 以 B00000 为基址运行
7 J3 L- Z4 `, {> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
. e2 ?+ a$ `* z6 b2 l> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
/ F0 d( z$ J% k! F" q5 I. c; j# r: T2 X9 Z$ T
7 S7 K& P. L4 _& S3 B- q1 n
交互调试:
9 Z9 Y" p$ V9 z  q& c======================
' u/ {9 o8 F/ y> h              ; 帮助9 H5 V. i/ z* L$ s
> g a00000   ; 到地址 a00000, l$ r3 h6 {  ]5 @, M$ o/ P4 m+ n
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)7 s" _/ V- ^. w' ~
> d              ; dump 内存 (现在地址)
1 \+ i& i7 \7 O> d a00000   ; dump a00000 开始的内存
2 V: T( G) p: a' t9 X1 E> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
, x6 y4 T4 ?8 W> d r            ; dump 注册
6 A& M. B# w6 @; S; O4 d> a              ; 单句汇编; c3 L, ~/ M( Y2 F, [4 H& ~
> a c7d530   ; 单句汇编地址在 c7d5301 V; q2 M9 D/ ~' [3 M, M! A
> u              ; 显示反汇编
0 s9 N" l+ m+ H9 M% c> u a00020   ; 显示地址 a00020的反汇编6 F" w2 d" `; p8 Y: ]% X% X2 ^
> r               ; 在现在的地址上执行一条语句' l1 h1 w( ?) [) ]3 H( c
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)3 ^7 ^; f& Z9 b
> r 0            ; 运行到返回语句
: P. [+ d$ ~" ^" X  i! r> r -c7d580   ; 运行到地址 c7d580
, A9 q- O  S  U$ Q( R7 V; T0 F, Z> q              ; 退出
" r2 Q* Q6 M) T5 k; T
1 i4 [0 Q( d: ]*) 所有未声明的语句都会改变当前地址。1 T( j6 @4 E8 b4 U4 r; B0 J

7 S, S# t1 H' r* O* r
; h, n1 A8 F& n! e特别的助记符:
( f- j1 C7 z5 m9 E1 G============================+ ~# w: H6 D3 w, Z5 R; L8 j& l
*) 所有C166的汇编格式- D" O7 ?/ r! e3 I
*) 分号用于注释 (在一行的任何地方)
; ?8 I% v1 x- F$ i1 J! T*) 特别的助记符如下 :7 b* ?0 u8 u" b
   #include filename    ; 包含文件(各种定义)
5 b, U3 _" _9 y4 U3 V/ T# s4 F2 {   #define var value    ; 设置替代变量 var = value" B# ~8 F: t& S1 I
   var equ value        ; 变量取值 var = value
7 P- X. S1 P8 C% @, E3 ]5 P   db 'X',36h               ; 定义 byte(s) 数据区
" u; b; q% E; u, P) o% G6 |- R$ S   dw 1234h,0,'AB'      ; 定义 word(s) 数据区# H" Z9 V/ I! a  y+ H
   org                       ; 设定当前地址
) B) M( d% z; s+ _' B/ ]" v& v   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)/ R! ~& O9 o0 `+ A
   end                       ; 结束记号! }( }' l8 v0 {# }
   ;#name XXX.string    ; 定义补丁名称 (XXX)) G6 Z5 Q, J; x1 O/ D/ N4 ^
   '                   ; 注释将一起进入补丁0 ^  U0 [0 n$ P, @+ A- l+ i
   ''                   ; 注释将一起进入补丁,加回车5 f# u4 \2 s) d, _6 n  _7 Z+ |
   ';                      ; 以下内容将全部是注释,直到出现 ''8 Y  c' G* C7 M: |* o+ ]
   ;'                      ; 注释将一起进入补丁. A; ^2 N' B( y9 Q
   + - * / %            ; 加, 减, 乘, 除, 求模 操作' K/ _" s3 ]9 T' l, U5 h
   >> > < <<         ; 右移左移操作
" o8 Y& }% w' h' m, B0 ]0 B2 k, ]   & && | || ^ ^^    ; 与, 或, 与非操作
, a/ |" F3 |  E   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)! v/ M* D; G) w  ]
   page(value),         
. n- o) |% Q! }) [   pag(value),, j9 A2 l4 R* G- u
   p(value)             ; 页值 (= value / 0x4000)
1 {( m  f: j3 f' ?9 q# l   pof(value),) N$ [" N( e2 o, @3 g9 v& J  X
   q(value)             ; 页偏移值 (= value mod 0x4000)5 ?) `; f: C$ Z5 v% M/ q# y3 K
   segment(value),
, t) V# M/ n+ t- V   seg(value),
; {+ w- N7 E& E   s(value)             ; 段值 (= value div 0xFFFF)
# ]% P6 p# r% ]8 F   offset(value),/ J& U( \5 T9 e6 y& E
   ofs(value),
& F! p$ O' C* c6 ]4 c& C   sof(value),
* Q3 o/ u! K# u   o(value)             ; 段偏移值 (= value mod 0xFFFF)
, [5 J& X$ k' J& r) f1 F
/ u* I2 \/ P" u8 @% L7 b, n*) 例子:
4 o) J# V: C- Q- A4 p& g' q+ _% S% O
;--- Testing ---" f) D8 @5 _# z6 ~
: C$ g( n; E# F0 Z
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址6 {) r" X) M. W

( T$ e) Q/ S9 ^$ }5 N& G#ifdef ME457 O% \3 F1 O+ `* i# A8 w
  #include me45.inc
! t& {$ ~* ^# C' a2 O8 ~6 T5 D#else
' ~0 v* L) L9 B* g8 V5 Q% y  #include sl45.inc% @; `+ V; j+ r7 q6 {
  #define  FreeRAM 37h:3600h
( f4 S' Z# a* y, {+ a6 G  #define  memcpy  0c7b384h
( V3 ~' B+ h. ?, v; ~3 ?#endif
/ m  o7 g5 V# p8 {7 u/ @! Z
8 `+ F% y1 T$ `  d; g! C6 K, u;#name TST. Test Patch            ; 补丁名  O& c2 O/ |( b& n

8 k' ~( u* k8 k& }( _6 |/ }' V% J'Firmware : sl45v56
3 R8 H6 A! l) A8 D7 ^: U$ {'Author : rizapn% a. y5 m# D( m0 J
'Updated : Aug 18, 20040 v% U5 |3 Z' Z6 a* g

) C: D+ W% `( C6 V9 Dorg 0c7e000h3 a" Z& i5 h& x/ ~
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移9 X2 ~& _8 ]; k  J  E% U% |
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值' s* K2 B. X7 s9 w2 P3 |+ I2 k1 Q
    extp  #p(data2), #1             ; 跳到 data2 页3 o/ C( a$ f7 }9 D4 B. D
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
! V" z" i# X8 ?/ E; M* O: x    callr sub_1                            ; 页内调用
5 n" t. |& m/ w% w8 b/ ]    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'- U: y! n- ^. b% ~, ?* T
loop_1:6 W/ ]4 ~/ }% z% q
    mov   r2, #1234h* o+ N: l4 y3 {; J+ b
    mov   [-r0], r2
" L; Q6 n/ ^( ]8 q    calls memcpy                    ; 调用段表示的子程序
$ ]/ ?  ^5 q3 n* V5 g! a* U0 m3 c    add   r0, #2- ?# S; U; ^, R: Y: w8 V2 M$ y
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处5 R2 e8 l& C0 h" S- f0 U6 |6 p
    rets* m" ~! ~* y; }- Z

8 Q8 w# H8 s7 Z- ^2 Asub_1:
, O: ~5 d0 e" B+ f3 R    mov   r4, #1234h9 e8 t& D5 }. h) U
    ret
0 |/ b+ \, v7 @2 [! R) k3 C1 w% u5 }) \! ~7 g3 t
data2:$ s9 X) ]3 G# X
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
. o4 U" O& B0 ]: k! u. u
/ P7 ^5 I  }$ T, Wend. E6 Y6 [# E9 _' ^1 x; w( \

. B  Z5 ^+ L( K. s! o5 a7 A* f;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# u+ U# U- h3 x2 }
2 K9 A& v' y8 ]: {- t# h
Allaahu Akbar,' b1 k" {" W( k' W
RizaPN <rizapn@yahoo.com>, Y# [3 K9 J1 g+ Q. `1 d, H; V, m: ^
Jakarta - Indonesia' c( Q7 V3 J3 `. H5 c; ?7 x
/ a7 \. K* v, l1 X4 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-9-18 17:46

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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