爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:' ?  M! ?( B' W5 x
. P* a7 M) B" Q, u6 Z( Z
简单帮助:- y1 \1 U) Q) S6 _9 Y
====================5 L8 R& S( M/ \3 f0 m/ I
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
. O+ R* {& T9 P* ~3 T6 M*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.6 p7 a! q/ [2 `/ k

( L( y$ Q) c# w' g8 O& g0 b9 ^  s% S
搜索空白区:; G  N, ~% {9 T% _( Y
=====================
  S5 U% H( o7 m4 K7 o  Q> sfe 0                        ; 帮助9 T8 f( {! ~& q. Z  [1 k* I
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
3 t! q  n/ T+ w! h, U' X> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间# N2 T3 v, O8 v, B" O

; G" }$ {& [' ]1 m0 ?$ x二进制拷贝:
4 u! E/ O  @. B: k7 j" J7 x============
( Y) H& o) S5 y9 S2 D> sfe b                                      ; 帮助
# _$ M6 E& }1 i3 i> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin' [" Z; u! @, m& p* p/ |9 p) I7 d
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
0 w9 a3 ^( @! b4 o# L! v> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
1 L- ]6 K3 M4 o3 D- S; S/ _7 }> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
) L* u1 p( T2 _# c# ]( z9 U8 p) g) X' h* m! j; C; {
比较文件:
7 c* V4 O3 Q( X8 @! B& }5 m==============
7 T9 o: H( q4 R% p* f> sfe c                                              ; 帮助
3 r% }1 @5 D1 x& b! m> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin- t! G3 ]: J, F) g
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
" E5 g- P+ k0 H+ p> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
! t3 R9 C8 I1 ?0 C8 t$ o, k> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )0 I$ Y" `; t# y( ]
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
& q+ C: l0 T7 E8 L4 p2 A1 G> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
1 r* o( W  ^+ t7 l> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
/ `- v( D% Q: ?# o9 p
! g0 M1 {5 O4 b$ L8 b发现16进制的地方:' l, R4 o5 f  k- o( ]/ z0 E" k% `
====================# L2 p1 B( |4 d$ ?
> sfe f                                     ; 帮助
* E+ }+ {* A: _6 e$ L$ y* [> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个+ k7 n$ v7 C" k
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
! t( @! D7 }) E> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
! S, o. O- v$ @( z+ Z% n3 U# n> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找" G$ m9 F5 O$ r7 U) _7 w4 s. ?3 ^! I
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
3 z0 W5 S* J. ^  {6 x7 v( d> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.6 s+ _7 I2 P) o3 q( F

9 g7 N$ m% r) Z: F. P! w1 G5 }提取语言数据:  E: g3 H0 Z5 ~6 v) {, Y& C; F
======================
3 G, `( k0 z/ G/ O( \) G' C4 _> sfe l                                          ; 帮助# q$ ^; ^. R' d+ m# V4 L
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
6 H0 p$ x5 _3 t4 U4 ~2 d> sfe l src.bin 200                          ; 显示 ID 200 的字符串, O6 _5 D: n% q1 k1 p4 q0 R$ o, F
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
3 ?7 E! Z/ a7 {8 l. s3 K( X> sfe l src.bin -1                             ; 提取第二种语言$ ?2 d3 s& U! |3 z; m
> sfe l src.bin -all                            ; 提取所有现存语言: Z& Q' g, R2 g) s
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串# h; e1 m: _# i8 F0 y8 @+ L. h- h
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
5 [- X1 A' ]+ o- I0 V> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
. N  Z! X( K& \  H4 K( u; }4 p2 V> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
1 C: p9 i: x) h6 g  y) P" r> sfe l test.lng                   ; 检查test.lng 语言包3 h& f5 C& P+ A) r5 ~
> sfe lc test.lng                   ; 检查和更正test.lng 语言包8 A4 w" K6 ]$ ?* C- c$ R7 C5 z  e
; r( L- P" s8 n
提取菜单:1 g% X' A6 U( G/ H9 b& |- P2 N
=============7 B1 Y4 s6 H. P8 t( r8 X6 m) d
> sfe m             ; 帮助
1 x7 Z3 r& \! F% |6 }> sfe m src.bin    ; 提取菜单结构和入口
* T0 @, I2 T- @4 |# v7 D
4 q; ?4 M+ q( z6 [$ j) {' L: X5 }+ l9 [9 G) Z. x2 R, K4 G  r7 }
补丁:* x. p$ d7 F8 B/ R$ p
=========; ^0 H3 I* {: V7 Q; T8 u! O
> sfe p                                        ; 帮助# O' T( g. L6 ?6 q3 {+ C: q
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
4 c* v9 [9 o7 L& F" |' u> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz8 l0 u; c) ~& z0 h
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
( u. h9 n% d' J& \
( {! t1 V+ I. O8 ^+ H5 I8 }1 K  O1 H0 f) t; q* u
编译:& d1 }. j9 \2 P% c2 M4 C* ~
==========9 B2 f! x2 b/ Z1 ^" h& M# C
> sfe a                                     ; 帮助
3 `$ N0 Y, b& w& H> sfe a src.asm                          ; 编译 src.asm+ V/ b! p- Q, _! J$ G
> sfe a src.asm d                       ; 编译 src.asm, 完整输出  C, H4 M3 P, O
> sfe a "mov r12, #1234h"          ; 单句编译
9 w9 E& F, U: \0 ?6 Q5 d> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
( {1 J0 Z3 `0 R7 v9 P7 d> sfe a src.asm,TST                    ; src.asm编译成补丁格式
( e5 X% i, p3 N9 g0 e* f> sfe a src.asm,TST p                 ; src.asm编译成补丁格式5 q  j0 i( C5 Q; w3 j5 p1 q8 i
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行. g; w% z, c+ Q* X+ |
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000002 u8 o% M* b: m8 [7 v7 o4 k8 Y. h9 N
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。& ^1 q4 z8 F* `& A. h& ?

% Z$ q9 j/ Z+ t2 I, b- u8 {  W*) See Assembler Part to get more 'assembler' function detail
( E. a4 `4 Y) E( e5 k9 _9 v5 A! N0 t7 f5 t! ~  R6 m& G

  i' {2 L7 C/ d" j5 M4 Z反汇编:/ I4 [8 ]4 k& u' ?+ F
=============  P1 `. w" q9 }+ u% a
> sfe d                                       ; 帮助1 S  d' ^' e) a, ^) Z
> sfe d src.bin                             ; 反汇编 src.bin
  Q0 ]' L, N& x& E> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin, J& q; I  ^+ E
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
- N  M2 R, ?0 m# l8 ?> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000002 J' c! G9 l* j0 y% u' |/ X, Z# C
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
" O7 X3 p/ t7 A, G> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址  n0 ~. {0 I! W& n( j
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件7 w6 H( T' S* t4 l
> sfe d image.bmp                  ; 单色图形汇编输出
7 h1 N% r8 ~: N> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。# h7 A+ R. I& W% ~5 Z7 N% ~6 Y
: o" h  Q/ _& @4 M
调试:8 D; ^1 K' y; A0 ^/ G- }% O: o
=========
* m( p( C* q: _  X> sfe r                          ; 帮助
8 j& A7 C  M9 Q% v# E> sfe r src.bin                 ; 运行 src.bin
/ n+ t5 L1 D% g6 C; A+ X' h> sfe r src.asm                ; 运行 src.asm 汇编文件
( o2 l, O; [: r2 m2 D! z) N> sfe r src.asm ,n            ; 同上, 正常输出! ~! m; Z8 i. ]% Z
> sfe r src.bin,200           ; 从 0x200 地址开始运行
# }$ s/ E; l" m  w- C0 p5 E> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x2005 A2 J4 ?% J( G" m/ e: \- F! f
> sfe r src.bin b00000      ; 以 B00000 为基址运行
# S' C1 l+ i/ b& z3 ?- W> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行0 J. x, Z/ b& O3 T6 P; ^  `9 w
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行4 l& S% x; j, A) H# B" x( \

! _6 h1 b% m4 v2 Z( G1 @5 o& I0 W( ^# f8 p: A
交互调试:
$ {( @/ u. j* O======================
+ p) c6 A4 b1 g5 ]2 `/ e; C> h              ; 帮助
  d4 r( K1 x% B0 j> g a00000   ; 到地址 a00000
1 p: {. a7 n( u0 N5 r- U( C0 B+ ^> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800). G! H, N- i, L; f9 b
> d              ; dump 内存 (现在地址)& H, c' w2 e& X! |" H4 `: O
> d a00000   ; dump a00000 开始的内存
* w8 }! u5 R7 c, P1 h> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
, H6 |. p! |% x% h. f> d r            ; dump 注册$ U- m6 d, r$ i" I; O' p
> a              ; 单句汇编$ m; S) J+ {  @; X
> a c7d530   ; 单句汇编地址在 c7d530$ r/ P; V) o1 F9 t9 z
> u              ; 显示反汇编+ c7 o) P0 Y# a" C
> u a00020   ; 显示地址 a00020的反汇编6 K5 \% v8 N& R7 q
> r               ; 在现在的地址上执行一条语句' t  c5 a% R4 d7 n2 U( e2 M
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)
1 Z' }. d) h9 v# M> r 0            ; 运行到返回语句
2 s# I' H  z1 a2 ]* n0 D> r -c7d580   ; 运行到地址 c7d5806 q9 I! }: S- O: V
> q              ; 退出
9 g& R$ d$ a7 c  @/ \" ^3 |) b! R7 J8 N& q) f9 `0 K  r4 t* U) r
*) 所有未声明的语句都会改变当前地址。
- G/ G9 n' w4 ^5 p# n3 p
, F% s( w6 b! x/ @! R3 T
  @" F: z5 {0 l$ s0 r特别的助记符:
" O: [: k3 E# L. X7 e5 @============================2 @8 n" x3 j  P0 y: N7 V$ w
*) 所有C166的汇编格式
: v4 Z/ w6 z( u9 D: p*) 分号用于注释 (在一行的任何地方); Y1 O, f) U/ E' y; w6 l5 t7 A
*) 特别的助记符如下 :
. \1 S$ d9 d1 h; O4 s8 r0 D0 g. s9 v   #include filename    ; 包含文件(各种定义)
- P% K" ?( ^2 M   #define var value    ; 设置替代变量 var = value3 x4 Z& z) [: u4 i& b
   var equ value        ; 变量取值 var = value
8 ]0 p* E: k5 l6 T- o   db 'X',36h               ; 定义 byte(s) 数据区
  y4 k3 ?6 r% V# a/ M/ R   dw 1234h,0,'AB'      ; 定义 word(s) 数据区1 a4 ]: E3 B. p
   org                       ; 设定当前地址
# _# W7 ?0 i" T. ?   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)- [. J6 D* b4 e# R# Q0 _; Y. p
   end                       ; 结束记号8 z0 W! P7 h$ u) A! d
   ;#name XXX.string    ; 定义补丁名称 (XXX)
