爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
1 x; G; ]. [" \9 s* m/ A& b4 M" y+ w  s# @0 D  r
简单帮助:7 L0 F0 {* [2 t+ H
====================
2 a: Q. b2 v) d) A+ w5 ]*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。0 Z0 n6 A- \! Z, F0 N
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.! |% a0 i) g' ?. d- V2 D

/ \; ?+ r" N) K1 J
6 C, h, N9 s+ b- V( O搜索空白区:
% z/ f! ~  ~  X6 q$ T8 P=====================
# Q' |( U7 L' T% p> sfe 0                        ; 帮助
1 \( I9 U  T. l3 S7 I> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)
( w, K; x4 g& i) k> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间
- N6 V% b5 _. s9 O6 _- V
% |$ X  Z6 k2 P+ w* t. q二进制拷贝:3 M7 {; b8 b, T, `
============
' i5 a' ~$ y5 p+ ?> sfe b                                      ; 帮助# j! m; ]) W# z2 ?! G
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
: J2 ]  l& r. b" `> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
7 y6 ?$ g9 `, K( V  [> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin. v8 r+ V/ n! o- U( W  _9 o
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2009 D  H  Y& e- d8 [6 |; V

# R0 L2 v4 V2 w9 i" x1 X/ J比较文件:
7 X: G6 s$ F8 p; w- V; U==============
+ E  m! a( |1 w( N5 S: z> sfe c                                              ; 帮助/ J; \5 ]7 J$ c) c2 x
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
! R( U8 S. z; v' l; H> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
; E# F6 {3 o) e* s' }7 H> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
$ ]4 I+ V5 d, n6 \8 A2 y> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )% G% M: s, T% B. m
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
& V9 ]# w2 l: L! d> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
% C$ T0 i8 w. p3 E% Q> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
# y( q, [5 J: V
- {! a7 F7 V3 l2 A/ {; H1 d发现16进制的地方:8 r" ?7 ~4 h# W* l# G
====================: B- S. w( K4 X
> sfe f                                     ; 帮助
* d" Q9 {; h9 h& N> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个( n4 @) Z( r  u+ L# h
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找$ `& N  ^' S( @6 ^/ x
> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
+ v: }+ p! Y) S$ c' z> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
8 P& m2 q. U, o! J, G' y> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
( o3 A3 L: n$ B% ]1 y> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.9 M) T, B7 q. t; n# {  F
7 {5 q% u6 |. w4 v; ~' R9 A: \  a
提取语言数据:" H$ D8 ~" j) f5 l; [& e, y. A
======================* i' G: x) s8 |
> sfe l                                          ; 帮助
: \* ^8 M8 Q5 y0 v> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
4 K& Q9 X# ^6 c+ D; x) i+ g3 N  D> sfe l src.bin 200                          ; 显示 ID 200 的字符串* j) N( O( Z, {' z9 T
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串; @# T- W4 \$ U/ n1 b* D& `1 l) ^) q& p! D
> sfe l src.bin -1                             ; 提取第二种语言9 e7 H9 @1 F! O8 S3 k# ^
> sfe l src.bin -all                            ; 提取所有现存语言
/ c. d- l2 \' t: t  u6 j; u> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
/ {$ B5 r$ c2 J0 l6 l  d> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言); P  `' a' ^% @2 T. \
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本9 c( s3 n- W8 x3 {4 p
> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
; l% c0 {) K8 x> sfe l test.lng                   ; 检查test.lng 语言包
; V3 n* x" \( Y5 `- A3 J0 h. o7 ?> sfe lc test.lng                   ; 检查和更正test.lng 语言包  @  Z1 {( H* J
/ X4 j5 T' _1 t4 \2 N
提取菜单:
- K. ^: D) I) y% p" V0 y=============
) m1 L8 Z& A6 m; u> sfe m             ; 帮助
  g) ]- |1 f. |- C# O9 j> sfe m src.bin    ; 提取菜单结构和入口
  B  a+ @& h  h* p$ T
