- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:& g8 Z+ Z- {! d
2 Y7 l" Z6 l5 ~( v- d( h简单帮助:) T" D! Q( `8 |. s/ g
====================
) C4 d2 f2 ~' a*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。6 ]" r4 C3 Y: m& a b% k3 T, [; |
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.2 w2 n3 g9 j$ x) R
( q2 j, Q$ [ `
" I3 x) @0 a$ x# p' U搜索空白区:
1 q M$ e/ w' M=====================" ~1 D% [ J5 G& V9 ^8 d
> sfe 0 ; 帮助 m. H3 Z! I8 o( e
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)4 g9 l- W/ l7 v" p2 w+ P
> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间% D( N5 l) Q+ U! s' K
+ }5 V* K! }- C4 B# G( F二进制拷贝:
& _* U/ K) q: K7 F1 s' d" X============
$ ~: I) x7 N" Z" U; J$ _- c> sfe b ; 帮助2 F; [$ T5 t1 P- L& a
> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin
9 @$ W$ O8 S. |) I N> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
! Z5 @/ E' M8 f4 a0 q4 Z! j> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
: [. y, T6 z4 a$ T6 V- K> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200' p! b7 G5 Y7 G: P. X+ j% R
9 C- @5 g- X( S
比较文件:
1 B- c; Y; J: M6 c- L# [2 O==============# {; a, \7 G( F. K' A8 _/ N8 s8 ^
> sfe c ; 帮助* Q, G+ s+ O. P" s4 w, ~
> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin
: N' j! l' k& V" g> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )9 P$ D7 A2 X* X9 b# {
> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes4 I: U k) @+ O) u" t, {, k
> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 ), i: m9 G3 j! X# u
> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000+ ^; N8 F- t2 B
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes. C" ?! M0 G0 d
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)
8 u( P0 k# w/ L$ m& T5 u% M2 C1 G# e) A& |$ Q7 q! l# H. v9 C" B
发现16进制的地方:
# L* E% v2 v8 N) j! R====================
. M* R% _$ o; ~6 ?, @> sfe f ; 帮助
7 M8 n$ I+ P( u- c7 S& L' t> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
# U% M) |4 x; R+ ^> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找6 X* I6 I) v9 [# A" |
> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes) b/ J9 [2 ^ p7 \7 X- M
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找5 I' b% B8 f$ W$ E* V% \( p
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小$ ~8 w8 w- d. p+ }( Z! l7 D4 j
> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.4 B9 g. Y' F" ?+ w3 d. R
8 k$ H5 }: A: k: C8 b6 d提取语言数据:
& g) W* w" n2 o2 b: d" _) g! M( d======================# G+ Z8 A Q7 w0 ^1 U
> sfe l ; 帮助: J# Y/ }" ~; @5 r& Z' V& S; `
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据
+ y: q- I2 r4 h- f# m" O> sfe l src.bin 200 ; 显示 ID 200 的字符串9 d! V' }4 h* `. m% M
> sfe l src.bin 200 2 ; 用第三种语言显示字符串
$ {) o/ ]8 s* g5 C5 w> sfe l src.bin -1 ; 提取第二种语言 J3 |8 ?; @; V- G4 S# K2 K
> sfe l src.bin -all ; 提取所有现存语言4 D, R( [8 w; f% ]7 `4 ~
> sfe l src.bin 'Testing ; 转换 'Testing' 字符串
1 t, z- s- ]4 H! R' N- Z> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)
7 |: @1 X5 C! } V' t> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
1 t( v5 A o# {) u: D> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁 Y: p* w' d$ X
> sfe l test.lng ; 检查test.lng 语言包7 m2 b, m& {* J0 [: ?. ~
> sfe lc test.lng ; 检查和更正test.lng 语言包
5 d4 Q% E/ M m9 D
4 c6 Q3 X% E" Y2 D( s0 }; n提取菜单:
5 I! h* y2 J( C( g8 R, O=============- e- i% Z, D/ ~: n$ b, }
> sfe m ; 帮助& v/ {/ ?, F; E7 y! g! b; M$ s- w
> sfe m src.bin ; 提取菜单结构和入口# z5 D X7 p! ?3 C/ f* h0 Z: o( {
. `$ Q% _' d8 X" F+ ~6 G7 ]9 w4 k% t; i' v, @3 d" R5 E
补丁:. j( ^& O5 c; T# F
=========0 Q+ q1 G( M% [7 y$ i
> sfe p ; 帮助1 K- K: X5 D5 H+ m1 B4 Q, _1 u
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
5 Y) V! J2 f0 g> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
& N9 x% k- U& v> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz * l- S' M" t* n) O: a2 q$ @% X
0 d# l6 ]2 M; h, s7 n1 [& a8 c. c9 j; K8 F" [' |8 t3 }
编译:
|/ _- _# ?! y! d. k! s==========% T0 _( [$ v. n/ w7 d
> sfe a ; 帮助
. J8 h2 ], N5 N7 S> sfe a src.asm ; 编译 src.asm
; e4 S6 S, j& H4 M$ X! ^> sfe a src.asm d ; 编译 src.asm, 完整输出( M. b9 ^+ C' V' L. Z
> sfe a "mov r12, #1234h" ; 单句编译
3 d5 { {2 {6 x$ c w: C" p3 g- u> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译1 @ O. b! E8 J! N6 _
> sfe a src.asm,TST ; src.asm编译成补丁格式
3 A2 R1 f) I8 a% H- H( Y! q4 ~> sfe a src.asm,TST p ; src.asm编译成补丁格式
$ k' e% K, \& {! A0 [+ d Y$ p7 x> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
4 e9 x+ T0 q# R; V> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000, H9 N7 D- K0 I% V
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。7 C2 n6 R; n U/ Y- o
8 P5 h% o7 z: u
*) See Assembler Part to get more 'assembler' function detail
. t; x% H5 Y" G% R- X
, t8 h: d+ V. z0 f* I1 t2 J6 T/ t1 P$ d
反汇编:
8 y1 K/ z" M% D" v& y- @=============7 L& w0 @. Q; Q9 T* }
> sfe d ; 帮助
, i. R* P3 {4 H- k4 l8 I/ _> sfe d src.bin ; 反汇编 src.bin3 ?; ]7 p7 s1 N, G! M0 g: e U
> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin
3 B W1 b$ z& E> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
; Z. g0 f# |' x4 }7 s& C> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A000008 o. j3 A/ D- z8 r" @0 |1 A5 d
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
: p0 o* Z" [" j- X9 R> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址
- A. [9 O* b, q$ T8 H> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件$ @. I: S5 I. u4 D6 E% p
> sfe d image.bmp ; 单色图形汇编输出
' q$ f7 |7 U. D, q% d> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。# ~: J4 y; F! T" U7 X
% a% ~: Y' G$ B7 u9 `( E* L' y调试:
" O' s" B. A, e=========
9 |$ ]# o) b0 ?9 T6 V* `* C% `& |1 i0 b> sfe r ; 帮助9 w1 ^: j& t' T( J3 u% R& R
> sfe r src.bin ; 运行 src.bin
/ I4 J, W! H+ }' |( U b$ B; q> sfe r src.asm ; 运行 src.asm 汇编文件
, z O H( u2 t K% ^* X; p0 n> sfe r src.asm ,n ; 同上, 正常输出
, m! y7 w- r" s+ s> sfe r src.bin,200 ; 从 0x200 地址开始运行
- m [/ I/ N2 y+ P> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
' ]# X6 h& Z5 P7 r> sfe r src.bin b00000 ; 以 B00000 为基址运行
1 \( b1 V1 T5 L/ ^3 P> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行
4 d( E( t/ N) d> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
9 T- O+ b( g4 x, m! x( n: i3 `/ w+ S. I7 h5 }! k
+ ?7 P+ O; E/ y. o, d& ~0 W
交互调试:$ T( i$ R% P' h
======================# _- T$ N# B5 `8 g8 k) A
> h ; 帮助
/ b. G5 O/ O7 l& s3 \> g a00000 ; 到地址 a000006 V7 ?$ n' G! p& s6 }1 y8 a: H
> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)5 z- c" ^: G6 F1 Q6 r
> d ; dump 内存 (现在地址)
! A8 w ^1 \2 }> d a00000 ; dump a00000 开始的内存; I, L$ G" W) Z7 t, t3 u6 m
> d a00000 200 ; dump a00000 开始的内存, 大小 0x200
8 L8 } E: g3 }3 @2 e> d r ; dump 注册$ j! w7 P% A$ r2 ~) d
> a ; 单句汇编
$ e4 I# S# L& j7 i, I> a c7d530 ; 单句汇编地址在 c7d530" B4 G# O* T% C# t
> u ; 显示反汇编
0 b8 ?, X. @) M- S> u a00020 ; 显示地址 a00020的反汇编
$ p! J' E" `" K- ?9 J> r ; 在现在的地址上执行一条语句
1 L6 R$ g& _" b( Y> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)
6 E8 [7 t+ H9 ?> r 0 ; 运行到返回语句" f' _' H2 G6 O3 R4 [
> r -c7d580 ; 运行到地址 c7d5806 L$ }# G/ x! B
> q ; 退出
# s* m- [" Y: B7 a9 G. V- _% X1 T, F+ ]
*) 所有未声明的语句都会改变当前地址。
0 l$ O5 v* x8 M2 h2 |/ }" M/ K& ^* g& L/ R/ D+ M
$ q) W' ?- i- M+ M7 q
特别的助记符:
5 |" d6 D% G0 f) `) C' Y6 ?============================/ Q1 u3 z) G% p8 \2 I1 ?. y- |( N' a
*) 所有C166的汇编格式+ D8 |# x2 K7 F8 m
*) 分号用于注释 (在一行的任何地方)
9 E- O3 S. ?# N* M3 q0 [*) 特别的助记符如下 :6 Z0 z) L/ w1 b T8 N% X1 ~9 E
#include filename ; 包含文件(各种定义)% U2 ~5 O+ M# \" g2 r3 b7 S
#define var value ; 设置替代变量 var = value
. I- I9 h; I8 Y* k( Q/ W1 \ var equ value ; 变量取值 var = value. N5 M- b1 |, _
db 'X',36h ; 定义 byte(s) 数据区
! v. Y' P$ V# }; T dw 1234h,0,'AB' ; 定义 word(s) 数据区& H% q, q$ o4 X3 F' b, C
org ; 设定当前地址4 @& p6 x; H' Y
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址), ]% }, f6 L4 c2 U) u
end ; 结束记号
1 E+ y0 Q. ?$ M( d1 u! \# [ ;#name XXX.string ; 定义补丁名称 (XXX)" m3 d5 J0 f2 `( A1 I# |
' ; 注释将一起进入补丁0 G; A1 l8 ~: f3 J7 i7 v$ V* \ i
'' ; 注释将一起进入补丁,加回车
6 q) _% e6 i) V9 } '; ; 以下内容将全部是注释,直到出现 ''- I1 [( h. \6 s, ~3 o3 p# ]; O
;' ; 注释将一起进入补丁
+ u5 Y+ r# I; B/ Z8 }+ S + - * / % ; 加, 减, 乘, 除, 求模 操作
# }' U: [% e9 m8 ^+ t' ` >> > < << ; 右移左移操作
$ C* s' Z% ~& Q4 z+ O* j & && | || ^ ^^ ; 与, 或, 与非操作, ^3 _# A" k2 U; X7 _9 |4 f7 e% ~
val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)
/ j/ C2 _2 n$ n, g. G, J0 j3 S% r! u page(value), * H, ?5 {6 D. F b( p
pag(value),
+ Q- h8 L* G# R& \8 j p(value) ; 页值 (= value / 0x4000). t, O" d7 L5 C4 l; g, W$ J
pof(value),
1 t0 {, u4 J) E! R8 ?; P+ `. j q(value) ; 页偏移值 (= value mod 0x4000)
9 u' p% B4 u6 K" `4 L0 r segment(value),
9 I( o( y+ u' ?+ } seg(value),! T; ]7 u A5 Y2 w3 C
s(value) ; 段值 (= value div 0xFFFF)
5 b3 u* p# ]- } offset(value),
8 I9 _: a& h1 j0 {4 l$ O# O ofs(value),# a" R" F4 \3 Q1 W9 }) y k
sof(value),, e! z5 a" H" @! S+ g) c$ W5 F
o(value) ; 段偏移值 (= value mod 0xFFFF) g9 D& T5 ]8 F
/ t4 v, K& B: p: _7 Y) }$ u3 h*) 例子:
. P! T+ Q6 F0 W' l J7 P: }/ X: G7 _/ F6 v& U y7 q
;--- Testing ---5 Y2 S% I" v i' I* D
% W1 o1 @( \* e0 Y- a$ f' R+ gbase 0A00000h ; 自动转换文件地址为 SL45 内存地址. o" p* O4 g3 y# Q7 L
4 m6 e: G7 [0 h
#ifdef ME45
2 q. r+ I6 W$ D0 u& F: q/ M: p #include me45.inc
/ A* E. T; m) U3 B4 |9 _: O! P#else) x6 |. R4 }: {6 ~
#include sl45.inc
. F4 [5 u' [! X7 h5 X5 ]" I, O+ P# K #define FreeRAM 37h:3600h% t/ M, N# |" _; J, B
#define memcpy 0c7b384h7 f8 E- Z. V9 Q
#endif
( f0 M; x5 Z; c" F/ }! G& G; L& q" _( b. T
;#name TST. Test Patch ; 补丁名
6 R4 k( W! F+ p
0 W' m+ E) _; g- w& V8 n! S# g'Firmware : sl45v56) m7 O% n/ k) P( k7 k/ ]$ R
'Author : rizapn
1 h- v) d' D" m( p" P6 e, O1 J'Updated : Aug 18, 2004$ ^1 Z( ~3 @/ r& E; c
/ L7 Z w, a i1 ]! Torg 0c7e000h9 R( w7 V3 o) _- @2 k
mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移& ~$ ]6 m( H5 J( A3 ]* o
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
, h, n2 `" g- J8 [* O! N: Z extp #p(data2), #1 ; 跳到 data2 页: Y" A5 T5 b. M( c
movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)
2 ?! ]4 u( c) I# F- O5 Y1 S callr sub_1 ; 页内调用; U* T+ `7 n/ i# I3 E) a. {. P
movb rl2, #'A' ; 得到 ASCII 码 'A'
- M7 p4 P$ m; P2 [7 X$ A8 yloop_1:- c X" `3 `0 o( q6 t
mov r2, #1234h9 [1 r% ]' K7 s9 g
mov [-r0], r2" m) g A9 k: Z& D
calls memcpy ; 调用段表示的子程序
# h; Y: b4 S; k2 V7 t add r0, #2
6 Z# C5 N4 z% |, M' T jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处
0 p0 d; x4 Q" _0 N0 \3 ]0 ^$ A rets
6 T( ?- X$ I/ X. M: }4 F
$ G$ X6 L! `+ `, c; l6 W3 ksub_1:
* S6 I6 o n' J; D! C, L mov r4, #1234h" H' S, ~/ `6 P3 R E
ret
3 O1 Y2 T e ]7 h) b: n& ]) E/ u3 K$ p; {9 M$ y( o. y" d- H
data2:8 d$ H" q6 A& _9 B: w7 T
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
% C8 c L& z- D- B& B0 i. y2 J
) ]+ m1 h7 U. p! H7 h9 `end2 f; |% | o0 D* y2 B/ U
: u1 O9 z/ \% c0 U
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' q$ o" o! z. e& L
* s& n$ l% j/ T; A- CAllaahu Akbar,/ E) \' n/ W9 T' Y5 ^$ u+ \8 }5 F' ^
RizaPN <rizapn@yahoo.com>) b9 P6 ]1 e9 {7 O( r
Jakarta - Indonesia# V8 j' l+ }8 p% N6 y
: ^( t) F/ e! A- w$ z0 ?[ 本帖最后由 wwssff 于 2005-11-9 12:22 编辑 ] |
|