爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:- x' ]  B& J, ]+ [( W  X8 G+ ]

% I  p  u2 w" }简单帮助:$ T. k$ b; C" Q0 \
====================0 z; }( P9 q$ @; A6 j9 m" m
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。7 j8 F0 J& \& N; e" X7 B& e4 P
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
  F  i7 P- q) x. W+ o9 h0 V$ F* Y5 @% C5 s

9 v- i# g1 G3 o3 Q& L% M9 K搜索空白区:
, y4 B! Y; q' v; D! d( f- @=====================, q* T1 ^4 i& {" V/ V
> sfe 0                        ; 帮助3 E9 q9 V" z' M  ]
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
- F, n9 |1 e9 {' x) z* i# A3 P> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
( C9 {  N# z% ?. G: S7 Y& N8 k+ b0 V1 P( p
二进制拷贝:8 h% ]( ?4 n8 a2 ^9 E6 @
============
4 P  R. L0 G/ Y; h' m2 g0 V> sfe b                                      ; 帮助
3 B. Z! {. i9 ~% L. e. _6 ~> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
! k- h! e% `2 D: z! f> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin  h0 ^+ B/ X8 m
> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
4 w- C- L! L2 B0 q; m> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
) i/ @% O% S, q: p% Z
: {, U* J: G) |' g3 o; f比较文件:
, P" a$ m5 ?" o+ k: \% ~==============5 h4 M! U) C6 }/ L9 J
> sfe c                                              ; 帮助
0 x# H  `8 E2 S0 F$ _) V* W% v> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin) k: q# a1 x! B/ Q$ R3 z* p7 u9 F
> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
+ f  E/ w4 a5 q# m/ C> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
6 r: k8 y6 R6 P8 R" p+ e> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
# }1 ]! q% V8 ]3 I> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000  ^0 e/ p* u5 b4 m! n2 i
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
6 @4 N, C. P+ e$ t6 ]> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)2 O6 ?# I2 }" c/ O" S, F