' t4 K1 P) N; B1 D" q! W' o; p# z/ Q! t1 _- S- j' L
补丁:  L8 f. a9 N! ^
=========, S! g5 R5 \3 L) \4 \# r) B+ t7 c. [
> sfe p                                        ; 帮助
# a* S  b/ l) Z% f2 a> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
% u. f6 r* m4 U$ e; X> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
1 Z* J) @5 D2 |) Q7 q5 {> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 7 {% |! y( J0 s
+ Z7 `" Q) x: p, n

, u; W5 C( @' l* e( o$ y, Z编译:
8 h6 U% U5 t; _# E' C( j==========
1 s6 _0 q, U5 T. y. h9 \! F> sfe a                                     ; 帮助
. C) n) Q( R) p> sfe a src.asm                          ; 编译 src.asm: F2 x2 T/ t* f2 R/ p
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
3 V7 G" x$ b& B( N  e# b> sfe a "mov r12, #1234h"          ; 单句编译5 g7 `" N7 U1 v' H
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译7 \0 P/ X, P& ~: |1 u7 Z
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
- B$ |( w. a* R* ^> sfe a src.asm,TST p                 ; src.asm编译成补丁格式$ F! u) L5 S* ^: A! g' C: H) B
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行* `8 L7 o7 o; `7 R( D$ Y( S, x
> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000- b' [/ Q) a! f- n$ q
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
1 o, r8 C' {1 h% F3 J" c
, \: h  o5 S; k8 S" I# @2 l5 m*) See Assembler Part to get more 'assembler' function detail( B% v4 k; i( ]* A7 ?

; u: N/ J4 O1 J! }$ V7 S) P' V; e' w7 l. j! C. ]% d# L
反汇编:
9 e* t5 b8 @; }0 m7 _=============  Q: C- n/ u5 n  @
> sfe d                                       ; 帮助* p4 {3 `3 S1 R' k: F3 Q* l: ?6 `
> sfe d src.bin                             ; 反汇编 src.bin
/ e- V  a0 _4 s. M> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin9 g! s: |$ C! w) }- K2 C. Z
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节, A! Z6 b4 C0 q7 W+ y" P3 {$ |
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000001 Z+ B+ Y9 ~2 w4 O: e
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止, ~1 N3 s3 ^9 R$ Z3 X
> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
& U+ J* @0 Z2 F& \4 U5 ~, L> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件3 J, f' d4 K3 b! [+ o' h7 b0 b# H8 R
> sfe d image.bmp                  ; 单色图形汇编输出( I; f% t) ~. ~9 N8 l
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
# Q- P  B0 Z: M# b. r% A0 [* m. R7 q# F+ J) @. x
调试:
# k3 |$ l) i. z( g2 y1 k=========( R9 w3 y" I* C9 R
> sfe r                          ; 帮助5 W9 L0 w- @0 Q3 Z0 U
> sfe r src.bin                 ; 运行 src.bin4 C- N% z5 m0 P" f" ?9 n; a* @' U
> sfe r src.asm                ; 运行 src.asm 汇编文件9 ?" J1 s5 F2 n+ P# Y
> sfe r src.asm ,n            ; 同上, 正常输出
- f; o9 W- Q+ A4 G% o6 B5 {> sfe r src.bin,200           ; 从 0x200 地址开始运行9 n, r9 j" M' O8 ^- V
> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
7 G- y2 X- ^; d: u3 L- W2 r2 w> sfe r src.bin b00000      ; 以 B00000 为基址运行
) ~# I0 g" Y) P: D/ \> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行$ \8 e: s2 _. w9 |: \3 `  O& a
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
3 E, T3 U% _4 _) O$ O
# q" b( e- x6 \5 r1 k6 p" g& W! j# e) _3 x4 J$ _
交互调试:
% s% l: k( M5 y! \" M2 u. q======================
+ C( Y) _3 k8 P9 u; j3 G, T+ o! W. n> h              ; 帮助6 K9 U# W# Q7 ]" {; t( o! I: A
> g a00000   ; 到地址 a000008 A. h  l( D* O9 t+ ]0 A. V( m
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)1 y  k8 P, O$ c, z3 S: i: |: n# u9 f
> d              ; dump 内存 (现在地址)5 |" @, b1 h2 c) [
> d a00000   ; dump a00000 开始的内存
, `/ P# ?& `& L  ?1 P6 O> d a00000 200   ; dump a00000 开始的内存, 大小 0x200- `" @6 R& \3 v2 ^
> d r            ; dump 注册" N- r- H) G. d5 b6 ~
> a              ; 单句汇编
1 e& q7 z; b) E6 y> a c7d530   ; 单句汇编地址在 c7d530
. F3 i; U2 Y/ ^5 n5 p> u              ; 显示反汇编
) s9 z8 ], V; W2 `+ T2 {  A% L2 A> u a00020   ; 显示地址 a00020的反汇编' }. d4 M( h  ~0 P& h$ g" q8 b$ ?
> r               ; 在现在的地址上执行一条语句
  V% O" ?) t. O; l- X" M> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)) S* L+ c- u; o1 F" X/ @, ?
