- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:. L% S( {9 V9 R- m2 F' t# g! D4 J
3 E( @" d- [4 c. g+ o
简单帮助:( g; O2 p' L( e0 t7 `) |; P# @) W8 V
====================
6 [+ e5 a2 _" m$ m*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。+ r: Q* N8 v" G5 Y3 X; M5 K
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.' @* d J' S, G% D
7 Y W! X( o/ L. ^( n+ ^0 Q7 t* }/ y- p7 t5 U# m- j5 G/ N& W
搜索空白区:
+ {% o+ u% d0 b=====================6 C: H* o& Q5 P9 v+ z
> sfe 0 ; 帮助
1 v' S8 F2 ?, ]1 A, J+ M* j" s7 i: d5 ]> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
/ e9 _" Y. K$ l: ^& l: n0 l> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间
9 Q. O& K) j, Z/ k9 k# G& ?+ z7 R7 I5 |8 _% m8 P& g6 P% j
二进制拷贝:
1 V% s1 X# X7 P. W) C============5 A/ n- T8 k8 m0 |" i* h9 ^; L! m
> sfe b ; 帮助) p; K5 ^0 v* r
> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin- J/ L0 j3 P) U3 U# b7 X: W
> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin( C M8 D: i9 p- B6 `
> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin: x* ~( J. ^- W$ v4 b0 z
> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x2002 i. Y+ w' e5 a$ _) v: c
9 ~7 Q+ v& B- s3 G
比较文件:
5 h- b' S$ Z: }+ o5 l% O* W==============
0 A7 Z- L: M# H9 j4 J0 f2 G; _1 R> sfe c ; 帮助" b4 @7 n0 H" i' m
> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin
8 G0 E% A5 {& I# t* N. D+ a. t4 z> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
6 y3 y' ~5 u8 U5 w' A) z> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes6 X" I8 n: n0 s/ g) q( n( @
> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
! T$ r" M# I/ g: q5 O7 r> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000
4 @6 V% N0 \8 a& K> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes& s- i& N( \6 a N
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)# Y" n# ?& G u$ X+ R8 n3 N) `
. w# O5 a$ U, ?/ z+ ?8 h- a; c8 h) `
发现16进制的地方:# K# S y! C; \4 @
====================3 K3 M4 c6 c- p4 f, W- J
> sfe f ; 帮助% u) ^4 H4 i1 K- {8 e: X5 }7 j/ i9 f
> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
: I8 b6 H' w1 O$ `5 l> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找* P3 O, M7 o) d R& t! R; g. ^
> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes/ y: ~8 a5 C0 J e
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找# \: @7 j O6 w* [0 l9 X" s5 j7 _
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
" u2 \( n* `' v J" P> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes. k( j( o2 W7 E- j6 i6 `& B3 p
" v# f, e( S3 R1 C( W& k提取语言数据:
& _! W8 |' G% d1 t======================
3 g( y3 Z6 r7 P6 p; V> sfe l ; 帮助0 h! A. q% ?; E/ u- d; F4 U
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据
' y# j I* W5 {4 Z8 y> sfe l src.bin 200 ; 显示 ID 200 的字符串& {' t2 G# Z: J+ ^6 y
> sfe l src.bin 200 2 ; 用第三种语言显示字符串
' O5 w2 F0 Y1 t> sfe l src.bin -1 ; 提取第二种语言 s) X; S- T) N' x
> sfe l src.bin -all ; 提取所有现存语言
+ A/ f. X1 E H m' a> sfe l src.bin 'Testing ; 转换 'Testing' 字符串$ r; G2 g7 Z$ ^2 O# B+ N( C! a
> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)
6 L& K3 k. C7 T, k> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本# n/ y$ S5 f$ U( i" r$ z
> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 0 G( Y' h% s* ]* a
> sfe l test.lng ; 检查test.lng 语言包5 J! I5 n% Q1 S" r. n: P2 j) y+ m
> sfe lc test.lng ; 检查和更正test.lng 语言包. R. y# T, H2 d
9 i0 d7 C, `3 v( N3 V
提取菜单:
, I% d' N1 v9 @- }' o+ s! n3 v=============
/ e* G9 S8 n8 u4 l& }7 b> sfe m ; 帮助
7 N% { N2 W8 C7 V* L> sfe m src.bin ; 提取菜单结构和入口
' P; d" C, [" {& O! c7 }$ M
( i: T8 h) p3 }5 S1 T+ u2 k4 d" r. x6 o/ ]+ c: s
补丁:
) k* J1 k- l( _! E F; Q1 d=========
; n8 C. {# H9 K; |; q> sfe p ; 帮助! U; ?2 z& r" T, z! s
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin/ l4 j7 {" Y% F/ v! N1 R
> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
5 w; r) A8 \! l7 _- f7 D' ]> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
* K: y; S! x# H+ ^# Y. ]9 e: m8 t1 q7 a. o: J% ~* Q
, N/ p) |2 i( z* f, I) S
编译:8 B5 K+ G1 t* s% K/ e/ q, b
==========0 M9 P' m8 D G/ U
> sfe a ; 帮助/ Y- a' [, {! H6 F" ?6 A; Y2 I
> sfe a src.asm ; 编译 src.asm! X; _$ @ o2 L2 l2 I
> sfe a src.asm d ; 编译 src.asm, 完整输出
* P& v& z1 H; N8 m( w> sfe a "mov r12, #1234h" ; 单句编译( X5 j4 r! o3 W. j
> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译) k- [8 P0 _; h
> sfe a src.asm,TST ; src.asm编译成补丁格式" ~$ G1 E8 V' |/ {8 r
> sfe a src.asm,TST p ; src.asm编译成补丁格式1 I4 W# a9 |4 a" Z' s
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行. @: ^( o) [! @8 L6 K* Z! H
> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000. c" L9 g+ h( U* P
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
/ ~3 R9 N1 r! e- A7 l, H1 W2 I& H9 S. `$ C" i. M
*) See Assembler Part to get more 'assembler' function detail5 a! H$ \3 a4 ]* x
, j& Y0 F4 E2 ]- Y! j! K+ B2 W
5 O( W2 @! ]' N% b! P$ D0 [6 x2 c9 ~反汇编:4 o, Q# m" o& h
=============8 W! g8 S* `+ w& `0 h# W' s' S
> sfe d ; 帮助1 D* C% U6 S3 o1 R
> sfe d src.bin ; 反汇编 src.bin3 C' i8 M7 G1 n' w0 M" O
> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin5 T/ x$ S4 {7 \; _9 D3 v
> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节3 u/ b1 s% k8 i$ F! x9 V" m# K
> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A00000+ v7 e! }& N0 j8 u
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止( r) @) x1 ]8 X4 S% I2 f; P1 l2 u: ~
> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址# f& S- z% ?" p; F
> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件/ I! c4 U3 u' W6 J+ n9 _9 m+ Z
> sfe d image.bmp ; 单色图形汇编输出' ~& l, h9 G8 V. E; j
> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。
: v9 Z' p4 e% y) X+ ^& c2 y4 c, K* y2 G3 r$ ?& X" O
调试:5 f9 M& r. y& G* O8 v: d
=========8 p& A. X% Y* ]: W* Y: k* g
> sfe r ; 帮助7 T6 C, Y; S, h$ v' ^: I* @
> sfe r src.bin ; 运行 src.bin3 X4 u, D; } T# V) Z& J
> sfe r src.asm ; 运行 src.asm 汇编文件
' S! s) E2 C. m; h! h' r> sfe r src.asm ,n ; 同上, 正常输出8 P/ `5 l0 a" B* c3 `! U* Z
> sfe r src.bin,200 ; 从 0x200 地址开始运行/ I0 h- p h' L( F% M
> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x2003 |* U- s S- j
> sfe r src.bin b00000 ; 以 B00000 为基址运行8 ~9 }7 k+ b3 R
> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行$ j4 W' c& d7 u* Y. Y
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, V' V' D! {* [9 D5 |5 b! K7 ^" ^8 U6 W
1 l& d2 Z- O& j" W; f: z
交互调试:# n! ~% Y& l0 U G* E
======================* V+ ~' V& H" T0 w( r1 w" v }; R
> h ; 帮助1 P' @( R1 X6 p; ~6 g7 s
> g a00000 ; 到地址 a00000
/ }$ L% a! S" D6 Q Q> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)
' R6 t5 l( b4 M0 A> d ; dump 内存 (现在地址)6 J* ?+ T# S( D& [0 T" f
> d a00000 ; dump a00000 开始的内存0 o: `* O: [" y$ F
> d a00000 200 ; dump a00000 开始的内存, 大小 0x2008 b, n8 [/ \8 d# e
> d r ; dump 注册
. v6 L/ v8 L3 z: j! o$ j; T1 c> a ; 单句汇编# X1 N( B! C$ @; g$ H$ y3 _7 F; f
> a c7d530 ; 单句汇编地址在 c7d5307 u/ I' i" O" h
> u ; 显示反汇编
: E) n) C5 c. H8 s> u a00020 ; 显示地址 a00020的反汇编
4 E1 ]1 w# ^" i5 e! @; s> r ; 在现在的地址上执行一条语句
8 Q/ o' q- b7 \6 R2 P> r 1 ; 在现在的地址上执行一条语句 (跳过call语句): t! f$ C, p6 x8 ~& \$ ?
> r 0 ; 运行到返回语句
/ Y! Z( I- n: L, n> r -c7d580 ; 运行到地址 c7d580
/ |! A! [3 P$ J/ j+ s/ b' k8 z> q ; 退出
, u( r7 ?0 S1 s7 L6 ?1 o0 }: N7 @
2 P. v& u9 E4 C9 a*) 所有未声明的语句都会改变当前地址。% J8 k( s# i9 g& o
9 X! i2 H/ \' g0 e
" w- L9 ]. V; U3 y
特别的助记符:
! v8 i1 C- `. N5 M% K, F7 l) ]7 g============================! b8 f& K }" Q. O
*) 所有C166的汇编格式% [5 P' e' k8 |4 q4 D, J
*) 分号用于注释 (在一行的任何地方)) k: i$ d( y1 M0 f
*) 特别的助记符如下 :* o& K8 O! ~/ z- w% [3 D
#include filename ; 包含文件(各种定义). F3 \( A4 V' U, _4 ?% u) j* A
#define var value ; 设置替代变量 var = value' B% |- f8 h9 \: W4 x6 B
var equ value ; 变量取值 var = value
* M' K- Y3 j+ K9 ?* l+ y) q' y1 f db 'X',36h ; 定义 byte(s) 数据区, B* K: r5 T8 i2 s! G. W
dw 1234h,0,'AB' ; 定义 word(s) 数据区- q C4 \# h3 s: e8 Z- @$ J% e+ p+ O
org ; 设定当前地址, U% p# U' ~3 f4 `0 \) m1 U
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)( u5 E! v0 E5 l) N5 c" ?
end ; 结束记号
1 H9 {* X# p% B. i, ]: Y# M8 u/ D ;#name XXX.string ; 定义补丁名称 (XXX)7 \( d8 q/ T* j1 `' Q: F3 o
' ; 注释将一起进入补丁; a5 ?: z* w( U: t2 E+ Q0 T" C. M7 _( L
'' ; 注释将一起进入补丁,加回车# r8 a$ f) {6 u
'; ; 以下内容将全部是注释,直到出现 ''" \, q$ _, C }% n
;' ; 注释将一起进入补丁$ R) t7 K$ W4 I1 f3 H
+ - * / % ; 加, 减, 乘, 除, 求模 操作& v) h o8 w# m8 {+ r$ |6 `
>> > < << ; 右移左移操作
: W2 w* [+ }: s# B& X2 ?, p" B) A & && | || ^ ^^ ; 与, 或, 与非操作
9 g3 q0 a% A2 Q( l7 `$ ?; q val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)
, ~3 n! f4 f" q. N# d: U: y6 B! |* } page(value), % d( ]- N3 \" P
pag(value),
0 |% r4 r( s( ?" q p(value) ; 页值 (= value / 0x4000)
0 ~: f" o% I+ F; l* Y& i pof(value),/ p7 g% [) U' t& U6 m. H j% Q
q(value) ; 页偏移值 (= value mod 0x4000)! |0 I/ P& _& I( s. C
segment(value),6 t8 m- @* E3 t5 q; S
seg(value),
/ g+ a( }# k6 @6 k# \6 Q* _ s(value) ; 段值 (= value div 0xFFFF)0 z& F% y- |' K& h q2 k# K) L
offset(value),+ q+ C, S9 [# ]: H
ofs(value),* @' A" R" x3 ]/ q6 K( o8 q3 x
sof(value),
2 P( d7 f( F8 \3 S' a; u: s) j; h o(value) ; 段偏移值 (= value mod 0xFFFF)8 K" o- N) H% k- C) T1 m, {
9 m( C% f: ]0 a* O1 r, y( o*) 例子:0 y9 K# ]3 ?; S: F
5 _5 ]( M4 |1 j;--- Testing ---8 t% a0 Q8 e" W( i
) g. r* y& E2 o7 G+ ^
base 0A00000h ; 自动转换文件地址为 SL45 内存地址
" V0 l* H% f: A8 s( Z+ y- O, @- ?6 b" m4 u7 L; w
#ifdef ME45
% Z! f3 I0 Z) L0 E( Z #include me45.inc2 `$ Y6 U' j7 {' v* t. _* }
#else
% g/ c9 F/ O, G$ m' Z/ F/ k$ d #include sl45.inc
" o" q( O+ F2 b" _$ B+ e1 v! h #define FreeRAM 37h:3600h
+ C j3 v, C5 P; o. z #define memcpy 0c7b384h) m4 u% L: t8 X* m- ]. a& G/ ]
#endif
& G# o% R$ g! z5 T7 M3 U- N0 G/ U4 T
;#name TST. Test Patch ; 补丁名
8 ^4 I) H5 f6 Y! C* C2 h5 u u& ?* d; \
'Firmware : sl45v56
% I8 B' \& T$ ~0 v. c'Author : rizapn
; ?3 X1 ~- \7 n$ b'Updated : Aug 18, 2004
5 }) o5 c- |! y+ d( t& i% p' R6 J6 _ B O, ?
org 0c7e000h) F- \4 P8 ?* Z3 W. P; k
mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移: z. H4 D2 S! @: F! p
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
/ H5 l) m5 r) E- q7 ^- O3 ^) @* J1 d7 o extp #p(data2), #1 ; 跳到 data2 页7 T9 h+ {) e. ^$ p+ r
movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)
. |( ?' _$ g' C/ y5 s- z callr sub_1 ; 页内调用
' [% }1 R7 D! E' C6 w @. u movb rl2, #'A' ; 得到 ASCII 码 'A'8 G9 v# }3 K; O9 _6 o. R- S
loop_1:
4 U3 v$ {* L7 \4 p9 i( M$ T mov r2, #1234h
1 n; H5 w5 A) P3 H& e9 r: u# a, E8 D mov [-r0], r2
. g$ n8 {" ~* ]( z calls memcpy ; 调用段表示的子程序6 H. C! ^8 w9 T+ C0 x" R
add r0, #2( A9 Y" w# f2 L( B }2 J
jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处% _) ^) W F8 ?
rets" @4 f$ {- p( E9 S! k
' E$ q3 O Q0 C7 R8 t G
sub_1:
7 ~. U5 H$ o0 V" [2 W- v mov r4, #1234h$ n1 U8 [: D L6 p6 A( q, l) W
ret
- b O: K( E8 Z: N3 A6 `
# R. r; Y! M2 l' E' P) ^data2:! z2 n$ R! Y9 G4 }' h* f8 j" V
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区6 H! d! W1 [9 i& Z. A" q3 x; y7 |$ F
" j3 T' a4 f7 d5 D
end3 }/ X1 N' L Q8 e G5 L, U/ \
7 H3 Q# G$ {2 }3 ^0 u8 M
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/ b: B# b4 j" i
" M0 @/ o! X' g7 y/ I. UAllaahu Akbar,3 i# ]* h' g5 S
RizaPN <rizapn@yahoo.com>1 N2 j3 \' o* X+ ]
Jakarta - Indonesia/ N1 [2 ~+ O! N; O
$ l! Y0 H7 q! U
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|