: j% R5 I7 N$ b& U" `. ~   '                   ; 注释将一起进入补丁; _2 j- \# y1 z; }
   ''                   ; 注释将一起进入补丁,加回车0 W- f/ ^1 w7 k' ~0 C+ X
   ';                      ; 以下内容将全部是注释,直到出现 ''
- C' z0 ^7 V, L  W2 w8 _4 I# K8 ?   ;'                      ; 注释将一起进入补丁9 I7 p$ f3 f8 l7 q  z0 m
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
% \$ A$ n+ G* u; d' u9 H   >> > < <<         ; 右移左移操作
9 d; w; |& e! t3 E$ t3 v   & && | || ^ ^^    ; 与, 或, 与非操作
6 f8 b6 @$ W6 l4 a   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
: A2 v9 \9 A" {   page(value),         
% `* F% A' F6 [& x" E   pag(value),
8 W) r& }: I2 v0 `7 v4 r   p(value)             ; 页值 (= value / 0x4000), A0 N- p, [# ^/ J
   pof(value),& i: W' l3 A% b) s  U
   q(value)             ; 页偏移值 (= value mod 0x4000)
; Y" I3 p) s5 m9 M* Z" S   segment(value),3 R- g: g7 a, G4 m/ g1 M
   seg(value),
. `0 b+ A- C7 |( ]8 G' _3 Y   s(value)             ; 段值 (= value div 0xFFFF)
6 C$ W; G8 f/ A" a1 k* Z6 N   offset(value),( q" w0 P. P& E3 K' g+ U
   ofs(value),
, S3 P. E4 y" _, O   sof(value),
' S3 q* R1 }; G   o(value)             ; 段偏移值 (= value mod 0xFFFF)
) @0 D, t! @: I/ [; P! ^
+ x, V6 M3 b. x' ]2 Q. ^$ L/ c*) 例子:
0 W. N8 ~+ d; u8 M, Y2 x8 g
& A/ \5 s- [" B! W;--- Testing ---
+ S5 R- \  j7 F/ h/ {! o4 t# a5 o% h4 N: ?
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址3 i0 W0 R. j! o* G7 ^+ B9 j
6 f: ?2 l+ d1 [- K
#ifdef ME45
* g3 Z, ^* m  _0 J: W9 ~; ]  #include me45.inc2 r4 f4 _4 _8 Y: s+ Q6 W0 {1 |
#else
. p3 Q" f  y  ?0 s; `  #include sl45.inc
5 D' T* R( @% ?$ f  #define  FreeRAM 37h:3600h
8 E: K. P& O  v0 G+ m6 B" [0 c  #define  memcpy  0c7b384h
+ b7 }, L1 r2 i+ n: J* }6 B#endif1 s0 T9 l3 S3 M0 U* N1 R( u

