- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:$ E+ s0 `8 ?/ ^$ D
0 |( c2 Y- I9 ]) X% a% T
简单帮助:+ `6 D, l" H+ g
==================== a' F$ W+ H& y# a$ C
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
, K* t* G$ c8 v2 f1 _2 ]* g6 t5 c*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.8 h$ b7 B8 n4 v, D2 O# k1 t
; m" [8 ~- O: X6 }* A( K& B. b8 T r% o2 I
搜索空白区:
* q0 Q2 M* a! V1 n! h0 I. ~. G=====================
- N* }) t. b& _% f) V> sfe 0 ; 帮助* K# K0 O7 u1 Q& a$ C) o f
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
) e/ N2 ]! U. c> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间
6 k2 o) F9 Z9 k# W4 Z) W
" e; t3 e! I; {" r, X' v; k) M" \二进制拷贝:
6 G+ s2 h- z6 r- X============* i m, q" c0 m* x- v' S
> sfe b ; 帮助3 M$ W3 R/ b" B9 @: z2 F
> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin2 W' u! V: @+ t) T5 ?
> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
8 l S/ |$ k. Q: s> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
% J1 f6 z8 c. y> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200" L& F: `. r( ?7 G' \
) o% _4 Y* b5 C+ R: p* @比较文件:
) j/ @- q* t/ g2 @! R; z==============
$ w* `0 U$ U% {# O> sfe c ; 帮助/ z! u) j7 R) Z0 [/ i
> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin6 z6 M0 n. q* R) x! [7 |
> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
0 d4 D- s* e* n1 T; A> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes% k& \1 d6 @* y% v5 R5 ~7 ?
> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
{8 @+ d8 R, [3 L" C. v: [4 C> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000; ~6 j' M/ K" v! p# ]
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes" Q- v& _8 u) U! A
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)
9 |9 q% W" E" K6 V3 R% s! n
; n* d3 A U) o0 P6 \发现16进制的地方:; B: ~- T) r: L. J, V7 ?
====================
0 F. I2 _) J4 k5 \$ g> sfe f ; 帮助
, @( q0 O6 W* U: d5 h> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
! `$ ~+ R. y$ q! q+ b2 }+ O> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找
) w3 K9 g+ S' C3 j3 M> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes9 a. @+ [8 |0 t/ V$ P+ p% B" L
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找
. Q" e' i) v* f3 p" x6 V: ^> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
5 k" W3 t! ^, w1 v S) q9 L> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.9 e( m+ ]% f4 o& I* ~( e
, F- V: u, c& H1 g
提取语言数据:
; A+ E3 y8 @' k, E======================
' Z& q+ N" \7 P1 s> sfe l ; 帮助2 z% l# I, q+ r# y
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据. Z" k$ y5 j0 `% O s
> sfe l src.bin 200 ; 显示 ID 200 的字符串
& N/ z% S/ K9 y9 q- D8 A4 P/ L> sfe l src.bin 200 2 ; 用第三种语言显示字符串) n, O @0 `. V+ L+ B3 }
> sfe l src.bin -1 ; 提取第二种语言2 q' f: J. S7 s2 n( y
> sfe l src.bin -all ; 提取所有现存语言: O; o- R1 b8 z2 {( V+ D
> sfe l src.bin 'Testing ; 转换 'Testing' 字符串
' h b5 X5 [. `7 S% F> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)& f3 V: ^9 A% j$ p( [
> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
% K7 c) e5 {+ ?, w/ e9 L' \> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 / \. r4 D; ]4 f; E7 t' d) [
> sfe l test.lng ; 检查test.lng 语言包& A) P" b6 C& A
> sfe lc test.lng ; 检查和更正test.lng 语言包
( _8 F4 i7 L( K; W* [5 [: y$ p+ ]0 q. i6 b6 W( [
提取菜单:
( L, J; C2 R$ G, v/ @& x=============
* k6 H3 o( ]: D% y! m. \> sfe m ; 帮助& a( `6 E: s r- n- a- A' d
> sfe m src.bin ; 提取菜单结构和入口
' ^" a$ Z& B# X8 X B5 ~" Y
. e$ d* M3 [! B5 M5 ]* ]& Z% Z3 ^' x! Y& o& \" _2 _
补丁:" t8 j" _: S8 n$ m0 H
=========
% U! n2 \0 Y* F> sfe p ; 帮助# c9 r' s5 Q- w
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
6 P, x, S5 d9 G0 T) h- l> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz: g% t& q0 b1 N5 u; ^" d( z, \
> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 2 C" P+ R6 o! z6 T' D. v
& ~7 f1 H% t4 m: X+ C- z8 B. V( D
$ d9 j8 i6 u' r/ m% D1 d2 a1 Z: k
编译:/ v9 j0 O/ A1 z$ S
==========
0 ]5 G8 }' s: b5 N> sfe a ; 帮助* R* v' W7 n: V* D! d
> sfe a src.asm ; 编译 src.asm5 d8 Z8 H' V% G5 p0 T
> sfe a src.asm d ; 编译 src.asm, 完整输出/ i, v0 ]( [0 d7 {" Z9 g7 f }
> sfe a "mov r12, #1234h" ; 单句编译
, Y, v/ e- T }7 ]) u/ Z* g7 r5 E> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译) a4 d2 C/ j- t# G+ Q
> sfe a src.asm,TST ; src.asm编译成补丁格式* U3 T& M- F- W2 V7 g: u) W
> sfe a src.asm,TST p ; src.asm编译成补丁格式/ F- d* M6 _- z/ L& z* _& ^
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行7 A, S1 Z W* E( i" z2 p
> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
3 O; d+ K6 E& U1 B# a- A> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
6 ^- l2 K6 O/ V. T2 z! w
% X' `2 S( W9 L" ]+ V. D*) See Assembler Part to get more 'assembler' function detail
# |" K8 Z$ _$ [( @6 f" g9 k5 a, p. n: j, Y/ R
: Q$ w* y: ]5 z
反汇编:& [! a6 w/ N) Q0 R+ D
=============
& C# \0 g- J3 S3 d1 G. M9 A> sfe d ; 帮助2 p- G/ v; S7 c
> sfe d src.bin ; 反汇编 src.bin% n/ D" i: W+ R0 a% Z( L3 Y% P0 g
> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin
4 _3 J$ p2 K- S7 _6 c( d( O* w> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
N4 X: [1 h, O2 o/ ?> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A000002 [9 N ]8 ]5 p" T/ O
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
; l& G$ k9 O: `> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址
* s5 U9 g6 f. q# p4 y J> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件
# a7 r+ `! m' Q7 Q> sfe d image.bmp ; 单色图形汇编输出
- s! n; a" \) u; G4 G {; q0 S4 A> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。' A& Q" q* p8 R' C( a; o
% W4 \$ k4 d; F! C* H- V- z$ l- L+ M
调试:7 D/ C% O; k r# {1 L3 {
=========
8 |* E+ f( [& q1 Y> sfe r ; 帮助
8 u9 V- _/ d+ L; J1 u' \7 e> sfe r src.bin ; 运行 src.bin
" z( X: ]9 n- q! Y& T( F> sfe r src.asm ; 运行 src.asm 汇编文件
6 m! @1 ^- A' c3 i> sfe r src.asm ,n ; 同上, 正常输出3 n$ o5 B/ y; m0 d& d; } V1 N
> sfe r src.bin,200 ; 从 0x200 地址开始运行
" C m- t' T, \6 g> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
4 k1 b8 d' H p) ^- s> sfe r src.bin b00000 ; 以 B00000 为基址运行
1 r3 i& M7 N- {/ j+ F> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行. C' @; g+ x& S7 `7 w8 c
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行9 k' k H' }* M4 D# J& c0 f6 N5 w
) U) L; g& D+ j; ]1 E; ^3 @0 z1 V) A% Y4 W T
交互调试:
( S6 {8 [1 \7 d3 w' e/ D======================( e9 c& O( q" s" n% X6 X
> h ; 帮助
) D$ p; d. z7 u# H8 U> g a00000 ; 到地址 a00000; K& G) b8 e4 j% a
> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)6 `) _2 Q A0 M' b) Z, D7 i
> d ; dump 内存 (现在地址)
+ n8 y9 y3 {* f/ l& w* l> d a00000 ; dump a00000 开始的内存
* \& j! Z) U7 @# A> d a00000 200 ; dump a00000 开始的内存, 大小 0x200
[ L8 w) I4 h> d r ; dump 注册7 e. J, v1 \; p. j0 J+ M6 [( y# p/ b
> a ; 单句汇编1 {; h+ i: Z3 e& t* f
> a c7d530 ; 单句汇编地址在 c7d530/ V3 ]0 \, ~' f; D a$ W1 @) \- J" u
> u ; 显示反汇编) V8 d6 I; f* j
> u a00020 ; 显示地址 a00020的反汇编5 W% ^: q0 W3 e$ f
> r ; 在现在的地址上执行一条语句
0 q$ ]; h% f2 e( ?( H! y( k5 C> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)
* P( j! f4 g) A$ r* {5 t- J% S> r 0 ; 运行到返回语句 l+ @; M- w# V$ c5 v5 P) [
> r -c7d580 ; 运行到地址 c7d580& z0 A4 ]8 ]# w Z1 l" h( a7 H
> q ; 退出
7 H$ ^" d$ h9 m" ^5 l3 \) g' P# ^* E
*) 所有未声明的语句都会改变当前地址。
& o" m. _3 J7 B
2 t, r: p. v+ \' C
' }, ^8 G! q3 q" W, J U# d特别的助记符:
+ ]# H$ {& n+ m5 N2 z============================
* Y, s7 R) w+ {*) 所有C166的汇编格式8 r% m& j' M6 Z5 d% r" e
*) 分号用于注释 (在一行的任何地方)) C0 H7 g+ f. l5 L8 a) G
*) 特别的助记符如下 :/ U k, Z, s1 c* x+ R
#include filename ; 包含文件(各种定义)7 r ? G9 @* U b Z4 z& N7 i
#define var value ; 设置替代变量 var = value
' C* ]' h/ g" r- q2 B var equ value ; 变量取值 var = value
$ E, L0 o; T5 p8 [6 K" c7 c1 b# L db 'X',36h ; 定义 byte(s) 数据区( L W0 C2 l$ d0 X6 n) s
dw 1234h,0,'AB' ; 定义 word(s) 数据区7 f/ z$ U: e1 O% i
org ; 设定当前地址 o" \! R, ]% h* \; W8 B
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
! C9 B" `! r: T' H8 X6 u end ; 结束记号0 i7 |1 X7 P2 ?$ \0 p/ {
;#name XXX.string ; 定义补丁名称 (XXX)$ u* O7 Y* H$ C5 b
' ; 注释将一起进入补丁( V R( z# E- q4 \+ k1 t* @
'' ; 注释将一起进入补丁,加回车) v, j. {& v- n% u: U
'; ; 以下内容将全部是注释,直到出现 '' z b. G; k7 R1 U7 S6 J, S
;' ; 注释将一起进入补丁
3 [. ?& C, s" h" I4 P + - * / % ; 加, 减, 乘, 除, 求模 操作& j! }3 A. [$ w+ _0 y7 K
>> > < << ; 右移左移操作9 V6 m/ _0 b) K5 u4 N* ^
& && | || ^ ^^ ; 与, 或, 与非操作# w, P* D; H+ d: j; d
val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)
' J/ |4 u9 u! A& z; C3 \- B3 q page(value),
8 E) h" j5 b! f% g' n pag(value),
4 o; N" B: {' N9 R( Y% R p(value) ; 页值 (= value / 0x4000)
; v3 t0 P! Z1 N1 w" J, [" S X pof(value),
6 l U6 ~! H( |' s q(value) ; 页偏移值 (= value mod 0x4000)
; y" m% i2 H6 a3 m segment(value),2 _+ N! a7 t4 ?* b8 c
seg(value),
& i" g2 e4 b8 P7 O5 D s(value) ; 段值 (= value div 0xFFFF)
- }) s! v) x2 B offset(value),5 w# r: ^$ Y/ p$ s2 m: P
ofs(value),( B' j4 r/ T% J% ?8 u9 v
sof(value),5 y* r0 v# k( O1 Z7 x6 X, P
o(value) ; 段偏移值 (= value mod 0xFFFF)
0 Q5 l( o6 j0 _. ^% C$ [3 j5 q
7 E, }4 ^, B/ e7 o# a*) 例子:
- D4 ^0 ^, I( n$ F4 F
' W1 i4 I' L+ ^$ e6 W; P) k: g) ];--- Testing ---0 _) {7 d; T+ ?# X E$ k' I# l
& ~) p0 E, _9 @) I# v, D
base 0A00000h ; 自动转换文件地址为 SL45 内存地址# {; j5 B/ i3 Q, v* D u
) a3 ]* i( z! c$ m5 G
#ifdef ME459 s' B3 ?- y) a- s6 N0 \$ S
#include me45.inc
2 ~% n8 O; p$ _#else
0 C5 S; M& L& b6 \0 `* {7 E #include sl45.inc
7 Y' p4 g% c2 K" V% U! R# z( W #define FreeRAM 37h:3600h
7 b" B5 z9 m" L! h& e #define memcpy 0c7b384h
5 x" K# R# E1 g6 ^$ m# P, ]; r( H#endif
; K: O* D% r5 F' [( ?! D
) r( y$ `( X% O" K4 W3 Q, u0 P( |2 b;#name TST. Test Patch ; 补丁名
5 C- q* {& I1 a4 b* Y( [
8 a! ]' V1 d3 L1 \+ t5 z, d0 _' s'Firmware : sl45v56; F0 g3 G* Q8 d @' p9 L% |. f+ I
'Author : rizapn
/ `5 Z( J. E5 p'Updated : Aug 18, 2004
5 E, G2 ~& `! F; k: d% I- F
8 k6 _2 {0 K" \. {( horg 0c7e000h
9 x# b( A% v; f2 {! U mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移" R, Y8 e% F3 U# S4 C6 z! s
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
9 ~2 u m1 H% d' _" R extp #p(data2), #1 ; 跳到 data2 页
$ V5 x( L/ m/ s8 M. b. l movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)1 f9 ?3 Q( N! L' W# e0 D7 Y
callr sub_1 ; 页内调用
7 c6 l6 O/ Y5 O& n9 P0 h movb rl2, #'A' ; 得到 ASCII 码 'A'
! t2 I1 b* T9 w# h4 v- w+ i: Aloop_1:
0 V* a& [; ~, N( [( U mov r2, #1234h `5 d8 Y# }3 N, ]) F
mov [-r0], r2
5 n; d% U, |: d1 L. w calls memcpy ; 调用段表示的子程序2 a+ G5 [+ M4 t6 `! t9 q$ C, }
add r0, #2
+ N% ~" p; v% v5 @% |0 y* |+ K jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处+ Y( ~' D9 f3 u; P" T. [
rets: k9 }! n) P U, \
1 F/ T' C! d0 U! T+ z
sub_1:
2 h) Q. m8 b% K" H# r' p, J mov r4, #1234h$ L1 q$ C* `8 U) b) H" ]
ret
$ W+ W+ C! V" x1 c3 c9 C) m
- M, I7 s6 [8 n$ U6 odata2:" Q# M- `9 ?- s( y3 |$ H
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
- j" s# ~ y2 @! [3 p# k# ^# @- {8 e0 }
end
, j+ h. ^: Z0 q4 x0 Q) `: v9 H
7 y, |8 c v3 y& I;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Q1 B, o3 p. L2 b- e) T n% l) r9 J5 t& u9 W
Allaahu Akbar,2 u9 }, ^; Z) }$ }+ Z
RizaPN <rizapn@yahoo.com>
# @3 G/ w! C }9 R/ CJakarta - Indonesia
! J5 a$ I* E3 ~+ p L& |/ X! a. `; f$ y! E
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|