首页
社区
课程
招聘
[求助]WriteProcessMemory的奇怪问题
发表于: 2007-10-11 23:58 11286

[求助]WriteProcessMemory的奇怪问题

2007-10-11 23:58
11286
环境: VC++6.0(sp6) 英文原版(非精简)
平台: WinXP SP2简体中文版

今天写如下代码:
                byte hexData[] = {
                        0x74, 0x17
                };
               
                ::WriteProcessMemory(GetCurrentProcess(),(LPVOID)hint,
                        (LPCVOID)hexData,sizeof(hexData),NULL);

编译通不过,报:
error C2664: 'WriteProcessMemory' : cannot convert parameter 3 from 'const void *' to 'void *'

查看对应的MSDN(2001),发现函数原型是对的呀
BOOL WriteProcessMemory(
  HANDLE hProcess,                // handle to process
  LPVOID lpBaseAddress,           // base of memory area
  LPCVOID lpBuffer,               // data buffer    
  SIZE_T nSize,                   // count of bytes to write
  SIZE_T * lpNumberOfBytesWritten // count of bytes written
);

  Header: Declared in Winbase.h; include Windows.h.
  Library: Use Kernel32.lib.

//----------------------------------------------------------------------------------
再查了一下MSDN在线库
MicroSoft的函数原型是:

原文地址 894K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3^5J5i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3I4A6j5Y4u0S2M7Y4W2Q4x3V1k6E0M7K6j5^5x3e0j5%4y4q4)9J5k6h3q4K6M7s2R3`.

BOOL WINAPI WriteProcessMemory(
  __in          HANDLE hProcess,
  __in          LPVOID lpBaseAddress,
  __in          LPCVOID lpBuffer,
  __in          SIZE_T nSize,
  __out         SIZE_T* lpNumberOfBytesWritten
);

似乎也没有错哦

不明白为何通不过,此处也参考了
http://bbs.pediy.com/showthread.php?threadid=26258

这时我查了一下Winbase.h中的原型,却发现如下:

Winbase.h中的函数原型的描述是:
WriteProcessMemory(
    HANDLE hProcess,
    LPVOID lpBaseAddress,
    LPVOID lpBuffer,
    DWORD nSize,
    LPDWORD lpNumberOfBytesWritten
    );

这难道是说,sp6的包还是错的?难道我要更换sdk或升级IDE?有没有解决的方法呢?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
用LPVOID就行了,编译器是按照*.h文件里定义的类型识别的。
2007-10-12 09:33
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
下载个最新的Windows SDK吧
我的头文件是这样的
WINBASEAPI
BOOL
WINAPI
WriteProcessMemory(
    __in      HANDLE hProcess,
    __in      LPVOID lpBaseAddress,
    __in_bcount(nSize) LPCVOID lpBuffer,
    __in      SIZE_T nSize,
    __out_opt SIZE_T * lpNumberOfBytesWritten
    );
2007-10-12 09:35
0
雪    币: 256
活跃值: (1238)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
用LPVOID是可以通过的.
另我试着修改winbase.h中的原型为LPCVOID,结果还是提示LPVOID,他包含的是kernel32.lib?有没有办法使他支持LPCVOID这个类型而使用最小的修改呢?
2007-10-12 10:41
0
雪    币: 256
活跃值: (1238)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
如果我还是使用VC++6,有没有适合这个版本的SDK?在哪里下载?

现在最新的是vs.net 2008吧? .NET也是3.0了.
2007-10-12 10:43
0
雪    币: 194
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
byte hexData[]
不要用byte
直接用char就可以了
2007-10-12 18:22
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你去下载最新的SDK(for XP/2k)应该是可以和VC6和睦相处的, 我用过很长一段时间2003的SDK和VC6,当时我的VC6是打了SP4的,SDK和编译器都是独立的
2007-10-12 20:20
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
原版的VC6:

WINBASEAPI
BOOL
WINAPI
WriteProcessMemory(
    HANDLE hProcess,
    LPVOID lpBaseAddress,
    LPVOID lpBuffer,
    DWORD nSize,
    LPDWORD lpNumberOfBytesWritten
    );

2003年2月SDK已经修正:

WINBASEAPI
BOOL
WINAPI
WriteProcessMemory(
    IN HANDLE hProcess,
    IN LPVOID lpBaseAddress,
    IN LPCVOID lpBuffer,
    IN SIZE_T nSize,
    OUT SIZE_T * lpNumberOfBytesWritten
    );

以前也发现过一个bug:

原版的VC6:

BOOLAPI
GetUrlCacheEntryInfoW(
    IN LPCSTR lpszUrlName,
    OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
    IN OUT LPDWORD lpdwCacheEntryInfoBufferSize
    );

2003年2月SDK已经修正:

URLCACHEAPI_(BOOL) GetUrlCacheEntryInfoW(
    IN LPCWSTR lpszUrlName,
    OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
    IN OUT LPDWORD lpdwCacheEntryInfoBufferSize
    );
2007-10-13 12:34
0
雪    币: 256
活跃值: (1238)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
找到一个地址:
fa9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3#2K6k6r3!0%4L8X3I4G2j5h3c8Q4x3V1k6H3L8r3q4@1k6X3!0J5L8i4y4V1K9#2)9J5c8Y4y4V1K9%4g2H3k6r3q4@1k6g2)9J5c8Y4m8K6k6r3E0Q4x3X3c8X3N6h3I4D9i4K6u0W2K9s2c8E0

不知这个是不是可以,大家给推荐一个链接吧
2007-10-13 17:42
0
游客
登录 | 注册 方可回帖
返回