爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:8 D* C$ k3 B1 y3 ]" b1 [! x9 B' ]- K3 g
9 ?" X1 e% t; u0 V& l8 Z
简单帮助:
& z6 o! Y5 _$ A( ~( I====================
; R, c9 M- E+ H/ F*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
: |  \9 C. p+ N& b*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
0 C+ e" W4 s) S! }& O9 g& ~& o# L8 ]0 m4 F- T. S6 S8 z
. F8 C$ o3 W. u1 M; t
搜索空白区:
0 R/ `: q. U# ]# C0 C=====================
  D/ U5 V; ?2 t6 W7 O. ~> sfe 0                        ; 帮助/ ^; e3 @( a0 @2 N) m4 r0 J# h- E4 H
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes); T2 n0 d& R7 C9 d0 V/ X
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间( h+ x! V2 @; k: q

2 B$ \, G5 N- H二进制拷贝:
% |2 @$ J( f$ ^2 `" `( y. ~============$ n' J% |  B" o* a$ Q  W$ ^$ \" W
> sfe b                                      ; 帮助: ^& w" R- U, ?' g8 \; Q
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin2 A$ N, F: Q- I( W6 \# a/ j" C
> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
: p: b. S3 S5 U> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin/ E5 }" u, S) u8 Y$ J% M. Y! |
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
8 Q7 O  D' K2 p5 {6 _+ o
  ^6 Y/ [! @" _! s比较文件:# [( u+ u! `$ g9 N" t* k
==============
" F. @4 @$ `, u2 W  \7 S7 M> sfe c                                              ; 帮助" `0 W4 C! w: z. e) @
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
/ N/ W' V' l( D8 H+ Y! M> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )5 i( i$ m6 d5 i0 ~0 n
> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
- v! `9 W4 {* c* p- f> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 ); K+ l" ^& G6 w$ b. {  h/ b
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
- \0 Q% t5 ~6 n1 R> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes- y5 c: R" ?4 F2 A. z+ A
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)& s; Y4 h" E) s- O; F1 o2 H
1 Q& K9 b) b' i- j' ~) p% B
发现16进制的地方:: V7 }' u, r7 N; v- B+ h
====================
( l, o$ @6 r. R/ O$ x( W2 R5 B& k2 F> sfe f                                     ; 帮助" O2 J2 K( P( s: p
> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个' F; X$ O$ U5 e* k9 o7 c
> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
/ V$ r9 U; p3 _$ V6 X' U) v- B> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
; d5 ?9 ^; v7 j+ _9 c' w> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
7 _. g7 |/ E  z! J6 T> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
/ x5 y5 W# ]1 R+ m> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
5 d& U8 j! ^) T, B
) P0 n- w" S7 @+ W提取语言数据:1 @1 i7 [5 s( n& @- a- C4 J
======================
. L/ V8 J/ s# a% S" i2 J> sfe l                                          ; 帮助1 @* n2 ~8 Y4 R2 T
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据& w8 |9 T5 X/ I) |( z
> sfe l src.bin 200                          ; 显示 ID 200 的字符串
) B; d% r0 \8 _( N  P& p3 X> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
( f4 m6 G; g1 n) Y! ~# x> sfe l src.bin -1                             ; 提取第二种语言, R( }  A, p% v& \" V, ^4 m
> sfe l src.bin -all                            ; 提取所有现存语言
7 Y5 ^8 ?9 K7 k> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串& H+ {  \" x& N
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言); \7 g/ b5 A% i2 D# s5 v5 p
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
/ R% X; w; S0 g5 T" I" S7 ~7 r  t. T> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁
% y* R4 M2 v0 Y! B+ F> sfe l test.lng                   ; 检查test.lng 语言包
8 m0 W4 L+ T1 w6 z> sfe lc test.lng                   ; 检查和更正test.lng 语言包
! l7 s  Q- A: a4 K- i9 B/ G
4 p  K$ ]5 E1 ]提取菜单:8 }# W* `4 ?3 E4 {& r
=============' ?" w9 A  |) k4 t
> sfe m             ; 帮助
/ C( K& L+ u! V> sfe m src.bin    ; 提取菜单结构和入口6 i9 D+ {" S! K( M5 J- l) _

0 D; D6 T4 m7 E0 ~  s, z9 [  j5 p& I( ?  b" [# z
补丁:1 Y' p1 S) h% @) u: x3 K
=========7 K7 B# ?; ~+ N+ J5 ?
> sfe p                                        ; 帮助
4 T8 Q) p# Y. q( F0 N> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin! U) L- L# m5 |4 x* f1 s1 X8 B/ _
> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
0 ], x" x, I1 j0 E2 y$ A> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
! K( I; j- h7 o9 K6 U( G/ t
  L% D( ]: M: X" c: f6 \; Z& r$ ^
7 D) @# {' b" a6 d1 _$ z编译:
7 g' i7 o5 L, K) @9 o6 l. h==========$ y/ ^, O2 v# s" C; z) Q" V  U( q
> sfe a                                     ; 帮助
( S7 J) I! q4 l> sfe a src.asm                          ; 编译 src.asm' E1 g6 ~. ]& z$ O( J$ t' w$ k
> sfe a src.asm d                       ; 编译 src.asm, 完整输出
3 v# j0 \6 ?2 i- a> sfe a "mov r12, #1234h"          ; 单句编译
4 q6 W$ q2 Y. |6 H7 B# P. b> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译, G' Z- G& e- b" R; m. O
> sfe a src.asm,TST                    ; src.asm编译成补丁格式
" w0 p# s& W+ x, L0 p0 C> sfe a src.asm,TST p                 ; src.asm编译成补丁格式
- L+ Z5 C' D9 w0 U> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
7 h) k# M3 z6 X& l% Y% j8 T' H> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
. x# ~3 d, N1 i5 J* e- t> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。$ p6 [! z9 X8 P8 g' r$ L$ ]7 w

6 q4 p; {  I+ K# e1 V) j*) See Assembler Part to get more 'assembler' function detail
$ z# r/ k5 J% j9 y  R+ r
! z; j" B8 e1 r1 b9 q1 p  e  D
: |; \/ _0 J% K; q, p! L: R反汇编:
3 o# q% K3 }/ [& @( ?- E=============
# i$ P2 a6 b, Z! P" i& z2 u) n* N> sfe d                                       ; 帮助
6 ~9 b  m6 I; P> sfe d src.bin                             ; 反汇编 src.bin
1 S- j7 ?' E/ S> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin
" g8 b, W. Z1 S+ E1 r& H1 i> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
' s; C2 t0 u' x> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A000004 H; b/ H9 O0 N3 k) s4 t
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
0 l) H* r  u- b* E9 `! k( ~> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址
& E$ j; \6 F3 z, H; m> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件
" ^0 L' C6 i, ^; B( ^) ~$ A) q& [$ H> sfe d image.bmp                  ; 单色图形汇编输出% M8 K, B, [* [  y7 Y8 N
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
0 M( g& O( A% `( P9 I  X- A
! P4 w- w) Z) T( P调试:0 L, b, S2 K% d2 {' i& i7 g
=========  v( G% d$ Q5 X5 j; x0 \
> sfe r                          ; 帮助! g% O8 h6 A% E) ~& n4 z4 w
> sfe r src.bin                 ; 运行 src.bin2 Q- h$ F7 B8 D# I
> sfe r src.asm                ; 运行 src.asm 汇编文件
) E7 }% V& V6 Q0 r> sfe r src.asm ,n            ; 同上, 正常输出' g( @# A1 H+ a3 ^& @
> sfe r src.bin,200           ; 从 0x200 地址开始运行
3 F$ s/ C. L# ?> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200- V  n: T7 |. m* G0 o
> sfe r src.bin b00000      ; 以 B00000 为基址运行
7 |- K/ U; h8 }" c/ p+ v6 o> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
7 H4 g3 P+ U; {- |2 t" t/ o  D" d> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行) [. `) T, t% k% a  f
' X( R6 T/ C, W  u$ g2 p1 P

/ H6 Q6 {% G. D交互调试:1 ^- Z5 w6 g5 D1 V6 w! |* z9 v1 ^
======================( E6 Q- m- H& Q0 ?1 O) M5 Y
> h              ; 帮助! j2 A' f5 _, g. G
> g a00000   ; 到地址 a00000  x3 T: A6 i6 R
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)
, K) d! Z2 q% v6 t" y7 p- F> d              ; dump 内存 (现在地址)
* O5 ?$ O. D6 ~4 }( h. R$ b> d a00000   ; dump a00000 开始的内存
* M! r3 b+ a/ L2 E; E> d a00000 200   ; dump a00000 开始的内存, 大小 0x2006 D2 O! t/ y& a7 f/ g7 ], Z
> d r            ; dump 注册
4 W+ N7 y# f' n# e> a              ; 单句汇编
; Q+ G) M; j7 C) a  w! a. ?4 t> a c7d530   ; 单句汇编地址在 c7d530+ \: [; Q- g  t/ r% {, Y7 i
> u              ; 显示反汇编3 i9 M6 R! M1 y. e: C& Y8 X) ~& o
> u a00020   ; 显示地址 a00020的反汇编
/ |+ F3 K+ V0 o9 G  D8 g4 W! U> r               ; 在现在的地址上执行一条语句: d, C% t, M. O% d2 H" x- e. o
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)" R1 S% f( m* h) _  v9 m4 p2 i5 `
> r 0            ; 运行到返回语句8 B# @$ o5 K- V1 b0 }! Q6 G
> r -c7d580   ; 运行到地址 c7d580
4 `3 J& B  L* k7 @( w* E4 [: D9 I> q              ; 退出
/ {# T) f: N. B% |. ?+ |. F: V
, T5 a; ]& g* M* U7 `) T$ m+ y*) 所有未声明的语句都会改变当前地址。5 Y4 M, N, J8 o6 c
9 J$ }  e9 y$ r, }' W+ K9 o( s) f
3 r- B0 ~) C8 M
特别的助记符:7 ~+ g2 Z* o9 D+ F
============================
  E& W/ B5 _0 J& A*) 所有C166的汇编格式* p: B) L: h  \- \. e# h. L
