- 积分
- 102
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
sfe.exe是一个强大的工具软件, 以下是我翻译的说明, 有些地方是按自己的理解翻的, 不当之处请同志们指正:
简单帮助:
====================
*) 在 Windows MSDOS-提示符下, 输入 sfe.exe (必须保证 sfe.exe在可搜到的目录内), 然后你将看到帮助说明。
*) 想得到更详细点 (不算很详细), 输入以下命令, 比如 : "sfe b" 将得到二进制拷贝的帮助.
搜索空白区:
=====================
> sfe 0 ; 帮助
> sfe 0 binfile.bin ; 搜索空白区 (默认大小 = 0x300 bytes)
> sfe 0 binfile.bin 1000 ; 搜索 0x1000 大小的空余空间
二进制拷贝:
============
> sfe b ; 帮助
> sfe b src.bin dst.bin ; 拷贝 src.bin 到 dst.bin
> sfe b src.bin,20 dst.bin ; 拷贝 src.bin, 偏移 0x20 到 dst.bin
> sfe b src.bin,20,100 dst.bin ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin
> sfe b src.bin,20,100 dst.bin,200 ; 拷贝 src.bin, 偏移 0x20 大小 0x100 到 dst.bin 的偏移 0x200
比较文件:
==============
> sfe c ; 帮助
> sfe c src.bin dst.bin ; 比较 src.bin 和 dst.bin
> sfe c src.bin,20 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )
> sfe c src.bin,20,100 dst.bin ; 比较 src.bin 从偏移 0x20 (与 dst.bin )大小 0x100 bytes
> sfe c src.bin,20,100 dst.bin,300 ; 比较 src.bin 从偏移 0x20 (与 dst.bin 从偏移 0x300 )
> sfe c src.bin,20 dst.bin a00000 ; 比较结果显示地址加基值 A00000
> sfe c src.bin,20 dst.bin a00000,16 ; 比较结果显示地址加基值 A00000 每行显示 16 bytes
> sfe c src.bin,20 dst.bin a00000,16,all ; 两个文件都显示(不仅是不同处)
发现16进制的地方:
====================
> sfe f ; 帮助
> sfe f src.bin e6,f?,,20,e6 ; 找类似 'E6 F? ?? 20 E6' 的地方,? 代表0~F任何一个
> sfe f src.bin,200 e6,f?,,20,e6 ; 同上,从 0x200 开始找
> sfe f src.bin e6,f?,,20,e6 10 ; 同上,显示 10 bytes
> sfe f src.bin e6,f?,,20,e6 10,4 ; 同上,是反向找
> sfe f src.bin 1234 ; 显示从1234H开始的内容, 80 bytes 大小
> sfe f src.bin 100:1000,8 ; 显示从 100:1000 (页:页偏侈),大小 8 bytes.
提取语言数据:
======================
> sfe l ; 帮助
> sfe l src.bin ; 提取第一种语言,包括扩展文本数据
> sfe l src.bin 200 ; 显示 ID 200 的字符串
> sfe l src.bin 200 2 ; 用第三种语言显示字符串
> sfe l src.bin -1 ; 提取第二种语言
> sfe l src.bin -all ; 提取所有现存语言
> sfe l src.bin 'Testing ; 转换 'Testing' 字符串
> sfe l src.bin 'Testing 1 ; 转换 'Testing' 字符串( 用 ID 1 语言)
> sfe l src.bin "+41 8C 91 56 4F" ; 转换16进制文本
> sfe l scr.bin 200,"<95>Test" ; 用字串 "<95>Test”更改串号为 200并生成补丁
> sfe l test.lng ; 检查test.lng 语言包
> sfe lc test.lng ; 检查和更正test.lng 语言包
提取菜单:
=============
> sfe m ; 帮助
> sfe m src.bin ; 提取菜单结构和入口
补丁:
=========
> sfe p ; 帮助
> sfe p sl45_44.bin patch.txt 44,BCI ; 应用 BCI 补丁,地址为 44zzzz,补丁文件patch.txt,目的文件 sl45_44.bin
> sfe p sl45_44.bin p.txt 44,BCI,u ; 取消 BCI 补丁,取消补丁文件为 p.txt, 目的文件为 sl45_44.bin,地址 44zzzz
> sfe p binfile.bin p.txt 00,BCI ; 生成 bin 文件 binfile.bin, 从 BCI 补丁文件 p.txt,地址 00zzzz
编译:
==========
> sfe a ; 帮助
> sfe a src.asm ; 编译 src.asm
> sfe a src.asm d ; 编译 src.asm, 完整输出
> sfe a "mov r12, #1234h" ; 单句编译
> sfe a "mov r2,r1 ; sub r2,#1" ; 多句编译
> sfe a src.asm,TST ; src.asm编译成补丁格式
> sfe a src.asm,TST p ; src.asm编译成补丁格式
> sfe a src.asm,TST p,10 ; src.asm编译成补丁格式,输出10H行
> sfe a src.asm,TST p,10,a00000 ; src.asm编译成补丁格式,输出10H行,指定基址 = 0xa00000
> sfe a s.asm,TST p,10 org.bin ; src.asm编译成补丁格式,输出10H行,包含 org.bin 的值。
*) See Assembler Part to get more 'assembler' function detail
反汇编:
=============
> sfe d ; 帮助
> sfe d src.bin ; 反汇编 src.bin
> sfe d src.bin,200 ; 从 0x200 开始反汇编 src.bin
> sfe d src.bin,200,100 ; 同上, 但只反汇编 0x100 字节
> sfe d src.bin,200,100 a00000 ; 同上,指定了基址,输出时将加上 A00000
> sfe d src.bin,200,101 a00000 ; 同上, 但遇到返回语句将停止
> sfe d src.bin,200,101 a00000,p ; 同上,输出时不带地址
> sfe d t.txt,27e000,101 ; 反汇编 t.txt补丁文件
> sfe d image.bmp ; 单色图形汇编输出
> sfe d image.bmp,8,8 10,10,img1 ; 同上,从图形中x=8,y=8,w=10,h=10取出。
调试:
=========
> sfe r ; 帮助
> sfe r src.bin ; 运行 src.bin
> sfe r src.asm ; 运行 src.asm 汇编文件
> sfe r src.asm ,n ; 同上, 正常输出
> sfe r src.bin,200 ; 从 0x200 地址开始运行
> sfe r src.bin,200,100 ; 运行 0x100 字节, 运行地址 0x200
> sfe r src.bin b00000 ; 以 B00000 为基址运行
> sfe r src.bin ,,src.mem ; 加上内存文件 src.mem 一起运行
> sfe r src.bin ,ri,src.mem ; 同上,用交互方式运行
交互调试:
======================
> h ; 帮助
> g a00000 ; 到地址 a00000
> g 37:3800 ; 到地址 37:3800 (37*0x4000+3800 = DF800)
> d ; dump 内存 (现在地址)
> d a00000 ; dump a00000 开始的内存
> d a00000 200 ; dump a00000 开始的内存, 大小 0x200
> d r ; dump 注册
> a ; 单句汇编
> a c7d530 ; 单句汇编地址在 c7d530
> u ; 显示反汇编
> u a00020 ; 显示地址 a00020的反汇编
> r ; 在现在的地址上执行一条语句
> r 1 ; 在现在的地址上执行一条语句 (跳过call语句)
> r 0 ; 运行到返回语句
> r -c7d580 ; 运行到地址 c7d580
> q ; 退出
*) 所有未声明的语句都会改变当前地址。
特别的助记符:
============================
*) 所有C166的汇编格式
*) 分号用于注释 (在一行的任何地方)
*) 特别的助记符如下 :
#include filename ; 包含文件(各种定义)
#define var value ; 设置替代变量 var = value
var equ value ; 变量取值 var = value
db 'X',36h ; 定义 byte(s) 数据区
dw 1234h,0,'AB' ; 定义 word(s) 数据区
org ; 设定当前地址
base ; 设定基址(补丁的输出将会改变相应地址,当前地址 - 基址)
end ; 结束记号
;#name XXX.string ; 定义补丁名称 (XXX)
' ; 注释将一起进入补丁
'' ; 注释将一起进入补丁,加回车
'; ; 以下内容将全部是注释,直到出现 ''
;' ; 注释将一起进入补丁
+ - * / % ; 加, 减, 乘, 除, 求模 操作
>> > < << ; 右移左移操作
& && | || ^ ^^ ; 与, 或, 与非操作
val1:val2 ; 页表示地址 (val = val1 * 0x4000 + val2)
page(value),
pag(value),
p(value) ; 页值 (= value / 0x4000)
pof(value),
q(value) ; 页偏移值 (= value mod 0x4000)
segment(value),
seg(value),
s(value) ; 段值 (= value div 0xFFFF)
offset(value),
ofs(value),
sof(value),
o(value) ; 段偏移值 (= value mod 0xFFFF)
*) 例子:
;--- Testing ---
base 0A00000h ; 自动转换文件地址为 SL45 内存地址
#ifdef ME45
#include me45.inc
#else
#include sl45.inc
#define FreeRAM 37h:3600h
#define memcpy 0c7b384h
#endif
;#name TST. Test Patch ; 补丁名
'Firmware : sl45v56
'Author : rizapn
'Updated : Aug 18, 2004
org 0c7e000h
mov r12, #q(FreeRAM) ; 得到 FreeRAM 页偏移
mov r13, #p(FreeRAM) ; 得到 FreeRAM 页值
extp #p(data2), #1 ; 跳到 data2 页
movb rh4, q(data2)+1 ; 得到 data2+#1h 地址的值(为 10h)
callr sub_1 ; 页内调用
movb rl2, #'A' ; 得到 ASCII 码 'A'
loop_1:
mov r2, #1234h
mov [-r0], r2
calls memcpy ; 调用段表示的子程序
add r0, #2
jmpr cc_NZ, loop_1 ; 跳到 loop_1 标号处
rets
sub_1:
mov r4, #1234h
ret
data2:
db 'A',10h,'Testing',0 ; 定义 bytes 型数据区
end
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Allaahu Akbar,
RizaPN <rizapn@yahoo.com>
Jakarta - Indonesia
[ 本帖最后由 wwssff 于 2005-11-13 08:41 编辑 ] |
评分
-
参与人数 1 | 实力分 +1 |
金钱数 +10 |
收起
理由
|
Dong
| + 1 |
+ 10 |
奖:贡献-感谢你热心帮助其它会员解决问 .. |
查看全部评分
|