- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
* ~. `) \" A6 ?- H/ f: X4 Y
G& I9 E8 ~" m简单帮助:
! \3 T7 X; L9 F+ A$ w! H====================# ~5 ~4 m, o$ [* Z
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。; V1 W4 B8 ~- A5 g! V
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.( d0 U6 l0 A/ u9 e' K. i
9 X9 F% `: C2 z! w& t# S- S2 M* F+ o7 ^+ W/ T3 ?
搜索空白区:/ w. k6 X6 N/ U& w/ W0 j, B
=====================# b8 p: `/ E Y
> sfe 0 ; 帮助. U" _3 x4 ?9 t0 r) A
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
6 Y0 r( E" x6 `! z> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间7 [# |+ g1 u7 m. u: {
) e+ B4 S% a; ^7 ]; o; A6 F二进制拷贝:
+ c# K2 n( a/ n============
+ q+ ]5 L7 o0 l. z _> sfe b ; 帮助
* F' _9 y$ ]! K7 x+ N> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin j+ D% t( B1 @" G$ }7 G b! j& ~
> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin1 E2 i, N/ `! o j! s7 Q5 J
> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin0 x7 t. T5 q! f3 q) v7 g
> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
+ z! _ l2 n% \2 R8 @! ~% E3 a* W+ J+ \4 E4 ~9 A
比较文件:! W b( t# q O% u. x' W
==============7 f8 |' w5 B% j* y- N& O- C+ l
> sfe c ; 帮助
8 k% [5 \# c F- O3 V1 u> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin* q/ D+ j! v: ~, I. \3 l b' k0 f" B" u
> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
1 a0 n" W# [5 c* Q+ e$ O> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
W8 a& c$ w/ k2 s |> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )0 g& Z5 F. ~% n9 f' R6 u5 s5 Q% A
> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000) S* V, A& t0 @% I; V
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
9 I! |& B$ D$ X> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)4 F$ F% |' O0 [9 m. p3 [( d
. Q) J/ i/ i- n3 N9 }发现16进制的地方:1 `* }4 X+ C6 f p& J
====================2 L3 c+ t6 T! O$ F3 v/ M+ N9 P
> sfe f ; 帮助& K# w! a& E( }, M$ c3 | E; a
> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个- F2 }& _, t& F7 H8 I* O+ V
> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找( G' C- q6 v7 o" e" K' U6 C
> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes
0 n' f5 q* I5 Z" X" ~> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找# `, S7 r* E* S: R" h' n) |! H
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小5 @, I. E9 D9 S1 P; d: F; p
> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
) f( K' w1 Y, X9 k% r5 ]
; s+ Z" x" j8 d. _提取语言数据: a- w* W$ h& M+ O
======================
0 x% u( w- q* Y5 v3 z6 O; _3 m+ a4 X> sfe l ; 帮助
: h) [/ T* V+ q3 F2 _7 ?> sfe l src.bin ; 提取第一种语言,包括扩展文本数据8 G! C4 [3 P/ Z, d5 m# c* q
> sfe l src.bin 200 ; 显示 ID 200 的字符串
* J& Z$ b3 J8 u/ {* ?> sfe l src.bin 200 2 ; 用第三种语言显示字符串5 b4 h* G# T8 l; u& G5 O* ^& a
> sfe l src.bin -1 ; 提取第二种语言
7 p) R& n- g; i1 ?" ^) G' g$ ]4 f> sfe l src.bin -all ; 提取所有现存语言& F( y$ _0 H* W; S5 b
> sfe l src.bin 'Testing ; 转换 'Testing' 字符串
* }# a" ~" E, h+ O5 s2 m> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)' J: v! {$ m0 H! a! p% x
> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本/ i, _# v+ i4 N
> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁
* ?* ?1 n9 Y' D8 @* J+ T! G> sfe l test.lng ; 检查test.lng 语言包
1 i" i( s/ n$ M9 T7 d; p9 `- L$ p1 X> sfe lc test.lng ; 检查和更正test.lng 语言包
9 p" Y0 ^2 j/ ~+ @$ L0 M" f$ ?3 Z# ]' k: ^1 v- z1 a3 Q0 ?' `
提取菜单:9 |, `& Y/ F) W
=============0 v7 r' c- W' R, Z1 z1 U3 k
> sfe m ; 帮助
& {* E) V/ @+ O# r. g> sfe m src.bin ; 提取菜单结构和入口- n* A. D5 j4 y: E' D
+ Z% a( Q) ^; c V! s1 D [
) W" G+ H6 t0 I. q
补丁:
2 M4 J/ t# g0 T" d9 e' T=========, Y8 u2 k; F& f6 R. n8 K
> sfe p ; 帮助
8 L+ t; u. J9 ~4 S0 d E$ G> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
! M o7 i7 X" b, L" X> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz5 e9 \; T6 _/ o3 K+ ?0 {! o
> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz # S$ z. O5 V+ M4 ^
3 H+ v: a4 P9 ^, k9 g2 S V1 I; [, A8 P
编译:) o- |" Y3 _) B8 }9 Z
==========5 q& Z7 {% t3 D3 W6 v" l6 t2 J
> sfe a ; 帮助8 N: D* I$ c" e1 Y9 ?2 |
> sfe a src.asm ; 编译 src.asm
- p% u5 }6 \2 q o> sfe a src.asm d ; 编译 src.asm, 完整输出
3 p4 V/ x4 n' `% o. }. U7 \> sfe a "mov r12, #1234h" ; 单句编译% h! U5 p& ]$ a. X9 a% c
> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译" v$ D+ H/ }" }/ Q$ x# Y4 G
> sfe a src.asm,TST ; src.asm编译成补丁格式
. P- x+ h0 x3 C q u> sfe a src.asm,TST p ; src.asm编译成补丁格式
3 @* F3 M1 ^* m! l4 m6 }> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
4 p6 \1 g, p9 R6 }# }# @> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
5 J8 P8 I7 p. R2 ^6 G> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
) c* ~% G/ r' h9 C
7 D4 V X% q3 N' E0 S*) See Assembler Part to get more 'assembler' function detail
' T2 _3 r* s& w0 b8 Y2 b9 E
' d$ }$ v; _- j- Q) i9 G0 y
( `7 n7 O" f# R9 f; S反汇编:4 F1 v+ E2 ?+ t8 K, _1 |
=============
8 V# M; b. w3 c+ Q' C' P> sfe d ; 帮助
3 k# ~4 I3 B/ ]3 G; Y f5 j. e4 {' q! W+ t> sfe d src.bin ; 反汇编 src.bin
+ b7 ^6 u" q& A# H& ~1 r> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin
3 F7 H2 U/ S, b3 z0 |$ O; Q> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
) ]4 a. ?. Y; `& p> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A00000; v7 d6 T, g2 P- T/ ~( D" h
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
) d3 U! E2 S( c( G; n5 @> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址" @4 `9 i8 q7 t5 I, p
> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件
# b0 y! m4 H2 \" k$ X> sfe d image.bmp ; 单色图形汇编输出
; H: V" j1 _2 w0 _> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。
3 Y; b0 \5 U* B k7 ^; K( h" `" c9 }" _( N/ ]& O& z, U8 B3 I0 p. T3 J
调试:
" G- ?* W1 {1 l! ?: g# D% D=========# l8 s/ \* T* t x3 I
> sfe r ; 帮助
( C- l6 N, g4 ?* ?> sfe r src.bin ; 运行 src.bin
2 u0 v: @6 o$ j> sfe r src.asm ; 运行 src.asm 汇编文件; ~1 U8 C& D m1 O
> sfe r src.asm ,n ; 同上, 正常输出' j1 a, v* @9 Q2 v0 P# N8 r! Q/ A. m
> sfe r src.bin,200 ; 从 0x200 地址开始运行& Q5 l: g3 T0 D+ k
> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
6 ]: x; B* l0 Y2 g) Z$ T> sfe r src.bin b00000 ; 以 B00000 为基址运行6 o& G" r* T+ O8 {
> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行1 f j; T5 Z+ u. [' R: k
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, i& o; a1 I( x8 s2 y4 u) C
5 [: @) V/ b: F- c$ A% y/ e. f5 q! P
交互调试:: n6 G) U0 y* M9 @: R7 O
======================
) ?+ B; ?' P$ m9 m4 u: B0 ~> h ; 帮助
1 ^9 F1 e/ R# Y% X& m/ Y& o7 l> g a00000 ; 到地址 a00000
$ o- l+ }+ R2 C> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)3 g" c) I1 s3 k2 _
> d ; dump 内存 (现在地址)
% d- K- L$ w( ?; H p> d a00000 ; dump a00000 开始的内存7 n* d- [( L" [/ n$ K
> d a00000 200 ; dump a00000 开始的内存, 大小 0x200
! e( J5 o/ d( ~- \> d r ; dump 注册6 @0 U6 H3 Q1 S6 Z7 E/ M7 }$ K( n( M
> a ; 单句汇编
# J y$ Y) b0 y" |+ B> a c7d530 ; 单句汇编地址在 c7d5303 s2 g2 B, y$ F- ]' Z
> u ; 显示反汇编
, I' h6 b+ b9 j' l$ r. Q> u a00020 ; 显示地址 a00020的反汇编2 D5 u* {, w8 y/ n& c) Q" |
> r ; 在现在的地址上执行一条语句
7 M' P' M4 ?' G. c+ A: e) ~> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)
+ `! x& a9 D" y5 u& V> r 0 ; 运行到返回语句6 q: L; `$ a. G5 Y _9 b: I/ u
> r -c7d580 ; 运行到地址 c7d5803 w; b- r- K( x& t5 _" g/ l- a
> q ; 退出: u* V) a0 o, q% N9 U, m
6 ~" a9 t7 N8 r3 g
*) 所有未声明的语句都会改变当前地址。
: F+ d1 n1 G6 l: ~, e! P, P/ w! }" U) F( {# S
* [" x% {9 ]8 ]1 K; j/ i2 z特别的助记符:+ d+ t, s3 W0 f
============================/ U% K5 \& t0 n: V
*) 所有C166的汇编格式, F% @7 m" A& R C8 Y" h& A" x
*) 分号用于注释 (在一行的任何地方)
, U, Q5 p5 j7 G/ M*) 特别的助记符如下 :7 s+ n& |9 K) R" h6 [: }, N. D
#include filename ; 包含文件(各种定义)- {0 x: K3 M( q/ [3 ^6 o9 T: l
#define var value ; 设置替代变量 var = value
4 b6 M* J) Q, b. g5 i1 ?! S var equ value ; 变量取值 var = value1 k6 f& Z" y# L( o4 a$ _% G
db 'X',36h ; 定义 byte(s) 数据区: ~ E' F7 y9 c, n4 s4 X) g3 ]! Z
dw 1234h,0,'AB' ; 定义 word(s) 数据区
5 i' x8 q, l! n) u, W" U: [ org ; 设定当前地址
& J$ E( Z6 J3 ?& Q8 C3 H; P base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)) F; {0 c9 o3 U
end ; 结束记号0 t8 q: I u2 u. F
;#name XXX.string ; 定义补丁名称 (XXX)4 a( ~6 j; k3 }7 W7 q" G
' ; 注释将一起进入补丁1 \# w4 B! Q- x
'' ; 注释将一起进入补丁,加回车$ O: g0 U2 N- X5 h
'; ; 以下内容将全部是注释,直到出现 ''7 y8 u6 c& N' Z
;' ; 注释将一起进入补丁/ Y! o& q7 p; w; O0 j( x( `1 M
+ - * / % ; 加, 减, 乘, 除, 求模 操作: D# S7 m c8 B0 N$ ]% P; S
>> > < << ; 右移左移操作
1 T0 ?- u) {, j! F( x & && | || ^ ^^ ; 与, 或, 与非操作, L, p, s' b+ v9 r8 t0 k2 i
val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)- O z" C8 ]. A( N# s2 ?6 e1 x
page(value),
- `9 x1 m2 h5 y) w& K pag(value),: E- N. _: f; N+ K( ?
p(value) ; 页值 (= value / 0x4000)& r$ s( j3 |6 a- ?$ e u
pof(value),% E* Y- L/ M" M! J v
q(value) ; 页偏移值 (= value mod 0x4000)
& A0 U8 [, p& N$ n segment(value),5 M2 ]% A* g+ Y% a# I
seg(value),
3 k, |- D$ o3 x4 U s(value) ; 段值 (= value div 0xFFFF)6 o, m6 i8 @3 m6 a! N) f
offset(value),
$ M y! `0 c+ s$ ? ofs(value),
; O# T' `" F) [; \ sof(value),
# k) n3 e T8 h o(value) ; 段偏移值 (= value mod 0xFFFF)# Z! m) L3 j& X- K/ a
* Q$ n& V* _- A; W3 k9 {: W
*) 例子:: b7 V0 E/ O& F$ l4 I, a
6 b6 u' D) x$ r+ g0 _ T: h;--- Testing ---
2 d3 ?4 S1 s2 U) x5 t3 ?; Q
! Q7 C4 ~) x' H- ]* |( V* P. ]base 0A00000h ; 自动转换文件地址为 SL45 内存地址& ?8 [, |* u" ?! c7 J9 z1 e1 Q
7 a2 X, s$ F8 S#ifdef ME45- m9 _ l% }, ?( H2 o. N: t3 X
#include me45.inc
( L# S. Z3 @, B" G" ]#else% }6 u; O0 r) P: |# f
#include sl45.inc
' L2 \% K1 i0 E$ X #define FreeRAM 37h:3600h: e8 s: K; f9 R9 T* W, ~
#define memcpy 0c7b384h
" `# C6 R" ^2 b v! z) ~#endif1 y1 U# \# C* D
7 V+ z( W8 t& |' O2 g;#name TST. Test Patch ; 补丁名
: _, b+ J+ s8 I$ C- u
& o- I% p; |6 \. _. x# Y u'Firmware : sl45v56
B6 j% ?+ e% V'Author : rizapn& w% R1 x% M/ e, ~
'Updated : Aug 18, 2004
4 c' f0 q( \$ R0 h4 V) R3 L! q' h1 B' ~/ v
org 0c7e000h
6 X% o' Q: M5 A mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移1 H8 v0 J$ h8 _8 @0 g$ B; R' B
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值! m. G5 N3 O: \& J( J ~' A
extp #p(data2), #1 ; 跳到 data2 页
- P0 x% ?; H( ]( O- x+ J+ w: y movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)
y% j- P4 P4 S D8 P% V# w6 h callr sub_1 ; 页内调用
; F; f: O2 `2 i: ^% I5 K8 k, U# a movb rl2, #'A' ; 得到 ASCII 码 'A'
$ e' c1 j; \5 {$ R: Gloop_1:! T! Y8 `) ]9 T) ^) P
mov r2, #1234h6 H+ Q( u% b9 u- `9 q
mov [-r0], r2& Z k4 D) x' N7 E; x
calls memcpy ; 调用段表示的子程序% \- o8 N( r3 @3 {8 S2 b8 n
add r0, #25 u' Z: z# A; l( ^; P6 b! \* k
jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处
$ ?! Z- l# c; w& F rets
3 J) N4 r- h/ \- E/ U
8 \5 N h5 R6 T; @sub_1:6 ~: A b' I. x! P7 _6 p" d' |
mov r4, #1234h
* K# [" t4 e1 d) W5 C. J; V ret
$ y4 F9 C8 P: D* X' _/ I$ \5 Y. ]1 ]+ M% S! @8 Z+ u
data2:* W. y1 b6 ~, M/ x: ~
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
! { w$ A3 u5 t9 V( J/ i6 Q9 u# m: k6 q, j+ v8 |* F
end
6 G, D ? w/ K$ @, Z% t. K2 H8 X, k# y. Z* `
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~- W( L) }- U0 e
6 J) f# p( u4 u/ F! t' I; p+ jAllaahu Akbar,$ y ]3 M1 g4 f& h( |7 T- y" @1 S
RizaPN <rizapn@yahoo.com>
/ x, w( C q1 f6 fJakarta - Indonesia6 L. ~% g6 Z; Y
0 I6 C C1 ?" m: _( w* v
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|