2004-12-27 13:31
阿尔法孝直
麻烦问一下:假如将一个十六进制的文件(比如英杰传的main.exe)取文件号为#1,那么将该文件地址为0x030FBC的地方改为FF,问语句是什么?谢谢!
2004-12-28 18:24
Maxwell
[quote]原帖由[i]阿尔法孝直[/i]于2004-12-27, 13:31:49发表
麻烦问一下:假如将一个十六进制的文件(比如英杰传的main.exe)取文件号为#1,那么将该文件地址为0x030FBC的地方改为FF,问语句是什么?谢谢! [/quote]
dim v as byte
v = 255
put #1, 200636, v
我很久不用vb读写文件了,大概是这么写。
2004-12-28 20:53
Tom Joad
[quote]原帖由[i]Maxwell[/i]于2004-12-28, 18:24:17发表
dim v as byte
v = 255
put #1, 200636, v
我很久不用vb读写文件了,大概是这么写。 [/quote]
地址好象要加1的:
put #1, &H30FBC+1, v
今天天氣好冷啊!
2004-12-28 21:14
Maxwell
[quote]原帖由[i]Tom Joad[/i]于2004-12-28, 20:53:06发表
[quote]原帖由[i]Maxwell[/i]于2004-12-28, 18:24:17发表
dim v as byte
v = 255
put #1, 200636, v
我很久不用vb读写文件了,大概是这么写。 [/quote]
地址好象要加1的:
put #1, &H30FBC+1, v
今天天氣好冷啊! [/quote]
嗯,有道理,不知道原文给的地址是0起还是1起的,用c/c++习惯了,都是给什么地址写什么地址的。
2005-1-7 13:46
阿尔法孝直
本人调用了你们所说的语句,发现0x30FBC与0x30FBD都被改成了00(如图所示)
怪哉!Help!
2005-1-8 12:12
Maxwell
你用的代码完整贴出来看看,不太清楚是怎么回事。
2005-1-8 15:47
阿尔法孝直
Put 200636,255
Put 200637,255
Put 200637,&HFF
Put &H30FBC,&HFF
Put &H30FBD,&HFF
我就试了这几种,每试完一种后都用原来的main.exe还原改过的main.exe!可就是30FBC=00,30FBD=00!
2005-1-8 18:17
van
你用Maxwell的那个代码是不会出错的。
至于你提供的那些代码,改成CByte(255)试试看
2005-1-9 10:17
阿尔法孝直
哈哈,终于成功了!
[Put &H30FBD Cbyte(255)]
为表示感谢,送给van和maxwell每人10通宝。
2005-1-10 12:30
阿尔法孝直
但是引发了下一个问题:
虽然30FBC被成功地改成了FF,但30FBD被改成了00(原值是04)!
2005-1-10 12:52
金圭子
我随便弄了个文件,写一串aaaaaaaa
然后用
Private Sub Command1_Click()
Open "C:\a.txt" For Binary As #1
Put #1, 6, 255
Close #1
End Sub
在5H变成FF,6H变成0
但是如果用
Private Sub Command1_Click()
Open "C:\a.txt" For Binary As #1
Put #1, 6, CByte(255)
Close #1
End Sub
这个则就仅仅是5H变成了FF,6H还是61(a)
好像没出现你的情况啊?
2005-1-11 13:27
Maxwell
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-10, 12:30:46发表
但是引发了下一个问题:
虽然30FBC被成功地改成了FF,但30FBD被改成了00(原值是04)! [/quote]
如果两个字节被改了说明没有正确识别类型,我觉得我的那个代码应该不会出错。用cbyte转换的也不会出错才对。
2005-1-19 13:48
阿尔法孝直
继续 ask for help
本人做了个实验:
在VB里执行下列语句:
[color=blue]Private Sub [/color]Com1_Click()
[color=blue]Open [/color]"d:\sgzyjz\Main.exe" [color=blue]For Binary As [/color]#1
[color=blue]Dim [/color]a [color=blue]As String [/color]* 1
[color=blue]Get[/color] #1, &H30FBD, a
[color=blue]Debug.Print [/color]a
[color=blue]End Sub[/color]
结果不是"v",而是空格!Why?
(事先确定30FBC=76)
2005-1-19 14:36
Maxwell
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-19, 13:48:54发表
继续 ask for help
本人做了个实验:
在VB里执行下列语句:
Private Sub Com1_Click()
Open "d:\sgzyjz\Main.exe"
For Binary As #1
Dim a As String * 1
Get #1, [color=blue]&H30FBD[/color], a
Debug.Print a
nd Sub
结果不是"v",而是空格!Why?
(事先确定[color=blue]30FBC[/color]=76) [/quote]
这里有点问题吧
2005-1-19 20:54
van
那你把a转成byte数组,看看首元素是多少?
2005-1-20 12:15
阿尔法孝直
[quote]原帖由[i]Maxwell[/i]于2005-01-19, 14:36:35发表
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-19, 13:48:54发表
继续 ask for help
本人做了个实验:
在VB里执行下列语句:
Private Sub Com1_Click()
Open "d:\sgzyjz\Main.exe"
For Binary As #1
Dim a As String * 1
Get #1, [color=blue]&H30FBD[/color], a
Debug.Print a
nd Sub
结果不是"v",而是空格!Why?
(事先确定[color=blue]30FBC[/color]=76) [/quote]
这里有点问题吧 [/quote]
按照十六进制的表示方法,第一字节是0,而按照VB的表示方法,第一字节是1
2005-1-20 12:19
阿尔法孝直
[quote]原帖由[i]van[/i]于2005-01-19, 20:54:26发表
那你把a转成byte数组,看看首元素是多少? [/quote]
将它改了一下:
[color=blue]Private Sub [/color]Com1_Click()
[color=blue]Open [/color]"d:\sgzyjz\Main.exe" [color=blue]For Binary As [/color]#1
[color=blue]Dim [/color]a As [color=red]Byte[/color]
[color=blue]Get[/color] #1, &H30FBD, a
[color=blue]Debug.Print [/color]a
[color=blue]End Sub[/color]
结果不是[color=red]118[/color],而是[color=red]0[/color]
2005-1-20 12:20
van
刚才copy了你的代码试了一下,是“v”啊,不应该出问题的
2005-1-20 12:22
van
那估计是路径错了。你看看lof(1)是不是0,是0就说明没有找到文件
2005-1-20 12:26
Maxwell
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-20, 12:15:56发表
[quote]原帖由[i]Maxwell[/i]于2005-01-19, 14:36:35发表
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-19, 13:48:54发表
继续 ask for help
本人做了个实验:
在VB里执行下列语句:
Private Sub Com1_Click()
Open "d:\sgzyjz\Main.exe"
For Binary As #1
Dim a As String * 1
Get #1, [color=blue]&H30FBD[/color], a
Debug.Print a
nd Sub
结果不是"v",而是空格!Why?
(事先确定[color=blue]30FBC[/color]=76) [/quote]
这里有点问题吧 [/quote]
按照十六进制的表示方法,第一字节是0,而按照VB的表示方法,第一字节是1 [/quote]
用vb不用从0计,这样看上去太不方便了。
2005-1-20 12:29
Maxwell
我没有你用的文件,但是试了一下其他的文件也没有问题。
2005-1-20 12:35
阿尔法孝直
[quote]原帖由[i]van[/i]于2005-01-20, 12:22:16发表
那估计是路径错了。你看看lof(1)是不是0,是0就说明没有找到文件 [/quote]
d:\sgzyjz\main.exe确实存在。
2005-1-20 12:44
阿尔法孝直
[quote]原帖由[i]van[/i]于2005-01-20, 12:20:58发表
刚才copy了你的代码试了一下,是“v”啊,不应该出问题的 [/quote]
你瞧,一个空格!(红圈处)
2005-1-20 12:49
阿尔法孝直
30FBC确实等于76("v")
2005-1-20 12:50
Maxwell
你先读个简单文件试试。
2005-1-20 12:54
阿尔法孝直
简单文件可以正常读。
2005-1-20 13:07
van
你把一开始的Close移到Debug后面去。为什么一开始要close而最后反而不用呢?
2005-1-21 10:50
阿尔法孝直
防止二次打开文件产生错误。
2005-1-21 12:08
阿尔法孝直
[quote]原帖由[i]van[/i]于2005-01-20, 13:07:04发表
你把一开始的Close移到Debug后面去。为什么一开始要close而最后反而不用呢? [/quote]
我按照你的建议,改了一下:
[color=blue]Private Sub [/color]Com1_Click()
[color=blue]Open [/color]"d:\sgzyjz\main.exe" [color=blue]For Binary As [/color]#1
[color=blue]Dim [/color]a [color=blue]As String [/color]* 1
[color=blue]Get [/color]#1, &H30FBD, a
[color=blue]Debug.Print [/color]a
[color=blue]Close[/color] #1
[color=blue]End Sub[/color]
结果仍然是[color=red]空格[/color]!
2005-1-21 12:20
Maxwell
你传这个文件上来试试吧。
2005-1-22 10:58
阿尔法孝直
VB测试文件包
2005-1-22 11:46
Maxwell
[quote]原帖由[i]阿尔法孝直[/i]于2005-01-20, 12:35:25发表
d:\sgzyjz\main.exe确实存在。 [/quote]
用函数判断一下到底打开了没有,存在不一定能打开。
我没有你那个main.exe,我用了另外一个exe文件,没有任何问题。
2005-1-22 21:46
阿尔法孝直
把main.exe给你吧
2005-1-22 22:36
Maxwell
是有点蹊跷啊,明天我再继续看看。
2005-1-22 23:01
Maxwell
晕,现在不知怎么又正常了。
2005-1-22 23:02
loranrowe
是main.exe的问题...
换原版的可以了
2005-1-22 23:08
Maxwell
[quote]原帖由[i]loranrowe[/i]于2005-01-22, 23:02:12发表
是main.exe的问题...
换原版的可以了 [/quote]
什么意思?
不过现在再试无论如何都是对的了,另外。。。 不知道你修改了内容之后存盘了没有啊?
2005-1-23 09:58
loranrowe
上传的main.exe文件的30FBD处数据为0x00显示出来当然是0了
程序没有任何其他问题
2005-1-23 10:14
Maxwell
那个地方是0你不会改成不是0吗。。。楼主问的是那里不是0的时候为什么读出来也是0。我在第一次试的时候确实出了点问题,怎么改都是0,重新开了一次vb就好了。
金山游侠的编辑功能没用过,不知道是不是需要退出才能存盘,要是那样的话当然改了也没有用了。
2005-1-23 11:10
loranrowe
[quote]原帖由[i]Maxwell[/i]于2005-01-23, 10:14:20发表
那个地方是0你不会改成不是0吗。。。楼主问的是那里不是0的时候为什么读出来也是0。我在第一次试的时候确实出了点问题,怎么改都是0,重新开了一次vb就好了。
金山游侠的编辑功能没用过,不知道是不是需要退出才能存盘,要是那样的话当然改了也没有用了。 [/quote]
晕倒了
我执行了他的程序两次
第一次用上传的main.exe,要读取的位置数据为0x00
第二次用reko3原版的MAIN.EXE,要读取的位置数据为0x76
两次输出都很正常的说
没修改过main
会不会是大小写的问题
ps:
我又试了一下改过的main,还是很正常啊
事实证明,在我的机器上,类似问题不会重现...
文本编辑器建议使用UltraEdit
2005-1-23 11:18
Maxwell
看他上传的图上金山游侠好像没有保存按钮,所以很怀疑是因为没存盘的问题。
2005-1-24 07:54
阿尔法孝直
[quote]原帖由[i]loranrowe[/i]于2005-01-23, 9:58:23发表
上传的main.exe文件的30FBD处数据为0x00显示出来当然是0了
程序没有任何其他问题 [/quote]
我不是讲过了吗,金山游侠读文件第一字节编号为0(0x000000),而VB读文件第一字节编号为1。所以金山游侠读出的0x030FBC处等效于VB读出的&H030FBD处(0x30FBD)。
2005-1-24 07:55
阿尔法孝直
[quote]原帖由[i]Maxwell[/i]于2005-01-23, 11:18:39发表
看他上传的图上金山游侠好像没有保存按钮,所以很怀疑是因为没存盘的问题。 [/quote]
用金山游侠修改文件是自动保存的。
2005-1-24 09:47
Maxwell
建议你做如下操作
1. 复制一个main.exe到另外一个目录
2. 修改并关闭
3. 重新打开查看是否修改成功并关闭
4. 修改程序到新路径读文件
5. 执行
你用lof(1)测试一下便知行不行了。金山游侠也许是以独占模式打开的文件。
2005-1-24 09:50
Maxwell
还有,用vb的时候最好说地址都按vb的来说,免得混乱。
你给的文件不管按哪种起始地址算30FBD处都是0,loranrowe说的也没错。
2005-2-6 19:26
阿尔法孝直
本人又编了一个程序(如图),结果运行时连续按下按钮,在窗体上连续打出N个"0",不知为什么。
2005-2-6 19:34
阿尔法孝直
对不起,30FBC本来就等于00
2005-2-6 19:39
Maxwell
晕,你终于搞明白了?
2005-2-6 19:45
阿尔法孝直
今天我又运行了一下那个程序(就是我写在这个主题上的第一个程序),嘿,竟然好了!难道以前是因为VB运行库出问题了?
2005-2-6 20:03
Maxwell
呵呵,这种东西只能说是rpwt了。我遇到最搞笑的一次是一个程序编译出来运行死机,怎么改都不行,后来新建一个文件把内容拷贝过去,居然好了。
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.