爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:6 \& L4 u) r/ e& a6 y9 P  \3 N5 f; }
% E  n+ P' }" n7 u* g4 S
简单帮助:$ p3 K9 P2 K, L6 k  _
====================; V! q& h1 ?! M6 s( `8 W9 Z7 d
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。( y3 v1 P  M" u& K: o+ M
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.; h2 n4 t3 i$ Z

1 ~! `4 [7 t  S7 J- M4 f. M
) ~! W. P3 y& M3 Y' X4 R( ?$ v" y搜索空白区:
% y9 F* K" b6 i. @; w2 R=====================
0 s8 Z# b, `: ~+ `> sfe 0                        ; 帮助& Y! A' T% s& Z
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)6 E2 z5 j5 |! d: {8 }9 g
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间/ \6 \, }+ p, n  o+ N! T
& ?  N# |) {" B! J- I# ]
二进制拷贝:( ?/ y0 N6 F3 e5 z5 T7 Z1 a
============
9 R8 w- o1 p" P% A> sfe b                                      ; 帮助
, {7 @1 ^: Y( J' w" K/ s! G; h> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
5 p; S( ^2 r5 q> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
; m8 G0 Y1 l" x% e3 n> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
% q1 U! [( n  S7 ?- d: L> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200( B# d# r1 ?5 j% I

  t* m: @, P; n比较文件:2 Q9 @. n1 C+ w( G
==============
1 v" B4 k2 n* z8 {( f9 v> sfe c                                              ; 帮助0 O  G, E$ H7 k% \# {% u
> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
$ A1 I8 K" E2 ~, P2 V> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
, L) u, x9 {: G. W> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
" w2 I3 P6 @, N, i" ^> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )+ F# P) I0 @4 f$ L* l: L
> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000- u/ {1 U8 H: W4 m. V7 K; D
> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
- P% ]0 ]/ x, e  G* p! O# h> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)
$ K% X# ?, G" ~/ @7 K8 d
# @& Y& t1 q1 n* ^7 ]1 l) e发现16进制的地方:
0 j" Z7 P0 i/ ]# G8 i" Z( p4 u$ Z+ @====================
8 n0 ]$ ~5 k: `5 E( _> sfe f                                     ; 帮助
- j& x, t" ~  z" _> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
/ F  {; Q2 ?; m' b7 t' D> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
, g1 @4 O" h7 `% q> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
% o% Y3 g6 d+ S; A> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找
- b; E% g- Y4 y+ {> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
+ q) P/ i1 o1 p( o' o> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.. n# k# m& f# z& I! a4 U

$ b$ D3 e! ]9 t3 m提取语言数据:
3 K! ?1 Y7 q$ j9 o( Y======================
3 O7 G* m- H% j) }  A> sfe l                                          ; 帮助1 M; R+ t) k! }& T8 S) u2 R
> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
% K" G% H1 x6 q+ ~5 _! P" d8 v" d5 e> sfe l src.bin 200                          ; 显示 ID 200 的字符串! u9 H/ U: x  m+ j2 G* y# i4 b& |
> sfe l src.bin 200 2                       ; 用第三种语言显示字符串
& ^+ ?) o+ A' h# @2 }+ E$ l' w> sfe l src.bin -1                             ; 提取第二种语言* p* P0 R3 h* E& p; A
> sfe l src.bin -all                            ; 提取所有现存语言
, E2 x5 x# D% R9 E; R. Q7 h  T> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串
, ]) X) [  k1 Z7 t0 r* y> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言)
* F, y& p/ q% R3 x6 Q1 s+ W. W> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
' q8 G* C" h8 }" e, X' Z: M0 }> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 8 K! `: O. X, v8 I( ~
> sfe l test.lng                   ; 检查test.lng 语言包. p4 n4 o* o4 Y! W! Q4 a' b
> sfe lc test.lng                   ; 检查和更正test.lng 语言包) E' s6 j. ~, i* d+ P' e

3 N6 ~4 ]7 V3 @提取菜单:# u. R: X+ D) k/ e
=============
6 q' `8 C' M  A4 m6 ?> sfe m             ; 帮助' q" \. x! S! q
> sfe m src.bin    ; 提取菜单结构和入口
6 `: Y* i$ [( }( a  n) q, M
. l# o, N' S8 D% x$ _' }" K5 b  K' M5 N5 e) v) r) B& ~
补丁:& T$ @: M. a* E
=========
& t2 e. `  e8 o9 C8 r4 C- ~> sfe p                                        ; 帮助. k; Q6 q& D0 m: Z  y
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
  G. q  D5 _) S% M& \4 Z& v$ }> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz  \# O. O% ~9 P! m
> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
5 Q6 V4 A: H% C3 ^& T/ B7 H: m; a6 X6 {  v& v6 A" H4 G

2 E, w$ Q4 G. M0 E; c. R编译:) e& m; Q2 u8 _8 i
==========
& h3 m+ s  G, o7 }> sfe a                                     ; 帮助
! _3 w' \5 [$ o' a0 T8 [' q8 e. I> sfe a src.asm                          ; 编译 src.asm4 D; |( k, L: ^
> sfe a src.asm d                       ; 编译 src.asm, 完整输出0 q5 Q! \. i1 R% k6 D3 R
> sfe a "mov r12, #1234h"          ; 单句编译7 I- n7 ^8 V$ f0 K
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
% s3 X" R) B0 E: ]+ [, J. |0 E/ B> sfe a src.asm,TST                    ; src.asm编译成补丁格式
' a+ I" M6 j, u$ J% a> sfe a src.asm,TST p                 ; src.asm编译成补丁格式' q2 g4 a% R, y
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
: q5 X& y( y" a8 ]> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
' b% x9 C1 @; m4 S4 U> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。' W9 B- v2 g4 R& O9 T6 G% y/ \

( w5 C/ u* }9 M*) See Assembler Part to get more 'assembler' function detail; D& M) p' K  e8 ~7 }7 z5 x
( X, C1 ]6 Y; ^
$ z+ g; g9 l0 G, ]9 w8 m( v; @/ N
反汇编:- K; X8 ^& ?# ]0 ]
=============
6 u7 F3 l, _1 ~7 d+ S8 B% S+ I6 s6 X> sfe d                                       ; 帮助3 i: }" c: F/ T6 V& X! h
> sfe d src.bin                             ; 反汇编 src.bin
+ W4 ?* P6 p$ D1 y> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin& ~4 h. \- z- U- B+ ~* A7 _3 @/ Z
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节1 E) w7 o5 I7 S; u
> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000! e, ?0 O2 |! z, B8 s% `% N! B
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
' J3 v8 o! v5 Y9 {; d> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址0 r0 Y; }) [: y3 X9 O
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件9 z7 H8 j% b( b# l
> sfe d image.bmp                  ; 单色图形汇编输出* `, S- n0 X  {- g- G: G$ m
> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。
& W. W5 e+ @0 V$ f/ ?3 ~, Q; W% {" i3 P" C$ P
调试:
/ i" ]0 E( R' ?. X=========& ?- a! d* @$ L4 v) m( Q$ t
> sfe r                          ; 帮助3 a" J( O, X' H- c1 R+ H
> sfe r src.bin                 ; 运行 src.bin1 L2 y! N! X4 U- M4 \4 P) g
> sfe r src.asm                ; 运行 src.asm 汇编文件
6 N8 {4 T- l6 x! d; A+ @> sfe r src.asm ,n            ; 同上, 正常输出3 x( E: Q8 d, ^$ {: p  }" i
> sfe r src.bin,200           ; 从 0x200 地址开始运行
* ~5 d: n# e) ^7 I) q2 }> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x2005 X6 M' p4 ~* r8 G2 u9 x0 M
> sfe r src.bin b00000      ; 以 B00000 为基址运行. i  e  t5 `. x0 j
> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行
- u: b7 P6 H/ q- ~# v> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行. F; M( B4 Q4 k& r  X, n7 J1 N

" y& Q$ ?/ O* l5 k2 q9 v
  S/ Q0 `( B- h. g+ J& T交互调试:
- [1 J( T" C$ Z$ s! K4 J" P======================
9 H2 ^8 O" @3 N( @1 t& O& X# s> h              ; 帮助( b6 M* j4 K, y0 n4 g
> g a00000   ; 到地址 a000003 t4 ~% w7 M  a7 A
> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)! ^4 [+ n4 ]: H$ ^/ y
> d              ; dump 内存 (现在地址)+ q" j% S% {5 S% }; ~
> d a00000   ; dump a00000 开始的内存
( @! f3 P; V; X* G0 _5 l> d a00000 200   ; dump a00000 开始的内存, 大小 0x200. Z  [: J# A; b: G+ A; j, q
> d r            ; dump 注册
$ }5 A) k; H, T$ [0 ^' b5 e> a              ; 单句汇编
$ F6 B% D( ]" U" R4 ]- {> a c7d530   ; 单句汇编地址在 c7d530
& ?! }# b2 z& N# c0 @/ k; E8 U> u              ; 显示反汇编7 N' s$ I2 U" V- ^: K
> u a00020   ; 显示地址 a00020的反汇编
; ~' S' Z% c. V2 c# m0 i* N> r               ; 在现在的地址上执行一条语句1 m: \7 C7 R! c+ E* u! |# _
> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)' m+ B/ P" f  y/ U
> r 0            ; 运行到返回语句
4 f- u9 L+ V) }> r -c7d580   ; 运行到地址 c7d580/ P  X0 ]2 d+ P4 `
> q              ; 退出
3 w7 A3 W$ p9 V1 i$ t9 B0 M
3 ]5 i6 Z! ~# f( d& H6 F- _! K*) 所有未声明的语句都会改变当前地址。
7 i( Y4 P& a) [3 P
) R' i) @9 m9 ~! w5 X/ }
/ M0 i" |' l1 `; N1 ^# R特别的助记符:
9 I) f' |0 q5 Q& D. G) `============================2 |+ E8 T; v0 v: F" n
*) 所有C166的汇编格式: d' q* R6 w& z1 F; u5 D3 i
*) 分号用于注释 (在一行的任何地方)
$ f0 b. d, `4 v/ A*) 特别的助记符如下 :2 J" L5 ]6 W: d" ?0 P) K
   #include filename    ; 包含文件(各种定义)
: R" T9 f1 a5 I8 M8 I   #define var value    ; 设置替代变量 var = value
2 c% k- G3 q3 V$ Y  ]9 C$ m) l   var equ value        ; 变量取值 var = value
0 U2 ?; s# I& R7 F7 W1 M# o& s   db 'X',36h               ; 定义 byte(s) 数据区
! T5 B' E8 W$ i8 t5 x  b% N   dw 1234h,0,'AB'      ; 定义 word(s) 数据区  Q8 b, l! _/ I4 q- b4 E: P
   org                       ; 设定当前地址
. o2 o+ y7 l! d" [2 t1 g0 i; i   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
5 t$ `  ^; i1 d$ d! q( v7 I* t   end                       ; 结束记号6 _3 u& I9 C  ~5 i. e/ T
   ;#name XXX.string    ; 定义补丁名称 (XXX)" y; s; z0 B' w* X
   '                   ; 注释将一起进入补丁$ _7 ]0 E; X/ m/ K! X8 {6 b
   ''                   ; 注释将一起进入补丁,加回车. P; r5 ]/ Y3 b2 N8 {
   ';                      ; 以下内容将全部是注释,直到出现 ''
4 _+ ~: H4 B2 y$ b. z3 S/ x6 F   ;'                      ; 注释将一起进入补丁
4 D3 X* y7 T& _# r" ]   + - * / %            ; 加, 减, 乘, 除, 求模 操作
2 }  |& G& g. q   >> > < <<         ; 右移左移操作! I$ W+ X+ _8 @- R) |  v/ N7 C
   & && | || ^ ^^    ; 与, 或, 与非操作
