level 1
我有一个在dos下的程序。想改里面一个词,由于新的单词比原来的长,原来的单词前后有没有00字节。直接插入的话会导致程序无法运行。
2009年04月07日 00点04分
1
level 6
内存分布
=====旧单词-----
将旧单词前面的=====截下来保存成part1.bin
将旧单词后面的-----截下来保存成part2.bin
然后可使用debug:
1. debug part1.bin
2. r (查看bx:cx--->part1.bin的大小,假如bx为0,cx为310)
3. e 310 'newworld'(新单词)
4. n part2.bin
5. l 318 (318=310 + newworld的字节数8)
6. r (查看此时的bx:cx,假如bx为0,cx为510)
7. n c:\ok.exe
8. r cx (将cx的值改成828 (820=310 + 8 +510)
9. w ds:100
2009年04月11日 04点04分
2
level 6
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFD ES=0AFD SS=0AFD CS=0AFD IP=0100 NV UP EI PL NZ NA PO NC
0AFD:0100 42 INC DX
-rcx
CX 0000
:828
-e 310 'newworld'
-d 310 31f
0AFD:0310 6E 65 77 77 6F 72 6C 64-8B C8 49 26 8A 05 47 0A newworld..I&..G.
2009年04月11日 04点04分
3
level 0
对不起啊 我是新手 我在debug 里面得到的 cx值 有字母在里面 比如 cx=E942
2009年04月11日 11点04分
5
level 6
俺所举的例子中310 , 8 , 510也都是十六进制数
2009年04月14日 04点04分
8
level 6
或者你可以用win系统自带的calc.exe来算一下
开始/运行/calc
2009年04月14日 04点04分
9
level 0
谢谢
问题又来了 debug 里 BX值不是 0 有什么关系吗?
我到了
-r cx
CX CA95
:1B403
显示错误?
2009年04月14日 20点04分
10
level 7
cx为16寄存器
能表示的最大值为ffff
1b403大于ffff
rcx-->b403
rbx-->1
bx:cx-->高16位:低16位
2009年04月15日 01点04分
11