爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:$ E+ s0 `8 ?/ ^$ D
0 |( c2 Y- I9 ]) X% a% T
简单帮助:+ `6 D, l" H+ g
====================  a' F$ W+ H& y# a$ C
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
, K* t* G$ c8 v2 f1 _2 ]* g6 t5 c*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.8 h$ b7 B8 n4 v, D2 O# k1 t

; m" [8 ~- O: X6 }* A( K& B. b8 T  r% o2 I
搜索空白区:
* q0 Q2 M* a! V1 n! h0 I. ~. G=====================
- N* }) t. b& _% f) V> sfe 0                        ; 帮助* K# K0 O7 u1 Q& a$ C) o  f
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
) e/ N2 ]! U. c> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
6 k2 o) F9 Z9 k# W4 Z) W
" e; t3 e! I; {" r, X' v; k) M" \二进制拷贝:
6 G+ s2 h- z6 r- X============* i  m, q" c0 m* x- v' S
> sfe b                                      ; 帮助3 M$ W3 R/ b" B9 @: z2 F
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin2 W' u! V: @+ t) T5 ?
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
8 l  S/ |$ k. Q: s> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
% J1 f6 z8 c. y> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200" L& F: `. r( ?7 G' \

) o% _4 Y* b5 C+ R: p* @比较文件:
) j/ @- q* t/ g2 @! R; z==============
$ w* `0 U$ U% {# O> sfe c                                              ; 帮助/ z! u) j7 R) Z0 [/ i
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin6 z6 M0 n. q* R) x! [7 |
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
0 d4 D- s* e* n1 T; A> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes% k& \1 d6 @* y% v5 R5 ~7 ?
> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
  {8 @+ d8 R, [3 L" C. v: [4 C> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000; ~6 j' M/ K" v! p# ]
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes" Q- v& _8 u) U! A
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
9 |9 q% W" E" K6 V3 R% s! n
; n* d3 A  U) o0 P6 \发现16进制的地方:; B: ~- T) r: L. J, V7 ?
====================
0 F. I2 _) J4 k5 \$ g> sfe f                                     ; 帮助
, @( q0 O6 W* U: d5 h> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
! `$ ~+ R. y$ q! q+ b2 }+ O> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
) w3 K9 g+ S' C3 j3 M> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes9 a. @+ [8 |0 t/ V$ P+ p% B" L
> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
. Q" e' i) v* f3 p" x6 V: ^> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
5 k" W3 t! ^, w1 v  S) q9 L> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.9 e( m+ ]% f4 o& I* ~( e
, F- V: u, c& H1 g
提取语言数据:
; A+ E3 y8 @' k, E======================
' Z& q+ N" \7 P1 s> sfe l                                          ; 帮助2 z% l# I, q+ r# y
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据. Z" k$ y5 j0 `% O  s
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
& N/ z% S/ K9 y9 q- D8 A4 P/ L> sfe l src.bin 200 2                       ; 用第三种语言显示字符串) n, O  @0 `. V+ L+ B3 }
> sfe l src.bin -1                             ; 提取第二种语言2 q' f: J. S7 s2 n( y
> sfe l src.bin -all                            ; 提取所有现存语言: O; o- R1 b8 z2 {( V+ D
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
' h  b5 X5 [. `7 S% F> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)& f3 V: ^9 A% j$ p( [
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
% K7 c) e5 {+ ?, w/ e9 L' \> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 / \. r4 D; ]4 f; E7 t' d) [
> sfe l test.lng                   ; 检查test.lng 语言包& A) P" b6 C& A
> sfe lc test.lng                   ; 检查和更正test.lng 语言包
( _8 F4 i7 L( K; W* [5 [: y$ p+ ]0 q. i6 b6 W( [
提取菜单:
( L, J; C2 R$ G, v/ @& x=============
* k6 H3 o( ]: D% y! m. \> sfe m             ; 帮助& a( `6 E: s  r- n- a- A' d
> sfe m src.bin    ; 提取菜单结构和入口
' ^" a$ Z& B# X8 X  B5 ~" Y
. e$ d* M3 [! B5 M5 ]* ]& Z% Z3 ^' x! Y& o& \" _2 _
补丁:" t8 j" _: S8 n$ m0 H
=========
% U! n2 \0 Y* F> sfe p                                        ; 帮助# c9 r' s5 Q- w
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
6 P, x, S5 d9 G0 T) h- l> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz: g% t& q0 b1 N5 u; ^" d( z, \
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 2 C" P+ R6 o! z6 T' D. v
& ~7 f1 H% t4 m: X+ C- z8 B. V( D
$ d9 j8 i6 u' r/ m% D1 d2 a1 Z: k
编译:/ v9 j0 O/ A1 z$ S
==========
0 ]5 G8 }' s: b5 N> sfe a                                     ; 帮助* R* v' W7 n: V* D! d
> sfe a src.asm                          ; 编译 src.asm5 d8 Z8 H' V% G5 p0 T
> sfe a src.asm d                       ; 编译 src.asm, 完整输出/ i, v0 ]( [0 d7 {" Z9 g7 f  }
> sfe a "mov r12, #1234h"          ; 单句编译
, Y, v/ e- T  }7 ]) u/ Z* g7 r5 E> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译) a4 d2 C/ j- t# G+ Q
> sfe a src.asm,TST                    ; src.asm编译成补丁格式* U3 T& M- F- W2 V7 g: u) W
> sfe a src.asm,TST p                 ; src.asm编译成补丁格式/ F- d* M6 _- z/ L& z* _& ^
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行7 A, S1 Z  W* E( i" z2 p
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
3 O; d+ K6 E& U1 B# a- A> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
6 ^- l2 K6 O/ V. T2 z! w
% X' `2 S( W9 L" ]+ V. D*) See Assembler Part to get more 'assembler' function detail
# |" K8 Z$ _$ [( @6 f" g9 k5 a, p. n: j, Y/ R
: Q$ w* y: ]5 z
反汇编:& [! a6 w/ N) Q0 R+ D
=============
& C# \0 g- J3 S3 d1 G. M9 A> sfe d                                       ; 帮助2 p- G/ v; S7 c
> sfe d src.bin                             ; 反汇编 src.bin% n/ D" i: W+ R0 a% Z( L3 Y% P0 g
> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
4 _3 J$ p2 K- S7 _6 c( d( O* w> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
  N4 X: [1 h, O2 o/ ?> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000002 [9 N  ]8 ]5 p" T/ O
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
; l& G$ k9 O: `> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
* s5 U9 g6 f. q# p4 y  J> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
# a7 r+ `! m' Q7 Q> sfe d image.bmp                  ; 单色图形汇编输出
- s! n; a" \) u; G4 G  {; q0 S4 A> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。' A& Q" q* p8 R' C( a; o
% W4 \$ k4 d; F! C* H- V- z$ l- L+ M
调试:7 D/ C% O; k  r# {1 L3 {
=========
8 |* E+ f( [& q1 Y> sfe r                          ; 帮助
8 u9 V- _/ d+ L; J1 u' \7 e> sfe r src.bin                 ; 运行 src.bin
" z( X: ]9 n- q! Y& T( F> sfe r src.asm                ; 运行 src.asm 汇编文件
6 m! @1 ^- A' c3 i> sfe r src.asm ,n            ; 同上, 正常输出3 n$ o5 B/ y; m0 d& d; }  V1 N
> sfe r src.bin,200           ; 从 0x200 地址开始运行
" C  m- t' T, \6 g> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
4 k1 b8 d' H  p) ^- s> sfe r src.bin b00000      ; 以 B00000 为基址运行
1 r3 i& M7 N- {/ j+ F> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行. C' @; g+ x& S7 `7 w8 c
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行9 k' k  H' }* M4 D# J& c0 f6 N5 w

) U) L; g& D+ j; ]1 E; ^3 @0 z1 V) A% Y4 W  T
交互调试:
( S6 {8 [1 \7 d3 w' e/ D======================( e9 c& O( q" s" n% X6 X
> h              ; 帮助
) D$ p; d. z7 u# H8 U> g a00000   ; 到地址 a00000; K& G) b8 e4 j% a
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)6 `) _2 Q  A0 M' b) Z, D7 i
> d              ; dump 内存 (现在地址)
+ n8 y9 y3 {* f/ l& w* l> d a00000   ; dump a00000 开始的内存
* \& j! Z) U7 @# A> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
  [  L8 w) I4 h> d r            ; dump 注册7 e. J, v1 \; p. j0 J+ M6 [( y# p/ b
> a              ; 单句汇编1 {; h+ i: Z3 e& t* f
> a c7d530   ; 单句汇编地址在 c7d530/ V3 ]0 \, ~' f; D  a$ W1 @) \- J" u
> u              ; 显示反汇编) V8 d6 I; f* j
> u a00020   ; 显示地址 a00020的反汇编5 W% ^: q0 W3 e$ f
> r               ; 在现在的地址上执行一条语句
0 q$ ]; h% f2 e( ?( H! y( k5 C> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
* P( j! f4 g) A$ r* {5 t- J% S> r 0            ; 运行到返回语句  l+ @; M- w# V$ c5 v5 P) [
> r -c7d580   ; 运行到地址 c7d580& z0 A4 ]8 ]# w  Z1 l" h( a7 H
> q              ; 退出
7 H$ ^" d$ h9 m" ^5 l3 \) g' P# ^* E
*) 所有未声明的语句都会改变当前地址。
& o" m. _3 J7 B
2 t, r: p. v+ \' C
' }, ^8 G! q3 q" W, J  U# d特别的助记符:
+ ]# H$ {& n+ m5 N2 z============================
* Y, s7 R) w+ {*) 所有C166的汇编格式8 r% m& j' M6 Z5 d% r" e
*) 分号用于注释 (在一行的任何地方)) C0 H7 g+ f. l5 L8 a) G
*) 特别的助记符如下 :/ U  k, Z, s1 c* x+ R
   #include filename    ; 包含文件(各种定义)7 r  ?  G9 @* U  b  Z4 z& N7 i
   #define var value    ; 设置替代变量 var = value
' C* ]' h/ g" r- q2 B   var equ value        ; 变量取值 var = value
$ E, L0 o; T5 p8 [6 K" c7 c1 b# L   db 'X',36h               ; 定义 byte(s) 数据区( L  W0 C2 l$ d0 X6 n) s
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区7 f/ z$ U: e1 O% i
   org                       ; 设定当前地址  o" \! R, ]% h* \; W8 B
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
! C9 B" `! r: T' H8 X6 u   end                       ; 结束记号0 i7 |1 X7 P2 ?$ \0 p/ {
   ;#name XXX.string    ; 定义补丁名称 (XXX)$ u* O7 Y* H$ C5 b
   '                   ; 注释将一起进入补丁( V  R( z# E- q4 \+ k1 t* @
   ''                   ; 注释将一起进入补丁,加回车) v, j. {& v- n% u: U
   ';                      ; 以下内容将全部是注释,直到出现 ''  z  b. G; k7 R1 U7 S6 J, S
   ;'                      ; 注释将一起进入补丁
3 [. ?& C, s" h" I4 P   + - * / %            ; 加, 减, 乘, 除, 求模 操作& j! }3 A. [$ w+ _0 y7 K
   >> > < <<         ; 右移左移操作9 V6 m/ _0 b) K5 u4 N* ^
   & && | || ^ ^^    ; 与, 或, 与非操作# w, P* D; H+ d: j; d
   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
' J/ |4 u9 u! A& z; C3 \- B3 q   page(value),         
8 E) h" j5 b! f% g' n   pag(value),
4 o; N" B: {' N9 R( Y% R   p(value)             ; 页值 (= value / 0x4000)
; v3 t0 P! Z1 N1 w" J, [" S  X   pof(value),
6 l  U6 ~! H( |' s   q(value)             ; 页偏移值 (= value mod 0x4000)
; y" m% i2 H6 a3 m   segment(value),2 _+ N! a7 t4 ?* b8 c
   seg(value),
& i" g2 e4 b8 P7 O5 D   s(value)             ; 段值 (= value div 0xFFFF)
- }) s! v) x2 B   offset(value),5 w# r: ^$ Y/ p$ s2 m: P
   ofs(value),( B' j4 r/ T% J% ?8 u9 v
   sof(value),5 y* r0 v# k( O1 Z7 x6 X, P
   o(value)             ; 段偏移值 (= value mod 0xFFFF)
0 Q5 l( o6 j0 _. ^% C$ [3 j5 q
7 E, }4 ^, B/ e7 o# a*) 例子:
- D4 ^0 ^, I( n$ F4 F
' W1 i4 I' L+ ^$ e6 W; P) k: g) ];--- Testing ---0 _) {7 d; T+ ?# X  E$ k' I# l
& ~) p0 E, _9 @) I# v, D
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址# {; j5 B/ i3 Q, v* D  u
) a3 ]* i( z! c$ m5 G
#ifdef ME459 s' B3 ?- y) a- s6 N0 \$ S
  #include me45.inc
2 ~% n8 O; p$ _#else
0 C5 S; M& L& b6 \0 `* {7 E  #include sl45.inc
7 Y' p4 g% c2 K" V% U! R# z( W  #define  FreeRAM 37h:3600h
7 b" B5 z9 m" L! h& e  #define  memcpy  0c7b384h
5 x" K# R# E1 g6 ^$ m# P, ]; r( H#endif
; K: O* D% r5 F' [( ?! D
) r( y$ `( X% O" K4 W3 Q, u0 P( |2 b;#name TST. Test Patch            ; 补丁名
5 C- q* {& I1 a4 b* Y( [
8 a! ]' V1 d3 L1 \+ t5 z, d0 _' s'Firmware : sl45v56; F0 g3 G* Q8 d  @' p9 L% |. f+ I
'Author : rizapn
/ `5 Z( J. E5 p'Updated : Aug 18, 2004
5 E, G2 ~& `! F; k: d% I- F
8 k6 _2 {0 K" \. {( horg 0c7e000h
9 x# b( A% v; f2 {! U    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移" R, Y8 e% F3 U# S4 C6 z! s
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
9 ~2 u  m1 H% d' _" R    extp  #p(data2), #1             ; 跳到 data2 页
$ V5 x( L/ m/ s8 M. b. l    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)1 f9 ?3 Q( N! L' W# e0 D7 Y
    callr sub_1                            ; 页内调用
7 c6 l6 O/ Y5 O& n9 P0 h    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
! t2 I1 b* T9 w# h4 v- w+ i: Aloop_1:
0 V* a& [; ~, N( [( U    mov   r2, #1234h  `5 d8 Y# }3 N, ]) F
    mov   [-r0], r2
5 n; d% U, |: d1 L. w    calls memcpy                    ; 调用段表示的子程序2 a+ G5 [+ M4 t6 `! t9 q$ C, }
    add   r0, #2
+ N% ~" p; v% v5 @% |0 y* |+ K    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处+ Y( ~' D9 f3 u; P" T. [
    rets: k9 }! n) P  U, \
1 F/ T' C! d0 U! T+ z
sub_1:
2 h) Q. m8 b% K" H# r' p, J    mov   r4, #1234h$ L1 q$ C* `8 U) b) H" ]
    ret
$ W+ W+ C! V" x1 c3 c9 C) m
- M, I7 s6 [8 n$ U6 odata2:" Q# M- `9 ?- s( y3 |$ H
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
- j" s# ~  y2 @! [3 p# k# ^# @- {8 e0 }
end
, j+ h. ^: Z0 q4 x0 Q) `: v9 H
7 y, |8 c  v3 y& I;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Q1 B, o3 p. L2 b- e) T  n% l) r9 J5 t& u9 W
Allaahu Akbar,2 u9 }, ^; Z) }$ }+ Z
RizaPN <rizapn@yahoo.com>
# @3 G/ w! C  }9 R/ CJakarta - Indonesia
! J5 a$ I* E3 ~+ p  L& |/ X! a. `; f$ y! E
[ 本帖最后由 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-23 04:51

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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