> r 0            ; 运行到返回语句3 Q3 r1 j2 X3 p! u  ]& I8 ^
> r -c7d580   ; 运行到地址 c7d5807 L2 g& N1 r( ~/ g( G" h/ z
> q              ; 退出
& S# t  w. |8 C/ n" f) a: ]3 z
% H0 }# ^" T$ P4 Q! k*) 所有未声明的语句都会改变当前地址。( U* u. u0 F! h0 h  {

2 h& ^3 m! [, x5 o% {$ f
& f6 z, U* z: Q0 X特别的助记符:( z; R- G3 b5 j& T
============================; I/ |& F& L2 g4 u4 H3 k
*) 所有C166的汇编格式
3 l6 q+ o! B* c; ?4 C+ k+ x*) 分号用于注释 (在一行的任何地方)
5 e" l! C' e6 j% y5 u*) 特别的助记符如下 :
. c, U" \$ p' e- V$ B/ l   #include filename    ; 包含文件(各种定义)$ p  t% n, d, Z/ B
   #define var value    ; 设置替代变量 var = value
2 P: _0 c* p& B   var equ value        ; 变量取值 var = value* K- I) \' w  K% V! o
   db 'X',36h               ; 定义 byte(s) 数据区
7 e7 x* q/ {: L+ o  t+ k+ ]   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
5 K; r) y" P; W7 P6 S$ o   org                       ; 设定当前地址
- k9 n. ^) @" \% p& f   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
4 a1 p. a7 K  y5 N2 ~5 x   end                       ; 结束记号. G+ `+ k  p/ S/ {; \8 K" F* h
   ;#name XXX.string    ; 定义补丁名称 (XXX)  o5 y7 N, a' @% l1 ]- y3 e
   '                   ; 注释将一起进入补丁/ M. S. O  V9 F: W: t) f$ t5 j
   ''                   ; 注释将一起进入补丁,加回车+ G) D. T7 N" \. Y. I! }9 e
   ';                      ; 以下内容将全部是注释,直到出现 ''0 R! ]3 G: V, ~- ^
   ;'                      ; 注释将一起进入补丁5 b- T( Q0 o: {
   + - * / %            ; 加, 减, 乘, 除, 求模 操作
; i9 [6 u' S, C( b- ~   >> > < <<         ; 右移左移操作2 ~' N7 D* M% o- b- o- F: j# T
   & && | || ^ ^^    ; 与, 或, 与非操作
6 E4 G* m- Y& V   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
$ L, e2 [" n# h/ l+ t4 P( U4 H/ K   page(value),         - @* p1 W, f8 z4 M' s
   pag(value),6 s( ?  T) a: O% c8 S5 q
   p(value)             ; 页值 (= value / 0x4000)
" l5 T; G0 C% \   pof(value),  U& x5 B/ E1 t1 T* z  d
   q(value)             ; 页偏移值 (= value mod 0x4000)
" P. `( D8 {4 ^# ?   segment(value),% k' O/ X& }8 e; I# z# |. Y& T  K& n
   seg(value),3 ^/ F5 t: I7 g. w
   s(value)             ; 段值 (= value div 0xFFFF)
& a$ V5 y/ o9 Q( K* o. k" n   offset(value),
# S0 ~% y6 ~/ L   ofs(value),
  M; C! F6 `+ H4 E9 M5 j! W$ {8 T   sof(value),! q& S- h( X4 O, ^  ^
   o(value)             ; 段偏移值 (= value mod 0xFFFF)7 i- F4 p/ C! x/ q% w2 D" h9 O
, t0 q. Y* A5 C* L, r
*) 例子:
3 |( z' X6 y9 E0 J7 |" s9 g8 W6 ]! Q7 |/ m' E; B
;--- Testing ---7 s& V" a3 z; S% F0 i

; n6 I/ {* A  o/ h  \7 [. bbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址
" R0 a, l( E7 g4 o
" j. \" Z: u9 |2 |#ifdef ME45. `9 u$ }; T2 o, y) W( |4 ^
  #include me45.inc
/ N& c9 E% I3 @  R  J; h9 t#else) r* K4 D) _9 ?" ]
  #include sl45.inc
3 b) f. Q0 ^! Z! |+ i3 O  q  #define  FreeRAM 37h:3600h5 ?8 C8 x, {1 x
  #define  memcpy  0c7b384h
% E% a0 L! v/ E- _1 s#endif5 Z0 W* O8 {! Z3 c; }( ^

$ J$ L. h3 o6 V2 t" ~6 ~5 b9 q' d! M;#name TST. Test Patch            ; 补丁名* d* V2 N) \9 [* `

4 o: i/ `* M2 ?- e# \9 M'Firmware : sl45v56- s0 l( w8 m- a1 O6 P
'Author : rizapn
$ q# q, F. j; A7 m9 U/ ?2 s3 x% Z'Updated : Aug 18, 20042 b5 O1 M/ ?; z& t: V( W6 q

, ^& G/ a/ |* E1 c. ?org 0c7e000h/ {; w4 K" a  h( G7 b+ _
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移2 x% G( B3 f( U4 }0 \" D! N" ~
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值" b+ M* F0 X5 O5 d/ R, d
    extp  #p(data2), #1             ; 跳到 data2 页1 V3 ?5 O7 T: n% A( i6 L
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h). b# |' _+ `% i' ^$ E+ g/ A  o
    callr sub_1                            ; 页内调用& v; t6 B4 ]6 y+ e/ T
    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'