' Z" x: H; S% S9 D) z% L2 r' b发现16进制的地方:6 x- r( C8 Q& z
====================( r6 T; x9 \# a6 |# w- K
> sfe f                                     ; 帮助* R( Y; M; B% h
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个$ ~5 L6 V' k+ C) L; e
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
  ]  O, x' g; R- R2 t7 \> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
, B7 M8 J7 ^9 G' f> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找8 u" e0 n% ~7 ], C$ z0 b  J
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
* i% \. C' a: q4 ?: u% V> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.4 E, z* A( \. m) r1 k: P
' U1 W5 }# O! w/ ^) U
提取语言数据:1 \  {7 C; E; v- v% |
======================2 O1 f$ g9 N/ v/ i, D2 a5 k6 L
> sfe l                                          ; 帮助$ K; L; x! ^( t: e# W
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据9 w' S7 L, ^1 Y- T
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
" R! Q6 s8 _5 x& l7 A  M6 J> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
, H* b) b. d, a# j" _> sfe l src.bin -1                             ; 提取第二种语言
9 U5 z6 p! W, _% L> sfe l src.bin -all                            ; 提取所有现存语言, D, _) W: R. z+ ?& `
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
; ?; g- x- l# D2 c5 [> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言); M/ `9 p' d/ F9 i& _! R" X
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本9 i# Z$ u  }4 w
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
. F! ?4 G) L% p& s1 a1 }) d> sfe l test.lng                   ; 检查test.lng 语言包
8 ~0 u( x% O9 z> sfe lc test.lng                   ; 检查和更正test.lng 语言包
6 A/ ]) ^2 @" N$ I0 v) R) ?! O! b( d. ]. _  U: b
提取菜单:* W' A" m' M( z9 N- h
=============1 U" m. J- x$ k& {4 R
> sfe m             ; 帮助
  C; d: F, p. x1 S8 x+ j> sfe m src.bin    ; 提取菜单结构和入口
( L8 G0 A. t! x& K4 r$ T( @1 `$ R: v8 Z6 a* P$ Z0 Z, W
1 k7 |2 ^1 \- d, F! ?! \- O
补丁:; G. _7 U7 B9 M1 d! b& E
=========. S* e& S, Q% S  L; k3 }4 u
> sfe p                                        ; 帮助
$ r4 u# P$ p& n  H( c: B> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
/ j$ K) p! o; C" z( T0 H* P$ ?/ R" n> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
. m7 z+ p: a$ N  s> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz * L/ n$ ]; k0 P9 M8 L0 r# V% }$ e* L
. X5 n: L+ U% z

* ?! R# {3 a* W& ^, Z& y编译:/ `" X. h8 V& J
==========
: n. l$ ~& h8 R2 Y: M1 p> sfe a                                     ; 帮助0 C% a) e' {% u$ ^6 Y! O
> sfe a src.asm                          ; 编译 src.asm+ ^% @8 E7 U, z  I
> sfe a src.asm d                       ; 编译 src.asm, 完整输出7 Z" \. Y- Y, T* m' M3 l
> sfe a "mov r12, #1234h"          ; 单句编译
* I( {& d3 j, L, }- n6 F( F> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译" {& q# f) f6 f2 \, `9 H
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
4 T- ?2 Y/ T) ?6 Q' V2 O$ ?; Z> sfe a src.asm,TST p                 ; src.asm编译成补丁格式% y1 d9 p# r8 N
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
8 F! ~) r" a& T8 F> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
) M( T; Y( O! W% `" H+ T> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。+ T$ k* R  u% [. i
2 F7 C$ a3 }) u% Y$ l/ D, h, V
*) See Assembler Part to get more 'assembler' function detail
3 {+ P# Z" z! A& U1 `  C% [4 y2 I) g* a  L& Q6 |
; ~5 C6 |6 g0 b* q; y9 h/ ?+ \
反汇编:/ D7 P& s" x8 E$ Z& g/ W
=============
' [8 O& A6 V' v* |3 m8 b  w6 q9 p> sfe d                                       ; 帮助" R1 K+ P# P2 u. m
> sfe d src.bin                             ; 反汇编 src.bin
: g6 L" i) b, c8 c0 X! a> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
! |$ l, i$ @2 n" @> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节( l: m  f1 ]! X0 L! c8 _2 [. {7 ?
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000
( U! P' D. r' D& b7 s> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止1 w! |, @- y- L9 X; _
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
  I% p5 q- d5 Y$ z; R> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
7 m% b+ R% f( V1 ]8 d4 p/ m$ u8 r- f5 m> sfe d image.bmp                  ; 单色图形汇编输出
% A+ q& ]8 u/ h: r> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
6 d) k* D( ]6 a' J" {4 A! {. g* u9 k  r7 w4 u8 R$ w8 w
调试:3 b' p( Z( h; \% [
=========+ O" Y  }6 e2 y  t" \7 h; p7 }
> sfe r                          ; 帮助' X6 y0 @( ~7 v7 E  |$ W$ Y7 z
> sfe r src.bin                 ; 运行 src.bin
: e1 w: e' w' _$ I; h* w> sfe r src.asm                ; 运行 src.asm 汇编文件6 q( h8 m% E+ u: s% {) j
> sfe r src.asm ,n            ; 同上, 正常输出- a, ~5 O# F/ F; U/ s" J
> sfe r src.bin,200           ; 从 0x200 地址开始运行
- j4 N4 \0 Q9 X0 k: |7 l8 l5 \> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
7 W0 O/ R1 E# J& C9 ~; U; g> sfe r src.bin b00000      ; 以 B00000 为基址运行
1 ]# @( `$ s. S+ c$ Z3 Z9 `5 F> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
4 x! R  e4 ]$ r$ _> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行4 s6 i$ S+ h; @, _! ]6 l
: g9 B& ]7 e" D

