爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

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

sfe.exe的使用说明

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

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

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

x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
3 w" D, \2 e$ k7 u: w. n8 G& B4 [2 @8 P# k. I
简单帮助:6 U  z' W9 \9 o1 o8 I
====================3 Y2 x+ L" x7 U2 E& U0 Q3 Q  n
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
1 H: @4 f' W9 R( y*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.& g: n" L, C6 U6 S5 o1 c' b

7 v  n2 I- X$ E- Z' y
) u6 _& p9 X5 h搜索空白区:/ s7 g7 \" f4 L. C5 d
=====================, J/ m4 U, Q( ?7 b8 p% u" C. N
> sfe 0                        ; 帮助0 U  ]& |2 U1 c) R* t
> sfe 0 binfile.bin          ; 搜索空白区 (默认大小 = 0x300 bytes)5 R; [/ q; K4 T2 l
> sfe 0 binfile.bin 1000  ; 搜索 0x1000 大小的空余空间' x" R' Q* f; K1 o) b& Z
* h! X* a6 c: F8 o
二进制拷贝:
4 d  M: F9 D& d/ Y, [============( I9 [$ ~4 ^& p- @
> sfe b                                      ; 帮助: p, o* e6 B2 [
> sfe b src.bin dst.bin                  ; 拷贝 src.bin 到 dst.bin
2 y# b- R- Q; P  y> sfe b src.bin,20 dst.bin              ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
# H+ L% K% F; W& L: F> sfe b src.bin,20,100 dst.bin        ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin3 l9 z3 M; A( O3 n1 d, t0 N0 M& q
> sfe b src.bin,20,100 dst.bin,200  ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200/ F0 t) N) r* ~; N
. E- J7 W3 T" `; [. C
比较文件:# t( H7 g  G/ ~1 Q! D
==============) s% z, j2 n2 d1 K; k: L* K
> sfe c                                              ; 帮助
( n+ k) Z8 x% ]+ n5 U$ |/ v: R. Q) i> sfe c src.bin dst.bin                         ; 比较 src.bin 和 dst.bin
$ ^- Q$ C8 W) K6 _% a4 q9 @> sfe c src.bin,20 dst.bin                     ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
! r+ E6 a  V% {( w! S- z3 |> sfe c src.bin,20,100 dst.bin               ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
/ u2 S- W" Y: k# F> sfe c src.bin,20,100 dst.bin,300         ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
9 G8 i- A6 H3 a# g> sfe c src.bin,20 dst.bin a00000          ; 比较结果显示地址加基值 A00000
4 T8 o2 W' }$ z! s$ W* j> sfe c src.bin,20 dst.bin a00000,16     ; 比较结果显示地址加基值 A00000 每行显示 16 bytes0 `! h) O& g+ s# S) ^( `
> sfe c src.bin,20 dst.bin a00000,16,all  ; 两个文件都显示(不仅是不同处)  r) U% Y% i" A1 h) o) W
4 d: k* R4 s, a( \( S% v: Z
发现16进制的地方:: r  k) l! i5 ?# L4 F
====================
6 _0 E) P$ V9 t> sfe f                                     ; 帮助
& u. `2 S( @& w9 a- D6 Y0 G  g> sfe f src.bin e6,f?,,20,e6          ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
$ C. o  \+ y/ ~1 T2 g> sfe f src.bin,200 e6,f?,,20,e6   ; 同上,从 0x200 开始找
4 q$ v& F( u  U> sfe f src.bin e6,f?,,20,e6 10     ; 同上,显示 10 bytes
& g) @, T3 ?: u2 x> sfe f src.bin e6,f?,,20,e6 10,4  ; 同上,是反向找5 d8 |3 t$ O3 ?3 Y
> sfe f src.bin 1234                   ; 显示从1234H开始的内容, 80 bytes 大小
+ N/ T/ w2 F' U0 M% m; ~  |. i> sfe f src.bin 100:1000,8           ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
$ x+ d% f' |2 a' s7 W/ N1 Q* N
提取语言数据:" W& @3 S/ x# K
======================
' C) P2 V9 O5 R# x> sfe l                                          ; 帮助
3 Q: J; a! |) g7 q' ]> sfe l src.bin                                ; 提取第一种语言,包括扩展文本数据
0 ]+ ~; O& B; O% p> sfe l src.bin 200                          ; 显示 ID 200 的字符串
2 {+ N; A# g8 x- i> sfe l src.bin 200 2                       ; 用第三种语言显示字符串7 r; B/ J* P! q
> sfe l src.bin -1                             ; 提取第二种语言
. X4 F# G/ Y! S$ C  l' G> sfe l src.bin -all                            ; 提取所有现存语言& N. E4 x- E. D9 l7 g' A
> sfe l src.bin 'Testing                    ; 转换 'Testing' 字符串1 P( d! x  @9 J3 @
> sfe l src.bin 'Testing 1                  ; 转换 'Testing' 字符串( 用 ID 1 语言); F+ k) V0 a2 l6 {( W( g
> sfe l src.bin "+41 8C 91 56 4F"      ; 转换16进制文本
8 k& n* Q% m8 ^+ C9 d> sfe l scr.bin 200,"<95>Test"         ; 用字串 "<95>Test”更改串号为 200并生成补丁 9 r$ I; c0 @2 E' |( ]7 u+ O
> sfe l test.lng                   ; 检查test.lng 语言包8 S6 |# A" x7 r, n. `
> sfe lc test.lng                   ; 检查和更正test.lng 语言包
9 ]: s+ B) T9 V
7 p3 z8 b, p( ^: s# V/ p' K1 P* T2 a+ u提取菜单:& @; C2 r6 V, H4 ?5 y- b
=============' h; Q; O8 M: K
> sfe m             ; 帮助1 P2 y* t: [' z" P/ j1 m9 r
> sfe m src.bin    ; 提取菜单结构和入口
4 ]% f' i1 u( w2 b: e3 ?
( @4 ]7 e. y7 z4 Q* F# a
6 S% e8 G! W( L补丁:
/ c% o9 \; W2 v; M=========/ |; N; T6 c! `0 v/ l- V
> sfe p                                        ; 帮助4 C+ e) o, D2 Y' v
> sfe p sl45_44.bin patch.txt 44,BCI   ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
5 e! C! \3 K2 y; _- C, j! E4 G> sfe p sl45_44.bin p.txt 44,BCI,u             ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
, p, g7 f+ f" r) u1 m> sfe p binfile.bin p.txt 00,BCI             ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 0 o7 q: `8 n5 G# x- v% o

; U, g6 ^3 q0 o9 l& Y
$ R- I( O( \) T  m1 O8 y' N编译:7 f& Y# e2 K# ]
==========
  Z) A9 D) E" f> sfe a                                     ; 帮助; ]2 c& e- P) I( c9 [7 V  N& s7 r0 n
> sfe a src.asm                          ; 编译 src.asm
4 |$ \/ h# s' [3 n> sfe a src.asm d                       ; 编译 src.asm, 完整输出1 e. L8 r- A' ~# v1 j& u# t9 q3 H
> sfe a "mov r12, #1234h"          ; 单句编译0 {9 j+ i! ^! w2 R
> sfe a "mov r2,r1 ; sub r2,#1"    ; 多句编译
' j4 k' U6 @4 s( E2 R> sfe a src.asm,TST                    ; src.asm编译成补丁格式
0 ^8 b5 r# N: P8 l3 V+ {, R" O0 W> sfe a src.asm,TST p                 ; src.asm编译成补丁格式* [: t" C9 g8 u8 U3 ]% T
> sfe a src.asm,TST p,10             ; src.asm编译成补丁格式,输出10H行
' N" t9 ?, c) Z& {, Y> sfe a src.asm,TST p,10,a00000  ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000# v, a0 Q5 J/ w) n
> sfe a s.asm,TST p,10 org.bin     ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
9 T9 @1 p& H: n3 I3 u, {6 D# t# n9 P! j: q7 o% n1 v* v0 B
*) See Assembler Part to get more 'assembler' function detail
# ^! e, B+ l' b: C# }9 B) J. G8 m1 J. a$ J1 \7 H+ j

* ]7 A: B) x# H6 i反汇编:( @- r( r% E. `1 `' T" U
=============
5 J+ O; E% t! A/ U6 G2 Q3 W8 t+ c> sfe d                                       ; 帮助
1 B+ C$ I1 f! h> sfe d src.bin                             ; 反汇编 src.bin
& P) S+ b: ^' ^" T7 V% y: @> sfe d src.bin,200                       ; 从 0x200 开始反汇编 src.bin6 O. T5 x$ W( b7 T1 G  ^# y
> sfe d src.bin,200,100                 ; 同上, 但只反汇编 0x100 字节
7 G$ B% k$ o; J# L# U4 T# \  H0 k> sfe d src.bin,200,100 a00000      ; 同上,指定了基址,输出时将加上 A00000) E& J2 i" L7 S5 R
> sfe d src.bin,200,101 a00000      ; 同上, 但遇到返回语句将停止
* o2 p" V* q; T; S> sfe d src.bin,200,101 a00000,p    ; 同上,输出时不带地址0 u: t- ~7 A, i- N8 h$ v: p
> sfe d t.txt,27e000,101               ; 反汇编 t.txt补丁文件- J9 G; U1 B6 t
> sfe d image.bmp                  ; 单色图形汇编输出
: n1 F- X9 J2 r7 F3 {0 ~! ]> sfe d image.bmp,8,8 10,10,img1  ; 同上,从图形中x=8,y=8,w=10,h=10取出。/ f2 D. j: s+ m1 B* ?4 m, ^( o

1 p# A0 I/ M+ `2 n, a; P! B- ^调试:- r& _$ j2 d9 M# p( Y% |
=========
' Q# G3 p. t  ~6 W' A2 |9 h3 \> sfe r                          ; 帮助
- X' a; g8 v% D: L$ ^* V9 {4 {> sfe r src.bin                 ; 运行 src.bin. ~4 V" ^1 u& A% r' O, a( {
> sfe r src.asm                ; 运行 src.asm 汇编文件
( `8 F% j( S: Q! E( D4 Y> sfe r src.asm ,n            ; 同上, 正常输出' d$ |8 p/ ^! b2 E
> sfe r src.bin,200           ; 从 0x200 地址开始运行
" w% x" i* N" T2 E> sfe r src.bin,200,100     ; 运行 0x100 字节, 运行地址 0x200
8 `/ _0 G* L! ~3 d+ W3 b. v> sfe r src.bin b00000      ; 以 B00000 为基址运行
+ l! c6 a* v  z1 C9 y" S8 B6 p> sfe r src.bin ,,src.mem   ; 加上内存文件 src.mem 一起运行3 T3 T, N. n+ G9 G* `& K0 D" H
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, h$ F8 w; m. f* Z9 g. H- m
4 u9 f) B; U( _' G/ M' X* |$ W+ N& R
交互调试:
$ M  R9 F' D) Q1 v$ f' c======================% g! L. i  H: F% {
> h              ; 帮助2 s0 [, Z0 }2 h
> g a00000   ; 到地址 a00000
) I, f; ]9 N3 z% P> g 37:3800  ; 到地址 37:3800 (37*0x4000+3800 = DF800)& `& X6 `1 L: d+ G2 Y) {
> d              ; dump 内存 (现在地址)
  F$ p+ u+ K, X/ k> d a00000   ; dump a00000 开始的内存5 r1 V( o- x: r0 [5 e: K$ @
> d a00000 200   ; dump a00000 开始的内存, 大小 0x200! `/ i/ {# i, L# \
> d r            ; dump 注册
- n$ @; R9 N6 `9 V> a              ; 单句汇编
5 X. Z4 _. I# a) S* _* O; _> a c7d530   ; 单句汇编地址在 c7d530! x: C% Z; n9 U! L0 e
> u              ; 显示反汇编6 b* C4 `8 C8 h, y
> u a00020   ; 显示地址 a00020的反汇编; s1 m$ n) X+ b) H1 ~) L0 Z& |7 C
> r               ; 在现在的地址上执行一条语句
6 S, L+ ?6 B$ V/ o# O> r 1            ; 在现在的地址上执行一条语句 (跳过call语句)9 y( l, O4 u6 |+ {0 o. Y$ a
> r 0            ; 运行到返回语句
9 B# ]2 e! \+ F& T2 O7 T> r -c7d580   ; 运行到地址 c7d580+ \" Q! `% W+ y; t# C% ?
> q              ; 退出+ e# s6 I: z! c4 }0 q
% G5 P+ T9 A& T+ ~
*) 所有未声明的语句都会改变当前地址。- i- u- _( ^- K

8 K4 J! E# \  u/ H
% x" r9 M# O8 v4 c5 e特别的助记符:; c: o7 s8 t" `0 G% A
============================
( \! l3 r. a+ J0 }6 G5 f) p*) 所有C166的汇编格式$ P$ W1 V/ {: J' L, D0 p
*) 分号用于注释 (在一行的任何地方)
( e/ H' H' D1 F* R" K*) 特别的助记符如下 :4 [$ v$ t- \0 n* }
   #include filename    ; 包含文件(各种定义)& Z; k/ E3 ?3 @0 I
   #define var value    ; 设置替代变量 var = value
* S9 M+ L' q/ U+ D; l$ k$ S( E   var equ value        ; 变量取值 var = value
3 F: n3 ~/ \) P' L8 i: k   db 'X',36h               ; 定义 byte(s) 数据区
) L6 S. H5 p% U1 m$ m1 @   dw 1234h,0,'AB'      ; 定义 word(s) 数据区
( _3 c0 }/ \  }) N   org                       ; 设定当前地址$ \* m! l# D6 e9 g
   base                       ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)* Y7 W. e4 t8 K, c" r+ O
   end                       ; 结束记号" @9 g) V* M# m4 l  H6 \) B
   ;#name XXX.string    ; 定义补丁名称 (XXX)% a) ]- u3 C, F6 t
   '                   ; 注释将一起进入补丁9 d* q, f! @% r( `6 g( ~0 O. m
   ''                   ; 注释将一起进入补丁,加回车" f! e1 N1 U# p0 L7 B
   ';                      ; 以下内容将全部是注释,直到出现 ''6 T" D; `' |3 J1 R. h1 u
   ;'                      ; 注释将一起进入补丁
# l# b0 k4 A0 j( Q/ B# a& _   + - * / %            ; 加, 减, 乘, 除, 求模 操作$ a) O' L" g- ~. Z6 z% c* G
   >> > < <<         ; 右移左移操作
0 B- T: Z9 @  G! W# v   & && | || ^ ^^    ; 与, 或, 与非操作
: S0 W; ?; z4 W5 }2 C% q   val1:val2              ; 页表示地址 (val = val1 * 0x4000 + val2)5 W' Y  E4 w  c, m0 `7 G
   page(value),         : b3 f! j: h: J& \4 j( I  o
   pag(value),
9 C" b( C) k$ [( c/ b9 t   p(value)             ; 页值 (= value / 0x4000)
0 U3 }$ A$ E0 |   pof(value),
8 G4 b/ p: F2 Z9 X3 e/ e   q(value)             ; 页偏移值 (= value mod 0x4000)! e( L5 t* ]$ q; I6 Q
   segment(value),  m$ [+ _7 c" b- s! S! B  d+ h
   seg(value),) X: c' }# p$ H8 ^
   s(value)             ; 段值 (= value div 0xFFFF)0 ~/ L. F* J' e* _, B/ e) ~" U) O9 M
   offset(value),1 u% P/ g, O9 y
   ofs(value),
$ J0 ?( [: G  d   sof(value),. W5 Y$ ^# p! I& R; k3 T
   o(value)             ; 段偏移值 (= value mod 0xFFFF): O9 I  k5 e# B: ~" g8 ]* y
: R0 X: ?7 q1 _- Q7 q- j
*) 例子:8 e) A: P1 P8 o2 Z7 y8 Z
3 r7 h5 u- A4 ^# [$ h
;--- Testing ---
) u$ B7 a8 ]9 x* G
" o3 M5 |4 ]7 ]; L: n' dbase 0A00000h                ; 自动转换文件地址为 SL45 内存地址
' p  D9 o& `/ n2 V; j& a
, D& }6 y' C1 X8 _' ?1 x; m3 ]9 C#ifdef ME45
* R' q( U" n, y  #include me45.inc$ R, e# l+ W( q' T& r
#else- V& t4 F% D: v; \6 M
  #include sl45.inc# r# \2 [4 Y2 R1 Q
  #define  FreeRAM 37h:3600h9 p1 c9 F( Z" Y0 ]# L2 e( d) y
  #define  memcpy  0c7b384h
. ~( A) g9 B1 c$ M& i#endif1 _' t+ n& M3 A% u; c" b

( p* e: W. G9 L;#name TST. Test Patch            ; 补丁名" b$ P4 g$ N$ X+ z4 y% d/ {- j

( Z8 U# j- S) |# l/ D'Firmware : sl45v56
  m* b0 V1 O# E'Author : rizapn
8 L7 L% y* }! y' {, B'Updated : Aug 18, 2004
  E: t: k' G% D( |* A
* [8 J# R# x. G+ Forg 0c7e000h
. A: X: T0 l8 b$ ^    mov   r12, #q(FreeRAM)        ; 得到 FreeRAM 页偏移$ J+ k+ Q! F0 W; C- |/ ~
    mov   r13, #p(FreeRAM)        ; 得到 FreeRAM 页值
% A0 o6 {1 B, |# B8 A) q    extp  #p(data2), #1             ; 跳到 data2 页7 z: R$ c1 S+ R' v! D7 k" D& x
    movb  rh4, q(data2)+1          ; 得到 data2+#1h 地址的值(为 10h)" o. _+ x8 t; A( v7 S1 w% J
    callr sub_1                            ; 页内调用
! p8 ?5 w8 a  T4 ~    movb  rl2, #'A'                      ; 得到 ASCII 码 'A'& n1 d; p9 J2 L2 `$ N6 W3 P; Z
loop_1:
* C3 U; `6 Q  d6 ]" @: A) n- E# ^    mov   r2, #1234h
0 D' N% g% N+ v' S0 {% s( k    mov   [-r0], r2( v7 u' {! `0 t. F- q8 U0 }
    calls memcpy                    ; 调用段表示的子程序% T# U) [6 s8 u
    add   r0, #2
+ N3 @) |) f& S' B( J/ L/ t0 I    jmpr  cc_NZ, loop_1           ; 跳到 loop_1 标号处
2 {$ w4 M: Q1 ~" U% g    rets; d" W7 t$ H; e# {& o4 g

* j: M+ F; `+ a( x( p/ C: qsub_1:
+ X- m! t- ~% D5 z0 u8 J    mov   r4, #1234h5 ~" w; a0 \! ~, W2 S0 h
    ret
3 C2 l& ?4 w  R/ c9 l* q  O" \$ n3 F7 U
data2:+ d4 X3 B" c1 b% a9 A
    db    'A',10h,'Testing',0     ; 定义 bytes 型数据区
8 C$ J# c4 \' Q* o* q/ [  Q2 K" W, H, }: ?6 f0 {8 E
end9 R9 x4 ]  W9 r0 G5 V
) }- g& J! c' ?; l
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
, Z( V/ o& w! z+ C' J  d  Z% c) H% {6 Z- O0 [% i' T: i
Allaahu Akbar,
; H4 M9 |2 W, n- q; {RizaPN <rizapn@yahoo.com>
4 [" i! [9 P% E' sJakarta - Indonesia6 \5 i5 e' |. H3 i
# z$ h" {3 p* {+ S8 R. M6 S
[ 本帖最后由 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-20 08:52

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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