2 q. s% n7 R6 X8 S. i+ C;#name TST. Test Patch            ; 补丁名& e/ y% L  O5 M4 ]" L+ _/ A
  G, O& T3 k% J) ]
'Firmware : sl45v56' {) N( J- G; B7 ]  v0 m: B
'Author : rizapn
7 A. L0 j5 q$ y# V& [" j( y1 |'Updated : Aug 18, 2004
& t: n& Y+ g+ [5 E# f  V8 J/ `/ r& |' _2 b8 s
org 0c7e000h* L, k, a8 c; S5 x3 k* a  Z$ z
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
) q! {$ a2 ]1 S/ ~    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
! S. q5 o+ H: F7 N4 U" w5 Z    extp  #p(data2), #1             ; 跳到 data2 页
7 ~/ d2 n) a4 Z3 E0 e) Y' N: h4 ~! k& E    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
! p4 l' w% W( z6 q    callr sub_1                            ; 页内调用! l. B# {7 w1 v$ D/ L
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'- a/ J1 ?( j- a# m6 K2 x9 p; ?* i/ [. b
loop_1:& y: B. x. d% i' ?* f% m6 B
    mov   r2, #1234h' l/ a3 k( p! p- ^
    mov   [-r0], r2' Q  J. S5 E0 E% [6 n8 }/ f
    calls memcpy                    ; 调用段表示的子程序