0 w: a8 C' _9 n5 A" x交互调试:
9 M+ F- k( q0 Z, k# c+ Q======================. U" G  G% e2 N1 v3 C5 {  [
> h              ; 帮助
8 E' H8 i2 e: o7 O> g a00000   ; 到地址 a00000
' v' O# @  \) Z" c; a' Z3 \9 M> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
. j7 a) ?, O* \0 ~1 ?. Q> d              ; dump 内存 (现在地址)/ Z; E& q- a& T0 x
> d a00000   ; dump a00000 开始的内存
' F2 F6 k+ W( {; Y9 U> d a00000 200   ; dump a00000 开始的内存, 大小 0x200
/ }+ h, I9 b; l, g5 E> d r            ; dump 注册
# x# R1 Y9 m( E! {! o> a              ; 单句汇编: }0 o& S* r0 V5 f. R
> a c7d530   ; 单句汇编地址在 c7d530
. C& ?& o! w" e8 {> u              ; 显示反汇编
: o6 A* `# R, _6 j% z+ q> u a00020   ; 显示地址 a00020的反汇编8 I# A2 s& c& I& T
> r               ; 在现在的地址上执行一条语句8 i7 l, U, Z0 j! l0 j
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)! E6 I3 |) S5 h3 T8 e
> r 0            ; 运行到返回语句, C4 R- `) p+ }- V) Z- w
> r -c7d580   ; 运行到地址 c7d580
  |1 |: @) S% v7 p5 g+ U> q              ; 退出/ Q; t' [1 A  v; |, q; X9 m& O+ f
  M8 q& R6 z( O& ~6 u  q- i2 @
*) 所有未声明的语句都会改变当前地址。
. B; ~1 ~4 c7 i: }  B# I# Z
8 a! r# z( v( l: Q4 Z& {  `# o5 `7 S  K* |
特别的助记符:
) O+ q" o' q) L0 M" l: y============================
, {* ~0 Y+ e' k' K4 ^) r* i*) 所有C166的汇编格式
) l8 L& S6 i# e*) 分号用于注释 (在一行的任何地方)
0 u7 W% g- G- M0 q7 i+ h*) 特别的助记符如下 :7 O" y" J) L  S% v( [6 ~
   #include filename    ; 包含文件(各种定义)* P' I0 I: `) ]& ]
   #define var value    ; 设置替代变量 var = value, y9 N. ~: ]( c1 }
   var equ value        ; 变量取值 var = value
' P: Q! |0 v3 I+ ^3 ?4 Z# k   db 'X',36h               ; 定义 byte(s) 数据区
- }3 s. y! L5 I; G   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
( s6 G" g& s; Z) O+ s& F   org                       ; 设定当前地址* t% T6 }2 x2 b% v3 t
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)" }9 h$ \2 Y6 I2 l
   end                       ; 结束记号  J& K/ ]" y! T! _
   ;#name XXX.string    ; 定义补丁名称 (XXX)" U' D* ?2 ]  Z5 |1 }4 Y% R
   '                   ; 注释将一起进入补丁0 d5 M/ P& T% ]9 Q
   ''                   ; 注释将一起进入补丁,加回车
- r) ^: V- h* j# {3 p# c   ';                      ; 以下内容将全部是注释,直到出现 ''
3 {3 ^  J+ S; [4 g+ ?   ;'                      ; 注释将一起进入补丁  I' |$ r% x5 X8 V) E" o/ F, U' {
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
+ l8 V' }& Z8 v0 _# _' J   >> > < <<         ; 右移左移操作
% X$ a' Q+ I8 b# ?' Y   & && | || ^ ^^    ; 与, 或, 与非操作
7 T  J* a6 F4 C. |   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)' x- G# R% F' d9 f8 N# g
   page(value),         # t' ^. [3 q  `, B, m! b$ [/ ~7 o
   pag(value),
  A; J; O( h. n4 t) C   p(value)             ; 页值 (= value / 0x4000)- h1 |% Q1 U, F' u+ N
   pof(value),
$ H8 |$ }- U/ @$ K$ f" W+ Z2 Y   q(value)             ; 页偏移值 (= value mod 0x4000)) _- a4 L- V1 c, x( X
   segment(value),
