- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
: T5 p4 }, \( H# d3 D7 A( m* F) m v; K/ w) x& r
简单帮助:
8 W; d: Y; D. \9 P( \0 e( f# `+ l U====================, S) i! o" g" z; {1 \& i4 z9 z9 F3 b$ U
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。: n2 D6 H# P( N0 Z$ r+ q
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
3 C. ?2 K0 [7 @6 ?# v. l5 ~$ H) F: ^7 N5 F8 ^; k' Q; e
E& ^8 f2 v, U搜索空白区:! l" w* u: e Z2 E, O
=====================5 d' C* L n+ b0 R: w2 B8 S
> sfe 0 ; 帮助
$ i# i* e2 K+ z* e% V# H> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
# ]8 N) c5 D% u* p> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间
( z; x# |: V, Y2 Y+ }' Z3 @+ C) G! v0 g" B: M! J0 b4 s! @
二进制拷贝:
( W( W- r1 `. ?# v# m- \+ F============$ ]. K$ \; e& k
> sfe b ; 帮助
4 a* v" X4 U* j. a+ s+ R$ Y> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin
3 Z' Z3 G1 L8 y( r3 n! S+ h> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin6 _ d. _8 P8 y
> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin" u5 G. _& y* d
> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2004 q+ n, S, r# f. u0 o
5 I4 c( p4 V- u2 M$ y3 G
比较文件:
: U6 S4 i9 t8 |2 U( j( K5 E==============+ z# |: o8 K6 q
> sfe c ; 帮助
b! b" ?+ Q' [5 `& ~> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin* `% ]4 T* o2 ?( V& i
> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )+ ]" S( w$ I$ ^, \7 R) A
> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
e4 B) ^, j8 J6 W M! q) D> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )* r4 s3 m$ a1 T/ r9 P B$ K& i
> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A000003 Y( o9 U0 h) n$ o) t; I0 Z" O
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes% A! c) f7 _- m. g' Z( P
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)
6 S+ E% b+ C- \0 u+ w" y. _/ t6 W* u( }/ ]2 [5 Y
发现16进制的地方:6 @3 V9 [# _0 P* V" T# O+ p
====================
9 d* r8 v# I6 {3 p: @1 R> sfe f ; 帮助- r: c. M3 u2 F8 R$ _8 K- K' F" r
> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
$ [) p5 x' D# ?1 k> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找& ?% ~8 D2 T9 I
> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes' K D. r% Z# I+ t+ l' `
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找' X9 K A/ Y4 ]
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
' R; V% ]$ ~( g8 r! E> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.8 R& U. q2 P" P# j& q) I c
: _5 L* h# W9 K: N& J
提取语言数据:4 T& y( C# ]( j
======================6 b- f. H* \! N, D9 `, [3 J# [
> sfe l ; 帮助+ P* l5 F, m. W# h
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据
$ Q3 g' v/ d ?0 h* |> sfe l src.bin 200 ; 显示 ID 200 的字符串9 L5 l. I/ U T: j! X7 N
> sfe l src.bin 200 2 ; 用第三种语言显示字符串- \# Y1 d2 `, @+ p8 I( b- m% `
> sfe l src.bin -1 ; 提取第二种语言$ f' u- c! t+ ~8 V W' B: }
> sfe l src.bin -all ; 提取所有现存语言
, H" z1 ~1 v! a( }> sfe l src.bin 'Testing ; 转换 'Testing' 字符串* E9 b) W3 s6 }7 n8 u# w6 `
> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)/ | L4 o" _: W2 I
> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
. N' |2 \8 n5 `' Y> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 * [6 m$ D% t1 s6 P r8 `7 }% M2 a
> sfe l test.lng ; 检查test.lng 语言包
9 s f8 n$ W3 z6 \$ J5 b1 F3 h> sfe lc test.lng ; 检查和更正test.lng 语言包# @; h4 T! d1 Y& J8 y& \, O1 k
: @2 x: `+ z$ Q h' _/ d
提取菜单:& R% q3 w% U( m" ~
=============8 j- b9 x, Y$ p% h% [" b9 d
> sfe m ; 帮助: H; F' F6 c/ }
> sfe m src.bin ; 提取菜单结构和入口2 Y, p0 L- j- V! O: U
% ?7 i! b$ ~4 P1 S7 X. m% C
+ {$ l4 d4 {2 }8 o1 W1 `补丁:* `2 _& B/ j1 [+ u8 T
=========# t N+ i2 |' D; Z
> sfe p ; 帮助
6 t) h( U3 N( e$ N! g0 b7 L> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin: a4 Q v8 [5 E8 c
> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
' l" _5 \6 H, n# Q( U9 ]$ U9 ?( Q> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
: x! U0 ~* o4 R2 ?/ i4 B: L8 f8 t
# e( m* f/ j% X编译:
2 c0 p+ q3 D& ]==========9 n! e3 A! i% f3 L
> sfe a ; 帮助
& D% r8 S: g6 h; A$ A6 ?- }> sfe a src.asm ; 编译 src.asm9 i4 q& i. G" r. _
> sfe a src.asm d ; 编译 src.asm, 完整输出
/ M/ s5 `0 O/ j> sfe a "mov r12, #1234h" ; 单句编译
! N; g' {: B V" }$ R* w> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译0 o+ j( H J W0 U8 Y) r8 s
> sfe a src.asm,TST ; src.asm编译成补丁格式
! p/ R& ~, D; h7 o, u7 T> sfe a src.asm,TST p ; src.asm编译成补丁格式6 J, r5 W# s. o% ^3 [3 p; M
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
9 K7 p- H4 ~/ |9 m9 F9 b* O> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000; J: m+ p/ ?- Z0 L: ]. Z& A8 v
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。" J0 W( k! g/ \, ^. ?
! L5 U. g. y$ E
*) See Assembler Part to get more 'assembler' function detail& x1 ~& h1 D& R/ d( }, J: C3 I+ y
( U0 ?& ?- j$ P4 p* M& a$ p
. l7 B, ]$ L% n# {" j7 j" |反汇编:
; u7 ^8 E& l; @% U* x=============9 G: H. M) ?. X- x1 v0 d% W
> sfe d ; 帮助- h6 ]% T- L1 k( k2 O8 O9 r
> sfe d src.bin ; 反汇编 src.bin
. W) s K* U! f+ u' C9 a: h; \0 C> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin! s. G, U5 q- h( K( H& \ e+ ~
> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
+ j/ U8 |+ ?. ~' p. ^. M> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A000003 c/ P8 B* c( w
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
5 q( P q+ }( A9 t> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址- e% D+ S' I, d. r! H
> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件6 I3 U5 S+ x! @
> sfe d image.bmp ; 单色图形汇编输出
' a$ F6 I( Z5 j. g( S7 t> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。
b% k2 f' W% y1 p) |" H+ t6 M: i7 W
9 S* ^$ x, I4 p [1 X$ Y# `2 O调试:
% _% o* t$ S- K0 R4 S. Z=========
" [" p- W! L p' W9 K. U7 R5 k I! J> sfe r ; 帮助% K, [7 {: x# i: h+ \9 K
> sfe r src.bin ; 运行 src.bin
4 V" q: L: W1 ^! ?6 P> sfe r src.asm ; 运行 src.asm 汇编文件& m7 |5 Z, j" _% r7 c
> sfe r src.asm ,n ; 同上, 正常输出. g0 g6 r6 E9 b" ?- o3 f+ M w
> sfe r src.bin,200 ; 从 0x200 地址开始运行
' A- U/ g ?) g4 o; {: I- I+ `> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200, j( v Q [( c( k4 D
> sfe r src.bin b00000 ; 以 B00000 为基址运行
7 J3 L- Z4 `, {> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行
. e2 ?+ a$ `* z6 b2 l> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
/ F0 d( z$ J% k! F" q5 I. c; j# r: T2 X9 Z$ T
7 S7 K& P. L4 _& S3 B- q1 n
交互调试:
9 Z9 Y" p$ V9 z q& c======================
' u/ {9 o8 F/ y> h ; 帮助9 H5 V. i/ z* L$ s
> g a00000 ; 到地址 a00000, l$ r3 h6 { ]5 @, M$ o/ P4 m+ n
> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)7 s" _/ V- ^. w' ~
> d ; dump 内存 (现在地址)
1 \+ i& i7 \7 O> d a00000 ; dump a00000 开始的内存
2 V: T( G) p: a' t9 X1 E> d a00000 200 ; dump a00000 开始的内存, 大小 0x200
, x6 y4 T4 ?8 W> d r ; dump 注册
6 A& M. B# w6 @; S; O4 d> a ; 单句汇编; c3 L, ~/ M( Y2 F, [4 H& ~
> a c7d530 ; 单句汇编地址在 c7d5301 V; q2 M9 D/ ~' [3 M, M! A
> u ; 显示反汇编
0 s9 N" l+ m+ H9 M% c> u a00020 ; 显示地址 a00020的反汇编6 F" w2 d" `; p8 Y: ]% X% X2 ^
> r ; 在现在的地址上执行一条语句' l1 h1 w( ?) [) ]3 H( c
> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)3 ^7 ^; f& Z9 b
> r 0 ; 运行到返回语句
: P. [+ d$ ~" ^" X i! r> r -c7d580 ; 运行到地址 c7d580
, A9 q- O S U$ Q( R7 V; T0 F, Z> q ; 退出
" r2 Q* Q6 M) T5 k; T
1 i4 [0 Q( d: ]*) 所有未声明的语句都会改变当前地址。1 T( j6 @4 E8 b4 U4 r; B0 J
7 S, S# t1 H' r* O* r
; h, n1 A8 F& n! e特别的助记符:
( f- j1 C7 z5 m9 E1 G============================+ ~# w: H6 D3 w, Z5 R; L8 j& l
*) 所有C166的汇编格式- D" O7 ?/ r! e3 I
*) 分号用于注释 (在一行的任何地方)
; ?8 I% v1 x- F$ i1 J! T*) 特别的助记符如下 :7 b* ?0 u8 u" b
#include filename ; 包含文件(各种定义)
5 b, U3 _" _9 y4 U3 V/ T# s4 F2 { #define var value ; 设置替代变量 var = value" B# ~8 F: t& S1 I
var equ value ; 变量取值 var = value
7 P- X. S1 P8 C% @, E3 ]5 P db 'X',36h ; 定义 byte(s) 数据区
" u; b; q% E; u, P) o% G6 |- R$ S dw 1234h,0,'AB' ; 定义 word(s) 数据区# H" Z9 V/ I! a y+ H
org ; 设定当前地址
) B) M( d% z; s+ _' B/ ]" v& v base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)/ R! ~& O9 o0 `+ A
end ; 结束记号! }( }' l8 v0 {# }
;#name XXX.string ; 定义补丁名称 (XXX)) G6 Z5 Q, J; x1 O/ D/ N4 ^
' ; 注释将一起进入补丁0 ^ U0 [0 n$ P, @+ A- l+ i
'' ; 注释将一起进入补丁,加回车5 f# u4 \2 s) d, _6 n _7 Z+ |
'; ; 以下内容将全部是注释,直到出现 ''8 Y c' G* C7 M: |* o+ ]
;' ; 注释将一起进入补丁. A; ^2 N' B( y9 Q
+ - * / % ; 加, 减, 乘, 除, 求模 操作' K/ _" s3 ]9 T' l, U5 h
>> > < << ; 右移左移操作
" o8 Y& }% w' h' m, B0 ]0 B2 k, ] & && | || ^ ^^ ; 与, 或, 与非操作
, a/ |" F3 | E val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)! v/ M* D; G) w ]
page(value),
. n- o) |% Q! }) [ pag(value),, j9 A2 l4 R* G- u
p(value) ; 页值 (= value / 0x4000)
1 {( m f: j3 f' ?9 q# l pof(value),) N$ [" N( e2 o, @3 g9 v& J X
q(value) ; 页偏移值 (= value mod 0x4000)5 ?) `; f: C$ Z5 v% M/ q# y3 K
segment(value),
, t) V# M/ n+ t- V seg(value),
; {+ w- N7 E& E s(value) ; 段值 (= value div 0xFFFF)
# ]% P6 p# r% ]8 F offset(value),/ J& U( \5 T9 e6 y& E
ofs(value),
& F! p$ O' C* c6 ]4 c& C sof(value),
* Q3 o/ u! K# u o(value) ; 段偏移值 (= value mod 0xFFFF)
, [5 J& X$ k' J& r) f1 F
/ u* I2 \/ P" u8 @% L7 b, n*) 例子:
4 o) J# V: C- Q- A4 p& g' q+ _% S% O
;--- Testing ---" f) D8 @5 _# z6 ~
: C$ g( n; E# F0 Z
base 0A00000h ; 自动转换文件地址为 SL45 内存地址6 {) r" X) M. W
( T$ e) Q/ S9 ^$ }5 N& G#ifdef ME457 O% \3 F1 O+ `* i# A8 w
#include me45.inc
! t& {$ ~* ^# C' a2 O8 ~6 T5 D#else
' ~0 v* L) L9 B* g8 V5 Q% y #include sl45.inc% @; `+ V; j+ r7 q6 {
#define FreeRAM 37h:3600h
( f4 S' Z# a* y, {+ a6 G #define memcpy 0c7b384h
( V3 ~' B+ h. ?, v; ~3 ?#endif
/ m o7 g5 V# p8 {7 u/ @! Z
8 `+ F% y1 T$ ` d; g! C6 K, u;#name TST. Test Patch ; 补丁名 O& c2 O/ |( b& n
8 k' ~( u* k8 k& }( _6 |/ }' V% J'Firmware : sl45v56
3 R8 H6 A! l) A8 D7 ^: U$ {'Author : rizapn% a. y5 m# D( m0 J
'Updated : Aug 18, 20040 v% U5 |3 Z' Z6 a* g
) C: D+ W% `( C6 V9 Dorg 0c7e000h3 a" Z& i5 h& x/ ~
mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移9 X2 ~& _8 ]; k J E% U% |
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值' s* K2 B. X7 s9 w2 P3 |+ I2 k1 Q
extp #p(data2), #1 ; 跳到 data2 页3 o/ C( a$ f7 }9 D4 B. D
movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)
! V" z" i# X8 ?/ E; M* O: x callr sub_1 ; 页内调用
5 n" t. |& m/ w% w8 b/ ] movb rl2, #'A' ; 得到 ASCII 码 'A'- U: y! n- ^. b% ~, ?* T
loop_1:6 W/ ]4 ~/ }% z% q
mov r2, #1234h* o+ N: l4 y3 {; J+ b
mov [-r0], r2
" L; Q6 n/ ^( ]8 q calls memcpy ; 调用段表示的子程序
$ ]/ ? ^5 q3 n* V5 g! a* U0 m3 c add r0, #2- ?# S; U; ^, R: Y: w8 V2 M$ y
jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处5 R2 e8 l& C0 h" S- f0 U6 |6 p
rets* m" ~! ~* y; }- Z
8 Q8 w# H8 s7 Z- ^2 Asub_1:
, O: ~5 d0 e" B+ f3 R mov r4, #1234h9 e8 t& D5 }. h) U
ret
0 |/ b+ \, v7 @2 [! R) k3 C1 w% u5 }) \! ~7 g3 t
data2:$ s9 X) ]3 G# X
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
. o4 U" O& B0 ]: k! u. u
/ P7 ^5 I }$ T, Wend. E6 Y6 [# E9 _' ^1 x; w( \
. B Z5 ^+ L( K. s! o5 a7 A* f;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# u+ U# U- h3 x2 }
2 K9 A& v' y8 ]: {- t# h
Allaahu Akbar,' b1 k" {" W( k' W
RizaPN <rizapn@yahoo.com>, Y# [3 K9 J1 g+ Q. `1 d, H; V, m: ^
Jakarta - Indonesia' c( Q7 V3 J3 `. H5 c; ?7 x
/ a7 \. K* v, l1 X4 j
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|