- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:7 g7 p- ^( E8 ~9 f, v% b C* J" b
8 K; {3 }2 z& ]简单帮助:7 Z! ?) s5 N8 w' k; p, V
====================3 l1 ~. V- q: y
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
% y! P3 w0 w, w3 k*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.2 J6 h- `5 E! e8 x8 ^
5 {* i! i; Q o3 M; o7 O. B3 J9 w1 s
, W$ {+ R6 Q3 G/ A* r搜索空白区:
! }; v; M& w& o) `) x D=====================
; K6 @1 K5 W" B3 P> sfe 0 ; 帮助2 y8 i) K) M8 x
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
- J' J& y! D/ Q) j8 L& ?4 X9 D> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间
' ~9 z1 Q: k/ k3 u9 o
A2 M/ g- E) g+ Z9 a3 B/ |# U二进制拷贝:* c+ p4 u- O1 l( d1 d4 s
============
4 i* p" s# U( L" J2 m! a> sfe b ; 帮助
! K; s. h! q6 c. x) O* M3 H3 o. `> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin- }9 |% U: }$ |& I. Z4 U
> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin3 S3 y5 b) {5 m: w# a; t
> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
9 `4 @2 E4 G$ Q1 E) J> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200' K# l/ Q; V- b# ^1 _' {
M- i( v2 W! x
比较文件:
H! l& f. p8 l2 Y* k! n============== L* Y B' H2 A- {
> sfe c ; 帮助
^% V8 w# B. O6 ^* B7 N8 d> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin
1 I: I+ p# }( P6 U! e( s> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )* m5 L! k9 G. J, u' ^
> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
; F& V" H0 z# X; A/ F. P> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
c; G, j- @3 @; ?0 ~$ ? A> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A000006 g0 W" K( b7 X/ s5 t; H: {9 f/ S
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
( r5 g4 T1 G6 q& O% |> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)
$ S, D, I$ W. W/ U& P! n+ G2 Z I9 u, v7 o0 _6 \( F9 N# J/ j
发现16进制的地方:
( j. q/ j- H, N4 S; S# S- g2 k6 Q$ w====================- N- g" d1 P( r+ I
> sfe f ; 帮助$ ]6 `6 L6 g+ N5 v
> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个$ \( S- \4 O: ~3 Y1 w
> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找
; I% R; g( X2 D" O8 _> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes G8 ]1 z: e5 o2 e% {( H5 }& A
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找
4 v; D t8 B; ?5 K, b0 @> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
) O% c; z0 A8 h8 k> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
: Z+ ^8 M# n9 f, s. l0 G
: A) E/ y! V% F- s" d- x提取语言数据:" w$ y2 P# ~/ u8 N- v
======================$ O6 g( T, @4 Y, U+ U
> sfe l ; 帮助% l- N6 p8 W& u+ h$ \6 ] O$ `% I" w
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据$ [& A0 w1 y* J7 q- ]3 X
> sfe l src.bin 200 ; 显示 ID 200 的字符串
) H# ` Y+ y9 \+ b7 v) ^> sfe l src.bin 200 2 ; 用第三种语言显示字符串
. a9 o2 Z# U* F8 Z2 P' D6 S> sfe l src.bin -1 ; 提取第二种语言- y& B) M7 B, m6 D( g/ u+ L; ]
> sfe l src.bin -all ; 提取所有现存语言
* k8 k0 E9 T# Y: k> sfe l src.bin 'Testing ; 转换 'Testing' 字符串
. d: x) I2 ^" d8 D/ I> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)
% ^* R7 H! V, D% r% Y> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
- D! T, Q5 h# e1 d2 F; m/ U> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 + Y/ R: ^1 A# s& U1 N& Q
> sfe l test.lng ; 检查test.lng 语言包) f$ t! w" T8 B% ~7 U
> sfe lc test.lng ; 检查和更正test.lng 语言包' d0 v( `3 L6 ?- a$ U7 y# B$ _
4 O' m, [' O# `) M% f8 _% t2 z" J; M
提取菜单:2 N8 d7 P! v4 p% [: c8 Q5 {2 y
=============
% v' a' ?5 t& ~! _> sfe m ; 帮助
+ n& x/ j7 F. C> sfe m src.bin ; 提取菜单结构和入口- e' K/ v( n5 o Z6 \
% u8 B }- Y% r* }# u" n" d5 ^% J& Y$ }& }+ i
补丁:
' r. ]/ B+ R3 x7 Z% g=========
+ | w- D; E- f! y% D1 d/ L% f* Q> sfe p ; 帮助& E6 k, g |( V
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
8 p1 s3 E6 e4 H. o/ C, K' E. H> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
9 X* ]. S M" S" W' }: A Y> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
. a J- r. ~) O/ @2 s
7 a1 o Q6 X( R2 r; Z( u: _# L
3 C6 O8 T& Z+ z) d% s. ]编译:
5 o* G7 v4 M: S4 l3 r+ E==========% M+ d0 G) g" B- H H
> sfe a ; 帮助
; u4 u, J# D6 o i> sfe a src.asm ; 编译 src.asm/ ?6 b& I' i. q# ?0 l
> sfe a src.asm d ; 编译 src.asm, 完整输出* r2 s# N! J% v; p
> sfe a "mov r12, #1234h" ; 单句编译
4 R. K( N9 a; a$ v> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译
9 I/ q* a) {. G+ E6 X: O; Y$ W> sfe a src.asm,TST ; src.asm编译成补丁格式
0 v6 K% i7 S% A7 { }! H- d> sfe a src.asm,TST p ; src.asm编译成补丁格式* @- Q- w, y" ^; n! l* t) `
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
1 B2 w# W$ s/ D4 [> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa000006 l2 c+ D2 r5 O* t
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。: K% F' I- S. P* i( i( E Z9 r/ u
) n- y4 F1 q, B0 }; C" _! R
*) See Assembler Part to get more 'assembler' function detail
/ P" [) }7 _+ V# \0 C1 o
& i4 V5 d! V' H t: l- A
; g! l1 z& q, J8 @5 O反汇编:
$ b/ e: n( ]1 K=============
3 Z8 n' o7 r( h& c> sfe d ; 帮助1 v9 W. w) o& ^4 n8 E
> sfe d src.bin ; 反汇编 src.bin3 K* v2 k5 X, b: U/ d' j2 c
> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin# g! X B+ L. Q/ [) `- P l
> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节4 {* J% G+ O4 }& o* C, n
> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A00000$ V0 H. _' Q9 g/ p3 v
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
" g4 D& c3 W) M8 V) F> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址
9 A1 b* t Z* ]; c; d/ T- `> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件; d" m& [9 Y/ o
> sfe d image.bmp ; 单色图形汇编输出
0 E! r* X% L4 q3 f: N5 }2 y> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。
! x1 z& G0 U& A2 D& k, y
+ W9 N7 b* }$ K- C' S5 i3 ?0 A `4 m调试:* N7 B2 _( T+ B0 P3 o9 A* |
=========
9 Q% @" M. |' [> sfe r ; 帮助
* }+ G ?! z2 I4 x3 F) o' p) w0 k B2 A> sfe r src.bin ; 运行 src.bin' i) \ A1 S: B- A$ C6 T; g
> sfe r src.asm ; 运行 src.asm 汇编文件
$ f& h) g8 t# S1 T" @7 C> sfe r src.asm ,n ; 同上, 正常输出" Z/ J& S o' L8 P9 @$ R; N# V( n% a
> sfe r src.bin,200 ; 从 0x200 地址开始运行; [; K8 O5 H9 j# ~
> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
3 g) e0 `0 p9 w( F( S2 y0 w> sfe r src.bin b00000 ; 以 B00000 为基址运行
) \2 r) V. K) R; y2 n8 ^# l> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行1 L7 B( R @) s p8 b
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行. n4 a8 g( I) v- l. o
7 [9 Y3 Q) d+ z2 l; ?" ?
: a7 `# e) u e" g交互调试:# |) J/ Z* ^& D0 J1 c$ W
======================
! A, F* b$ {" K0 X+ p> h ; 帮助# y( E% p: Z" P4 x* {9 i0 B1 D& k& j
> g a00000 ; 到地址 a00000 v0 X* o A$ P; F* p' l/ a
> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)2 t, g3 R7 c, \2 U6 Y: [
> d ; dump 内存 (现在地址)$ M' p9 k: F6 ]$ q
> d a00000 ; dump a00000 开始的内存
; b4 s) P' u- _, n8 w1 D- h1 a> d a00000 200 ; dump a00000 开始的内存, 大小 0x2005 i, l8 F1 k c5 J) x: C5 F
> d r ; dump 注册- ^ `# Q8 c2 h ?, x5 }
> a ; 单句汇编
& {& \* [# e- O# T# O# H> a c7d530 ; 单句汇编地址在 c7d530
% R3 K, v* I Z. y0 h> u ; 显示反汇编: x- N2 S1 u8 A- Y( h, W
> u a00020 ; 显示地址 a00020的反汇编% s' r/ z/ E' x
> r ; 在现在的地址上执行一条语句* D$ Q: n' e3 K6 @
> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)3 D0 v- `; M6 B4 y) s
> r 0 ; 运行到返回语句
: H) P; x6 }& M# r> r -c7d580 ; 运行到地址 c7d580
9 k" o* N# u. v/ w: e' X4 r d> q ; 退出
: W6 Y: {7 Z& ^0 H# k, }0 {) ~7 |9 J( e/ y* k; z: w
*) 所有未声明的语句都会改变当前地址。% @% p2 H* d. o6 F/ h' e; F$ L S
* l$ Y# D1 i# i8 E3 L
, H* o! |: m# W* V! y特别的助记符:
0 h1 w' X, o' O: T, j============================: d+ G7 ?' i2 Z, n: D* s! n- ~
*) 所有C166的汇编格式5 g4 Q" H5 V! J' x
*) 分号用于注释 (在一行的任何地方) ]# v# v! G3 ^+ h0 Y0 f" s
*) 特别的助记符如下 :
0 H: d' ^0 }3 w2 K4 N+ d) _ #include filename ; 包含文件(各种定义)" v2 \+ ?4 m$ G- c
#define var value ; 设置替代变量 var = value
+ u0 l9 o( w1 @1 _6 y var equ value ; 变量取值 var = value) T0 @0 \0 s: G
db 'X',36h ; 定义 byte(s) 数据区
, c" `: r( o. J# }0 R dw 1234h,0,'AB' ; 定义 word(s) 数据区* C+ V" t1 O/ I
org ; 设定当前地址- E6 u! g3 o8 J. S: C T# M" d
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)9 S/ m5 X5 {$ M* D! \
end ; 结束记号, N+ M# b( b; G& Z, m$ `' U; j' Y
;#name XXX.string ; 定义补丁名称 (XXX) x n( r3 Q9 H4 C6 l+ ?" f0 O( u) Q
' ; 注释将一起进入补丁" Q0 @8 L7 T; o& J: u* U: W, O" B
'' ; 注释将一起进入补丁,加回车
# ~& E" M& I) b '; ; 以下内容将全部是注释,直到出现 ''
' _0 [. c# W4 G8 z ;' ; 注释将一起进入补丁! [8 R7 L- P2 z+ |
+ - * / % ; 加, 减, 乘, 除, 求模 操作
6 L$ S5 k- Q/ v# W; | >> > < << ; 右移左移操作
" d4 Z6 F* t' L6 ^' L F & && | || ^ ^^ ; 与, 或, 与非操作7 O5 _7 B5 O: H" r
val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)% t1 [4 Q& b0 F' l3 W
page(value), ! P$ T, J0 Q! ?" w! s2 ]. w0 I
pag(value),' ^/ z4 C# Z6 G+ g7 ~7 P- f
p(value) ; 页值 (= value / 0x4000)
% ?+ A! {) v/ v8 X' F# l L pof(value),' q4 d5 T& ~- o* v6 c z
q(value) ; 页偏移值 (= value mod 0x4000)( N1 c& h$ ^, ` \
segment(value),
# Y3 ]1 \0 ]& i seg(value),' a7 @* e4 E6 x% k+ l' x
s(value) ; 段值 (= value div 0xFFFF)
6 x& H8 F) R( ~ j9 }0 F( y offset(value),
c% q' v3 B# i ofs(value),$ }. O, i! A4 ?/ ^3 z7 u8 E
sof(value),1 {" b0 J7 T, B* P Q
o(value) ; 段偏移值 (= value mod 0xFFFF)5 L: H) c7 Y+ J5 [. e0 W* Y
& I/ L0 |* c$ G- c/ T0 V+ E! C*) 例子:
; D. ^( Y$ q) z( L4 P6 {8 f) m, O
0 T! K+ L7 Z" g6 e& p6 u;--- Testing ---5 A" G: U, _6 I$ O4 m
+ J5 k9 x8 }' ]5 H$ @base 0A00000h ; 自动转换文件地址为 SL45 内存地址4 F v4 X' G/ h3 S: o; W" d
; F" U h( G1 \9 E& G$ r
#ifdef ME45
$ J/ i/ z5 d0 _ #include me45.inc1 F9 U) O& q* D
#else, L4 S+ p$ o+ k' s" Q1 `
#include sl45.inc
& k/ r6 G7 r- f: H8 t7 n #define FreeRAM 37h:3600h+ d9 I( T/ T/ `) {
#define memcpy 0c7b384h& q# Q) @* i% _. ~
#endif+ S! U' z9 _, ?" U& r2 t. g& e
" z: f/ H% C t
;#name TST. Test Patch ; 补丁名( a0 j) b. n, A/ N! ~8 r y) f+ n
; \. I: X4 H8 I2 n* T( A$ c'Firmware : sl45v56
# h0 b5 L' ]4 g'Author : rizapn" M( M: k! R( @) |! f
'Updated : Aug 18, 20042 b9 s- c4 X* ]5 p/ f F4 ~4 B% {
, C1 m6 O4 [" [# F
org 0c7e000h
1 v& \7 p% f) R: e( W) \( l. s mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移' ^; I6 R# d# l
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
/ |4 I2 y% ^! ^- Z7 P extp #p(data2), #1 ; 跳到 data2 页
6 h s4 L3 ~, u: j movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)$ X5 d+ v5 _: _
callr sub_1 ; 页内调用0 R0 F5 V" B9 Q
movb rl2, #'A' ; 得到 ASCII 码 'A'! x. u/ Q2 i! D( I$ V
loop_1:
% Y* s( x* {# s% T8 T mov r2, #1234h
: x/ d1 @: d, B1 A' x- O% r' v mov [-r0], r2
% t9 ]. n. O" c9 h6 Q calls memcpy ; 调用段表示的子程序. r; s: {6 N+ b1 Y
add r0, #2
: L3 _. G" j/ d% _" j jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处* T5 p8 t; f; T
rets7 N5 I5 }" O* R3 P; K1 W" k
2 w: ~* k0 `8 i7 [% bsub_1:: L9 \8 N* z5 g6 n1 s. M( O$ M" S0 P
mov r4, #1234h
) P9 Y# I7 E+ B6 f$ I ret
. t" s3 g& s r, K$ K6 w, w& k; g* F3 D( P) j% S+ f
data2:' U" M% ?; \' m/ x2 y- a
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
& Z( t* m$ \2 P9 R8 i# G+ H* n8 a. O2 e* j% w0 A6 h2 ~) Q
end
: e5 R: t0 B* ]) u2 q- d4 `- t; r5 h% u* k1 R
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 i g4 A! [7 l$ Z! M- B/ c
. M9 V2 L6 r) I, cAllaahu Akbar,7 J/ Q1 u- I7 u" ?. ]
RizaPN <rizapn@yahoo.com>
+ Y, s# E! [" U' h, _2 b2 H" ^/ WJakarta - Indonesia- [) J, ?4 a, E3 {3 r! s9 L) G! C* K
% Q4 f( H. a; [$ N8 ][ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|