! M/ S! g# v! ?5 {' Y2 L- h9 O   seg(value),' W' c$ h  c2 _8 l4 S
   s(value)             ; 段值 (= value div 0xFFFF)$ b' A9 F$ d! ~. n) M
   offset(value),. R+ X: P3 s7 K, ~
   ofs(value),
9 o! |" u! I% f( J4 E   sof(value),
; M6 w7 @& H  c' A5 [9 r   o(value)             ; 段偏移值 (= value mod 0xFFFF)
; f$ M/ [* y! r. A. [4 g0 E; r2 ^# C1 Z" e4 p; v  _3 _- _
*) 例子:  L; `+ i$ o+ O! S/ o
+ R8 R; e0 S0 r. K6 T* F
;--- Testing ---
, l  @- i  u( I0 d, t3 X) m
4 c/ T/ H5 Z; G! z8 jbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址- ?2 Y/ z+ Q+ w" R$ M, V6 V
8 W8 T0 ~, k0 C- ?% t* a0 X
#ifdef ME45
! V: H6 R  y- P9 D/ [' X  #include me45.inc7 i9 r( D( Y" X7 R: y9 V/ Q# ^
#else5 F# p( C% S9 M6 m2 I+ \) D
  #include sl45.inc  P/ `, |( m% j4 W- I+ Y7 N
  #define  FreeRAM 37h:3600h
$ i) T  B1 K9 A( ^0 g) H, `( v  #define  memcpy  0c7b384h9 C1 }. O: }  h+ i3 c5 V6 B
#endif$ B! C& ]- j% \/ s1 M

$ g; z. G' {- j7 e;#name TST. Test Patch            ; 补丁名
  K4 i: x; ?% _0 N& H# @6 O2 x8 V. @$ l: d, L7 @& w9 S. b+ {. B
'Firmware : sl45v56* E, B( X9 a3 x; l5 d
'Author : rizapn
0 I* k% {0 L% d- G' Z& R1 `" {'Updated : Aug 18, 2004
  h8 m0 u. ^  _
2 e! m/ z4 g5 f, _& A, ]org 0c7e000h
$ \. A" r- N3 r: n7 N    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移' q9 w' {) W# P7 J5 C+ i
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
$ E- U! L0 ^& h8 d0 G# m; y0 f    extp  #p(data2), #1             ; 跳到 data2 页) x8 R0 G' c& z* S3 R) T2 i
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)4 j* S& r# a2 t3 R. R$ e
    callr sub_1                            ; 页内调用( {  a" u8 q4 |
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'4 V! Q+ ]) {6 P6 T/ [
loop_1:
3 r5 z2 ?$ Q( w    mov   r2, #1234h
! C5 x5 \$ b- M$ b% E3 l- b    mov   [-r0], r2
; g) G: S' b- F    calls memcpy                    ; 调用段表示的子程序- Q# }8 f  v1 W! N
    add   r0, #2) d, A9 C8 a/ Q. i3 O, N5 y5 t
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处- A$ _$ E+ x. A% W+ \) e
    rets/ K6 C8 [0 z4 d7 r
+ e9 Q8 W' ]) Q  ?/ k+ x
sub_1:
$ ]+ \6 @7 I8 \) Q  j! ~: C    mov   r4, #1234h
' U' U! L' c/ Q; w2 z! V    ret) e- d" @, ?- I" \: g8 |& ~& X3 _

6 h/ y+ `3 A/ Cdata2:
" G0 F2 Y. }. h2 x; J; @- a    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区& c. Z$ ^" q( o

9 {7 N4 M; I8 Z: C! rend
8 x  [' U: E' f+ r- H. i1 W' l2 V6 G+ u3 R. C- F0 T
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% z: W2 @. Z' w/ n2 J' S. W
. m! `, c+ ]. v0 e  V, uAllaahu Akbar,/ X: @' u5 Z0 N  R
RizaPN <rizapn@yahoo.com>
! n" W' ~9 T( K$ v8 g% l  g! g3 CJakarta - Indonesia
& g3 [6 A4 w3 X# `0 |6 {0 n6 v& d' A! J) G6 ~
[ 本帖最后由 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-8-20 19:39

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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