7 h# F2 ^. M+ K: A: X: W2 v    add   r0, #28 V) [9 M) Z7 H% h) h) {0 W
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处4 P% B9 a* P& I- w: l, N
    rets
9 i# L; w! f* v! g' M9 n' ~$ m, Q$ N" |) Q0 b5 q5 ^
sub_1:1 X0 u* _# F. c# L7 }$ y
    mov   r4, #1234h- v% f# ~  ~. Z3 y: i
    ret! J) O, ]0 q( Y/ t

- \0 J7 n  ?6 s4 C- Y. J1 \  rdata2:
, @5 O! g) i& r  O, f- ^, a    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区7 \9 I' h. |- h+ M2 R- x) c
" N/ l+ ~$ @. z
end
! d" u+ O0 _: ^9 G. O% W9 S8 m% D9 _+ K, C. R3 q( b7 q
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: y5 b( E) t5 n  x: v) X8 Z, E: e) ^1 G9 R) ~
Allaahu Akbar,
% w* W1 W: Y5 |" F5 iRizaPN <rizapn@yahoo.com>5 x* f/ X/ T4 L6 |  O3 C! ]
Jakarta - Indonesia
3 P, [8 g, a6 e4 s$ l3 E) C# s0 k! u3 ~. z, }) @8 j5 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-10-24 22:11

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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