主题:VB 内存写入
sunlongo
[专家分:20] 发布于 2008-09-21 11:22:00
如何用API函数WriteProcessMemory在内存地址&H458571 中写入2261193076
内存中&H458571 这个位置能允许4个字节...
2261193076大于了long的范围.....
如果进行了数据转换 要保证数字的准确度,避免在转化中数据失真
回复列表 (共5个回复)
沙发
merry05 [专家分:8920] 发布于 2008-09-27 10:55:00
只要不大于unsigned long就有办法写入
将这个值先转换成long所对应的负数,然后写入就可以了。因为long和unsigned long在内存中是一样的,外在表现出来只是一个符号位的区别
没办法把无符号表现出来,是VB6的软肋
板凳
xacker [专家分:570] 发布于 2008-09-29 21:39:00
网上有个转换的代码 你自己搜下
3 楼
我是大喊三 [专家分:3010] 发布于 2008-09-29 23:12:00
[quote]只要不大于unsigned long就有办法写入
将这个值先转换成long所对应的负数,然后写入就可以了。因为long和unsigned long在内存中是一样的,外在表现出来只是一个符号位的区别
没办法把无符号表现出来,是VB6的软肋[/quote]
负数一般为补码形式储存吧,正数则就是原码,但不清楚VB是怎样存的。。。
4 楼
joforn [专家分:1460] 发布于 2008-10-01 12:12:00
&H86C71174 用十六进制表示就可以了。
5 楼
joforn [专家分:1460] 发布于 2008-10-01 13:12:00
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim I As Long
If DoubletoLong(2261193076#, I) Then Debug.Print "I=" & I & " Hex(I)=&H" & Hex(I)
End Sub
'将无符号整数(dblNumber)转成以带符号整数(返回值在LngNumber中,保持其在内存中的值是四字节无符号整数的值)
Private Function DoubletoLong(ByVal DblNumber As Double, ByRef LngNumber As Long) As Boolean
Const MaxLong As Long = 2147483647
Const MaxULong As Double = 4294967295#
Const MinLong As Double = -2147483648#
Dim HL As Long
If DblNumber > MaxULong Then
Exit Function
ElseIf DblNumber > MaxLong Then
HL = DblNumber / 65536#
LngNumber = DblNumber - CDbl(HL) * 65536#
CopyMemory ByVal VarPtr(LngNumber) + 2, ByVal VarPtr(HL), 2
ElseIf DblNumber < MinLong Then
Exit Function
Else
LngNumber = DblNumber
End If
DoubletoLong = True
End Function
我来回复