*) 分号用于注释 (在一行的任何地方)* L9 o. i+ J% A9 W
*) 特别的助记符如下 :* l! Q' {0 n$ K+ B
   #include filename    ; 包含文件(各种定义)
% g, D7 u9 v1 \& B$ j" a5 k   #define var value    ; 设置替代变量 var = value# S+ P. a+ [2 V" M
   var equ value        ; 变量取值 var = value; V+ x" ]  f8 Y% ?/ Q' D
   db 'X',36h               ; 定义 byte(s) 数据区" R$ F! m. w" x$ y
   dw 1234h,0,'AB'      ; 定义 word(s) 数据区* n; ~+ L; N7 t: |- ?
   org                       ; 设定当前地址
' G  g' y& M3 |/ I2 ?* Q   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
! }( ^% z8 e( F8 e, ^0 m  r, [. ~2 `   end                       ; 结束记号  B9 q3 s  A. {' K
   ;#name XXX.string    ; 定义补丁名称 (XXX)# [6 {( Q$ P, X( C" a/ U
   '                   ; 注释将一起进入补丁
8 m' h* f* b% }   ''                   ; 注释将一起进入补丁,加回车) t; d- X0 c! a; J
   ';                      ; 以下内容将全部是注释,直到出现 ''
) U5 {, e5 ^( k  V: w( w9 x! N   ;'                      ; 注释将一起进入补丁0 p/ W: ]3 Y0 u& _
   + - * / %            ; 加, 减, 乘, 除, 求模 操作! ]; o8 O: d( N
   >> > < <<         ; 右移左移操作% b: g8 s8 r& F) o- s0 ?0 ~( w
   & && | || ^ ^^    ; 与, 或, 与非操作
7 |# }8 e) L5 |; L0 V7 g   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)
+ z" A$ A- F1 Z6 o" P% u   page(value),         ' ^& _2 u# v' Y0 ^/ j
   pag(value),
! T+ s7 J/ A1 J/ X" C7 x+ V   p(value)             ; 页值 (= value / 0x4000)
3 U7 [, \& t) S" a# \   pof(value),7 P$ D0 f; Z' N  S% l
   q(value)             ; 页偏移值 (= value mod 0x4000)4 v) J& z% z; `0 i+ F2 \
   segment(value),. O0 e$ |# C- A" W! c+ c+ q. F
   seg(value),: j4 t& k' e2 @/ |
   s(value)             ; 段值 (= value div 0xFFFF)# {6 p  X3 C1 ?9 q
   offset(value),
9 e$ D, U' o- a+ ]1 E/ O7 d8 w- s   ofs(value),
. f( V; I# G9 ]5 U  k   sof(value),
* k# n/ H) _& P   o(value)             ; 段偏移值 (= value mod 0xFFFF)9 v2 F' F4 A" k: A
; I% k- A% ^$ Z- e, b. t8 o( t
*) 例子:) w/ [7 l1 \& K5 O1 C) s

( t3 e# K) [  };--- Testing ---5 O. w5 ^9 p+ B. V9 u
. O# R) ~. H) J  B
base 0A00000h                ; 自动转换文件地址为 SL45 内存地址
# A3 E1 W# W5 M: u
6 B" g  f4 ~& M$ F0 S, g$ t#ifdef ME45
! z6 d% p- s( \: T" |1 u0 S4 @  #include me45.inc7 G5 g& g- [  \* d& r; n
#else
7 I( G7 V/ Q  ]  #include sl45.inc
0 y3 N6 F& Q5 M- _! a8 R( K# T$ B1 D  #define  FreeRAM 37h:3600h
( n6 Y8 }: W6 e+ F  C  #define  memcpy  0c7b384h0 g( K4 M' k4 S+ k# ~
#endif
9 @: L# Y) \" Y' @  x+ s$ X8 B6 o5 ^+ }5 a
;#name TST. Test Patch            ; 补丁名( M( v: _6 k2 s" [/ Y- G" T

% K. [7 S' X6 ^2 _  B/ u2 n'Firmware : sl45v56( l& E; E; v% O8 b! k
'Author : rizapn9 k- y# x6 J! C0 o; }7 @2 Q$ {
'Updated : Aug 18, 2004
( c  W- W+ J% |5 o! U7 ]) X, H2 H
org 0c7e000h+ U1 m/ _: x3 D7 B
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移) h% B8 j9 a4 l7 u
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
$ g( K) y) J5 I    extp  #p(data2), #1             ; 跳到 data2 页6 A# t5 ~+ n$ U0 w
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
8 e( X; N& ?  B    callr sub_1                            ; 页内调用
9 @8 Y  Z6 ~2 u' U  m0 B! q/ v    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'* K& f$ e7 u. L( E
loop_1:
, o) g9 _+ |: \& A" ]    mov   r2, #1234h
; y  |- k6 K- l1 ]( C& }    mov   [-r0], r2: ]- P" [: h" P. l, ?7 c0 b
    calls memcpy                    ; 调用段表示的子程序/ y9 u# L9 w) [8 `
    add   r0, #2& p% M6 \$ P  `2 r3 t# T" ?! Y
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处, b* }1 S* k0 T. B( |. k; ]. c
    rets
5 [' _( W  {- @7 J9 X5 }% K% L! l! a" ^
sub_1:7 {6 B# D( o$ t$ h( f1 ?2 W" N
    mov   r4, #1234h
; W1 u  e! D; X8 I. \) X; H% `7 b/ t    ret( \4 b/ f7 g  W- T' J% Q( T: `2 t

/ H+ q* k, Y9 I) ^$ Y& Idata2:
3 g; x2 t" o/ o. _    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区6 r5 ^# [  @7 t2 R' S7 E9 ?
9 Z1 ~* U' Y4 x0 p, I7 n, O8 U
end
- |, W$ M' x( y0 G( Y  `, J
* Y" Q0 l# X; A' Y;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
. D0 [% Y6 p! B/ M) z) |6 s, j5 m2 R1 P  n+ n9 E  l, u. W! x8 Q
Allaahu Akbar,/ L) G( h/ x# k9 Y: {1 h6 n
RizaPN <rizapn@yahoo.com>5 x  t6 o3 A  s2 \  g, l2 g8 t3 W
Jakarta - Indonesia9 @* |. J+ g7 D

' f5 j. q. H) S0 b& 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-8-20 19:52

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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