# _2 n, A8 J8 H7 y6 s  M* h3 jloop_1:- q  B) M7 G9 b9 a2 |/ u5 z
    mov   r2, #1234h
5 W+ y2 `( l# ]$ N    mov   [-r0], r2; ~) n( V& h% m% z4 q
    calls memcpy                    ; 调用段表示的子程序0 p+ t( W* V3 Q
    add   r0, #2% U- T: b4 G) x- C+ B. G. p
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
9 \  b# e  I9 ^" {( J" X    rets
" l0 x2 _7 R: w2 E9 E( ~7 r/ m# f) W( \4 [' X: M
sub_1:; Y% l6 x+ @4 Y# ~" S
    mov   r4, #1234h
4 @6 P* v7 S, M2 ?% X    ret
& k; m0 M0 w+ w( x4 P: T
5 }& Q0 {5 P$ h& M! D! _7 Rdata2:
) d0 p5 O( e  ^8 B, `4 e    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
" y3 A7 g& V7 m  @) w7 G7 U7 o! I# P' l, X1 j  C. m
end/ v8 `3 J. T% ~) b0 D
' f/ o$ C5 ~3 Q5 n
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~) S* c( M) D$ f9 y' H/ U7 ~- W

! @: ]* W) D* i) Q' F( eAllaahu Akbar,
% S; \  Y9 B+ I* ]( x" z, a' |RizaPN <rizapn@yahoo.com>9 p7 j/ J  L0 o/ |$ N
Jakarta - Indonesia' m' f1 E! @6 Q; r/ P. E
' W5 I  Y! ^* l+ C. ]9 ~
[ 本帖最后由 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-7-4 16:30

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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