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