- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
3 w" D, \2 e$ k7 u: w. n8 G& B4 [2 @8 P# k. I
简单帮助:6 U z' W9 \9 o1 o8 I
====================3 Y2 x+ L" x7 U2 E& U0 Q3 Q n
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
1 H: @4 f' W9 R( y*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.& g: n" L, C6 U6 S5 o1 c' b
7 v n2 I- X$ E- Z' y
) u6 _& p9 X5 h搜索空白区:/ s7 g7 \" f4 L. C5 d
=====================, J/ m4 U, Q( ?7 b8 p% u" C. N
> sfe 0 ; 帮助0 U ]& |2 U1 c) R* t
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)5 R; [/ q; K4 T2 l
> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间' x" R' Q* f; K1 o) b& Z
* h! X* a6 c: F8 o
二进制拷贝:
4 d M: F9 D& d/ Y, [============( I9 [$ ~4 ^& p- @
> sfe b ; 帮助: p, o* e6 B2 [
> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin
2 y# b- R- Q; P y> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
# H+ L% K% F; W& L: F> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin3 l9 z3 M; A( O3 n1 d, t0 N0 M& q
> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200/ F0 t) N) r* ~; N
. E- J7 W3 T" `; [. C
比较文件:# t( H7 g G/ ~1 Q! D
==============) s% z, j2 n2 d1 K; k: L* K
> sfe c ; 帮助
( n+ k) Z8 x% ]+ n5 U$ |/ v: R. Q) i> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin
$ ^- Q$ C8 W) K6 _% a4 q9 @> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
! r+ E6 a V% {( w! S- z3 |> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
/ u2 S- W" Y: k# F> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
9 G8 i- A6 H3 a# g> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000
4 T8 o2 W' }$ z! s$ W* j> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes0 `! h) O& g+ s# S) ^( `
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处) r) U% Y% i" A1 h) o) W
4 d: k* R4 s, a( \( S% v: Z
发现16进制的地方:: r k) l! i5 ?# L4 F
====================
6 _0 E) P$ V9 t> sfe f ; 帮助
& u. `2 S( @& w9 a- D6 Y0 G g> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
$ C. o \+ y/ ~1 T2 g> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找
4 q$ v& F( u U> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes
& g) @, T3 ?: u2 x> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找5 d8 |3 t$ O3 ?3 Y
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
+ N/ T/ w2 F' U0 M% m; ~ |. i> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
$ x+ d% f' |2 a' s7 W/ N1 Q* N
提取语言数据:" W& @3 S/ x# K
======================
' C) P2 V9 O5 R# x> sfe l ; 帮助
3 Q: J; a! |) g7 q' ]> sfe l src.bin ; 提取第一种语言,包括扩展文本数据
0 ]+ ~; O& B; O% p> sfe l src.bin 200 ; 显示 ID 200 的字符串
2 {+ N; A# g8 x- i> sfe l src.bin 200 2 ; 用第三种语言显示字符串7 r; B/ J* P! q
> sfe l src.bin -1 ; 提取第二种语言
. X4 F# G/ Y! S$ C l' G> sfe l src.bin -all ; 提取所有现存语言& N. E4 x- E. D9 l7 g' A
> sfe l src.bin 'Testing ; 转换 'Testing' 字符串1 P( d! x @9 J3 @
> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言); F+ k) V0 a2 l6 {( W( g
> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
8 k& n* Q% m8 ^+ C9 d> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 9 r$ I; c0 @2 E' |( ]7 u+ O
> sfe l test.lng ; 检查test.lng 语言包8 S6 |# A" x7 r, n. `
> sfe lc test.lng ; 检查和更正test.lng 语言包
9 ]: s+ B) T9 V
7 p3 z8 b, p( ^: s# V/ p' K1 P* T2 a+ u提取菜单:& @; C2 r6 V, H4 ?5 y- b
=============' h; Q; O8 M: K
> sfe m ; 帮助1 P2 y* t: [' z" P/ j1 m9 r
> sfe m src.bin ; 提取菜单结构和入口
4 ]% f' i1 u( w2 b: e3 ?
( @4 ]7 e. y7 z4 Q* F# a
6 S% e8 G! W( L补丁:
/ c% o9 \; W2 v; M=========/ |; N; T6 c! `0 v/ l- V
> sfe p ; 帮助4 C+ e) o, D2 Y' v
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
5 e! C! \3 K2 y; _- C, j! E4 G> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
, p, g7 f+ f" r) u1 m> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz 0 o7 q: `8 n5 G# x- v% o
; U, g6 ^3 q0 o9 l& Y
$ R- I( O( \) T m1 O8 y' N编译:7 f& Y# e2 K# ]
==========
Z) A9 D) E" f> sfe a ; 帮助; ]2 c& e- P) I( c9 [7 V N& s7 r0 n
> sfe a src.asm ; 编译 src.asm
4 |$ \/ h# s' [3 n> sfe a src.asm d ; 编译 src.asm, 完整输出1 e. L8 r- A' ~# v1 j& u# t9 q3 H
> sfe a "mov r12, #1234h" ; 单句编译0 {9 j+ i! ^! w2 R
> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译
' j4 k' U6 @4 s( E2 R> sfe a src.asm,TST ; src.asm编译成补丁格式
0 ^8 b5 r# N: P8 l3 V+ {, R" O0 W> sfe a src.asm,TST p ; src.asm编译成补丁格式* [: t" C9 g8 u8 U3 ]% T
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
' N" t9 ?, c) Z& {, Y> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000# v, a0 Q5 J/ w) n
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
9 T9 @1 p& H: n3 I3 u, {6 D# t# n9 P! j: q7 o% n1 v* v0 B
*) See Assembler Part to get more 'assembler' function detail
# ^! e, B+ l' b: C# }9 B) J. G8 m1 J. a$ J1 \7 H+ j
* ]7 A: B) x# H6 i反汇编:( @- r( r% E. `1 `' T" U
=============
5 J+ O; E% t! A/ U6 G2 Q3 W8 t+ c> sfe d ; 帮助
1 B+ C$ I1 f! h> sfe d src.bin ; 反汇编 src.bin
& P) S+ b: ^' ^" T7 V% y: @> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin6 O. T5 x$ W( b7 T1 G ^# y
> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
7 G$ B% k$ o; J# L# U4 T# \ H0 k> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A00000) E& J2 i" L7 S5 R
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
* o2 p" V* q; T; S> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址0 u: t- ~7 A, i- N8 h$ v: p
> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件- J9 G; U1 B6 t
> sfe d image.bmp ; 单色图形汇编输出
: n1 F- X9 J2 r7 F3 {0 ~! ]> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。/ f2 D. j: s+ m1 B* ?4 m, ^( o
1 p# A0 I/ M+ `2 n, a; P! B- ^调试:- r& _$ j2 d9 M# p( Y% |
=========
' Q# G3 p. t ~6 W' A2 |9 h3 \> sfe r ; 帮助
- X' a; g8 v% D: L$ ^* V9 {4 {> sfe r src.bin ; 运行 src.bin. ~4 V" ^1 u& A% r' O, a( {
> sfe r src.asm ; 运行 src.asm 汇编文件
( `8 F% j( S: Q! E( D4 Y> sfe r src.asm ,n ; 同上, 正常输出' d$ |8 p/ ^! b2 E
> sfe r src.bin,200 ; 从 0x200 地址开始运行
" w% x" i* N" T2 E> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
8 `/ _0 G* L! ~3 d+ W3 b. v> sfe r src.bin b00000 ; 以 B00000 为基址运行
+ l! c6 a* v z1 C9 y" S8 B6 p> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行3 T3 T, N. n+ G9 G* `& K0 D" H
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
, h$ F8 w; m. f* Z9 g. H- m
4 u9 f) B; U( _' G/ M' X* |$ W+ N& R
交互调试:
$ M R9 F' D) Q1 v$ f' c======================% g! L. i H: F% {
> h ; 帮助2 s0 [, Z0 }2 h
> g a00000 ; 到地址 a00000
) I, f; ]9 N3 z% P> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)& `& X6 `1 L: d+ G2 Y) {
> d ; dump 内存 (现在地址)
F$ p+ u+ K, X/ k> d a00000 ; dump a00000 开始的内存5 r1 V( o- x: r0 [5 e: K$ @
> d a00000 200 ; dump a00000 开始的内存, 大小 0x200! `/ i/ {# i, L# \
> d r ; dump 注册
- n$ @; R9 N6 `9 V> a ; 单句汇编
5 X. Z4 _. I# a) S* _* O; _> a c7d530 ; 单句汇编地址在 c7d530! x: C% Z; n9 U! L0 e
> u ; 显示反汇编6 b* C4 `8 C8 h, y
> u a00020 ; 显示地址 a00020的反汇编; s1 m$ n) X+ b) H1 ~) L0 Z& |7 C
> r ; 在现在的地址上执行一条语句
6 S, L+ ?6 B$ V/ o# O> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)9 y( l, O4 u6 |+ {0 o. Y$ a
> r 0 ; 运行到返回语句
9 B# ]2 e! \+ F& T2 O7 T> r -c7d580 ; 运行到地址 c7d580+ \" Q! `% W+ y; t# C% ?
> q ; 退出+ e# s6 I: z! c4 }0 q
% G5 P+ T9 A& T+ ~
*) 所有未声明的语句都会改变当前地址。- i- u- _( ^- K
8 K4 J! E# \ u/ H
% x" r9 M# O8 v4 c5 e特别的助记符:; c: o7 s8 t" `0 G% A
============================
( \! l3 r. a+ J0 }6 G5 f) p*) 所有C166的汇编格式$ P$ W1 V/ {: J' L, D0 p
*) 分号用于注释 (在一行的任何地方)
( e/ H' H' D1 F* R" K*) 特别的助记符如下 :4 [$ v$ t- \0 n* }
#include filename ; 包含文件(各种定义)& Z; k/ E3 ?3 @0 I
#define var value ; 设置替代变量 var = value
* S9 M+ L' q/ U+ D; l$ k$ S( E var equ value ; 变量取值 var = value
3 F: n3 ~/ \) P' L8 i: k db 'X',36h ; 定义 byte(s) 数据区
) L6 S. H5 p% U1 m$ m1 @ dw 1234h,0,'AB' ; 定义 word(s) 数据区
( _3 c0 }/ \ }) N org ; 设定当前地址$ \* m! l# D6 e9 g
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)* Y7 W. e4 t8 K, c" r+ O
end ; 结束记号" @9 g) V* M# m4 l H6 \) B
;#name XXX.string ; 定义补丁名称 (XXX)% a) ]- u3 C, F6 t
' ; 注释将一起进入补丁9 d* q, f! @% r( `6 g( ~0 O. m
'' ; 注释将一起进入补丁,加回车" f! e1 N1 U# p0 L7 B
'; ; 以下内容将全部是注释,直到出现 ''6 T" D; `' |3 J1 R. h1 u
;' ; 注释将一起进入补丁
# l# b0 k4 A0 j( Q/ B# a& _ + - * / % ; 加, 减, 乘, 除, 求模 操作$ a) O' L" g- ~. Z6 z% c* G
>> > < << ; 右移左移操作
0 B- T: Z9 @ G! W# v & && | || ^ ^^ ; 与, 或, 与非操作
: S0 W; ?; z4 W5 }2 C% q val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)5 W' Y E4 w c, m0 `7 G
page(value), : b3 f! j: h: J& \4 j( I o
pag(value),
9 C" b( C) k$ [( c/ b9 t p(value) ; 页值 (= value / 0x4000)
0 U3 }$ A$ E0 | pof(value),
8 G4 b/ p: F2 Z9 X3 e/ e q(value) ; 页偏移值 (= value mod 0x4000)! e( L5 t* ]$ q; I6 Q
segment(value), m$ [+ _7 c" b- s! S! B d+ h
seg(value),) X: c' }# p$ H8 ^
s(value) ; 段值 (= value div 0xFFFF)0 ~/ L. F* J' e* _, B/ e) ~" U) O9 M
offset(value),1 u% P/ g, O9 y
ofs(value),
$ J0 ?( [: G d sof(value),. W5 Y$ ^# p! I& R; k3 T
o(value) ; 段偏移值 (= value mod 0xFFFF): O9 I k5 e# B: ~" g8 ]* y
: R0 X: ?7 q1 _- Q7 q- j
*) 例子:8 e) A: P1 P8 o2 Z7 y8 Z
3 r7 h5 u- A4 ^# [$ h
;--- Testing ---
) u$ B7 a8 ]9 x* G
" o3 M5 |4 ]7 ]; L: n' dbase 0A00000h ; 自动转换文件地址为 SL45 内存地址
' p D9 o& `/ n2 V; j& a
, D& }6 y' C1 X8 _' ?1 x; m3 ]9 C#ifdef ME45
* R' q( U" n, y #include me45.inc$ R, e# l+ W( q' T& r
#else- V& t4 F% D: v; \6 M
#include sl45.inc# r# \2 [4 Y2 R1 Q
#define FreeRAM 37h:3600h9 p1 c9 F( Z" Y0 ]# L2 e( d) y
#define memcpy 0c7b384h
. ~( A) g9 B1 c$ M& i#endif1 _' t+ n& M3 A% u; c" b
( p* e: W. G9 L;#name TST. Test Patch ; 补丁名" b$ P4 g$ N$ X+ z4 y% d/ {- j
( Z8 U# j- S) |# l/ D'Firmware : sl45v56
m* b0 V1 O# E'Author : rizapn
8 L7 L% y* }! y' {, B'Updated : Aug 18, 2004
E: t: k' G% D( |* A
* [8 J# R# x. G+ Forg 0c7e000h
. A: X: T0 l8 b$ ^ mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移$ J+ k+ Q! F0 W; C- |/ ~
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
% A0 o6 {1 B, |# B8 A) q extp #p(data2), #1 ; 跳到 data2 页7 z: R$ c1 S+ R' v! D7 k" D& x
movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)" o. _+ x8 t; A( v7 S1 w% J
callr sub_1 ; 页内调用
! p8 ?5 w8 a T4 ~ movb rl2, #'A' ; 得到 ASCII 码 'A'& n1 d; p9 J2 L2 `$ N6 W3 P; Z
loop_1:
* C3 U; `6 Q d6 ]" @: A) n- E# ^ mov r2, #1234h
0 D' N% g% N+ v' S0 {% s( k mov [-r0], r2( v7 u' {! `0 t. F- q8 U0 }
calls memcpy ; 调用段表示的子程序% T# U) [6 s8 u
add r0, #2
+ N3 @) |) f& S' B( J/ L/ t0 I jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处
2 {$ w4 M: Q1 ~" U% g rets; d" W7 t$ H; e# {& o4 g
* j: M+ F; `+ a( x( p/ C: qsub_1:
+ X- m! t- ~% D5 z0 u8 J mov r4, #1234h5 ~" w; a0 \! ~, W2 S0 h
ret
3 C2 l& ?4 w R/ c9 l* q O" \$ n3 F7 U
data2:+ d4 X3 B" c1 b% a9 A
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
8 C$ J# c4 \' Q* o* q/ [ Q2 K" W, H, }: ?6 f0 {8 E
end9 R9 x4 ] W9 r0 G5 V
) }- g& J! c' ?; l
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
, Z( V/ o& w! z+ C' J d Z% c) H% {6 Z- O0 [% i' T: i
Allaahu Akbar,
; H4 M9 |2 W, n- q; {RizaPN <rizapn@yahoo.com>
4 [" i! [9 P% E' sJakarta - Indonesia6 \5 i5 e' |. H3 i
# z$ h" {3 p* {+ S8 R. M6 S
[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|