9 D4 \) O6 e) ]3 c) q6 r   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)1 k2 S6 c) K1 s
   page(value),         ) I" ?( U- r" A( X" x
   pag(value),
! c0 |, X( [/ [0 ~2 y) q9 l9 o   p(value)             ; 页值 (= value / 0x4000)
8 W( i* O7 p# T* _* c6 t' ~2 M   pof(value),
( |8 G2 Y8 o3 ~   q(value)             ; 页偏移值 (= value mod 0x4000)* O! k: \( y0 P" J# h5 _) X
   segment(value),
' ]& N' Q0 x  a( p; \   seg(value),
. t# n" k' Q/ j7 w   s(value)             ; 段值 (= value div 0xFFFF)
/ y6 b- y/ L. J   offset(value),
+ w2 z6 o+ [6 T: X7 u, e- |& c- F   ofs(value),
$ v, H% [3 {# G1 l# Y- M! m" z   sof(value),
6 a' W* }3 t8 ^   o(value)             ; 段偏移值 (= value mod 0xFFFF)
" Q1 j: ~1 B2 D; b% o2 l) ^" _) Z" ?0 {7 ^  u, ]9 C
*) 例子:
; B- K4 c/ J; P( X* d9 c, `
' [( w' {) p  @8 s0 R;--- Testing ---
" ]; C. e* d5 G3 o) d0 ?- U+ ]
. q/ x9 Z5 B3 ~+ j! cbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址) C, G* L0 r. d& R/ q  D0 d% U

2 A' {4 A$ x9 w  u#ifdef ME45+ ]5 S! L9 k1 n" X& `' ~" t
  #include me45.inc6 U% W) Q' D  X* n
#else
  g9 e% H) l% T, p$ c0 x% ~  #include sl45.inc) j5 u1 T/ L9 Z$ ^8 F6 N
  #define  FreeRAM 37h:3600h
8 m( {7 v  f6 m' n* W7 r9 Z5 \  #define  memcpy  0c7b384h
* y8 r% _9 i6 q, |$ P% T#endif
# M4 y% X2 ?7 L! R: `1 l+ O3 Y- {. K. ~$ S' k
;#name TST. Test Patch            ; 补丁名* Y: |$ L8 x" n* [$ o
7 Q  n  K( N" h  p  v5 D! v
'Firmware : sl45v56
- b8 U% T. R- L) g5 }'Author : rizapn
' i$ ^& m* x6 M- h5 F'Updated : Aug 18, 2004/ r0 t$ a  }) U; T( y7 _

5 J& H6 ~+ y! ~org 0c7e000h; a* p2 Z; b7 _5 Q" H' z. Y
    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移
* f& o* l/ {3 d0 q    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值/ D  u- t6 W0 N5 ~4 D+ o9 }: Q9 q6 A
    extp  #p(data2), #1             ; 跳到 data2 页
5 O8 w  y' V+ ~9 O4 O' Q  r" O4 u    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)
8 b. x$ G5 C9 g    callr sub_1                            ; 页内调用
' W4 N5 s! Z8 A% u    movb  rl2, #'A'                      ; 得到 ASCII 码 'A': a, |( E4 N3 c( q) Z& X$ \
loop_1:
2 E( Z  w/ \0 c2 D, q+ x, g    mov   r2, #1234h* S4 A; Z! @3 I) a: Y4 Z  r
    mov   [-r0], r2- C* e) i- r; P0 \
    calls memcpy                    ; 调用段表示的子程序
8 L3 X. I' y0 k% [; M( Y" I; ~    add   r0, #2) `' F" s" h" i
    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处% z0 T" ]% |6 s2 w
    rets
8 Y: G% I2 y9 R9 a+ s) J: o" m
$ Z9 l1 L) f1 A6 W4 [# Isub_1:
4 }2 z( E) y: L) e8 u( p    mov   r4, #1234h
( q- B- b( p2 c3 z6 ^9 \    ret
+ y0 [  l8 {5 H5 S0 t$ p( X9 f6 F5 F0 _# R+ G! O- O  q8 Z
data2:
  v, A, Q1 t7 _+ M    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
: \$ ^4 D* T& D: Y! [/ b5 F. @7 A6 T# F4 y3 V! H0 P+ g/ E% C4 |6 }
end
5 H' ~& D& W) ?, e) S
! F  L$ |3 B9 z0 \;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 l) R+ Q' d* C3 ]& ~
3 A6 X+ R8 o9 a3 ~# W! lAllaahu Akbar,; L/ J- B2 d6 X5 \
RizaPN <rizapn@yahoo.com>
, V5 {2 v0 D2 P4 XJakarta - Indonesia
7 }3 b7 t: O' }( C; d# K1 B  G- Q) f- ?' r/ G# c7 r  [# l
[ 本帖最后由 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-5-29 02:24

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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