首页
社区
课程
招聘
[旧帖] 关于BPX MessageBox的问题 0.00雪花
发表于: 2009-12-16 14:51 1635

[旧帖] 关于BPX MessageBox的问题 0.00雪花

2009-12-16 14:51
1635
使用时,输入BPX MessageBox提示Symbol not defined(MessageBox)
在看《加密与解密-SoftICE使用手册这本书》,上面说按照第二章的步骤一步一步来,但是装的版本不一样。
安装的时候什么都没让选就装了,装完后才出来个settings,界面是这样的
这个和加载方式有关吗?怎么改呢?我在settings那个界面里面没找到。

------------------------------------------------
菜鸟一只,问题有点傻,见笑了
--------------------------------------------
今天看Windows程序设计,理解3楼贴的那些。
可还是不理解BPX MessageBox
内存中是已经编译链接过的程序吧,那么就是说,程序中的MessageBox已经被替换成了MessageBoxA或者MessageBoxW了,所以在32位下只能用BPX MessageBoxA或者BPX MessageBoxW,而不能用BPX MessageBox
那本书是16位下的,用的是USER.DLL库,所以用BPX MessageBox,是这个意思么?
求高手指点,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
但是输入BPX MessageBoxA时正确
然后再输BL
显示USER32!MessageBoxA
---------
可是MessageBox为什么不行呢?
2009-12-16 15:20
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
从Windows 1.0到Windows 3.1的16位Windows中,MessageBox函数位于动态链接库USER.EXE。在Windows 3.1软件开发套件的WINDOWS.H中,MessageBox函数定义如下:

int WINAPI MessageBox (HWND, LPCSTR, LPCSTR, UINT) ;        
注意,函数的第二个、第三个参数是指向常数字符串的指针。当编译连结一个Win16程序时,Windows并不处理MessageBox呼叫。程序.EXE文件中的表格,允许Windows将该程序的呼叫与USER中的MessageBox函数动态链接起来。

32位的Windows(即所有版本的Windows NT,以及Windows 95和Windows 98)除了含有与16位兼容的USER.EXE以外,还含有一个称为USER32.DLL的动态链接库,该动态链接库含有32位使用者接口函数的进入点,包括32位的MessageBox。

这就是Windows支持Unicode的关键:在USER32.DLL中,没有32位MessageBox函数的进入点。实际上,有两个进入点,一个名为MessageBoxA(ASCII版),另一个名为MessageBoxW(宽字符版)。用字符串作参数的每个Win32函数都在操作系统中有两个进入点!幸运的是,您通常不必关心这个问题,程序中只需使用MessageBox。与TCHAR表头文件一样,每个Windows表头文件都有我们需要的技巧。

下面是MessageBoxA在WINUSER.H中定义的方法。这与MessageBox早期的定义很相似:

WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText,
                           LPCSTR lpCaption, UINT uType) ;
        
下面是MessageBoxW:

WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText,
        
                           LPCWSTR lpCaption, UINT uType) ;
        
注意,MessageBoxW函数的第二个和第三个参数是指向宽字符的指针。

如果需要同时使用并分别匹配ASCII和宽字符函数呼叫,那么您可在Windows程序中明确地使用MessageBoxA和MessageBoxW函数。但大多数程序写作者将继续使用MessageBox。根据是否定义了UNICODE,MessageBox将与MessageBoxA或MessageBoxW一样。在WINUSER.H中完成这一技巧时,程序相当琐碎:

#ifdef UNICODE
        
#define MessageBox  MessageBoxW
        
#else
        
#define MessageBox  MessageBoxA
        
#endif
        
这样,如果定义了UNICODE标识符,那么程序中所有的MessageBox函数呼叫实际上就是MessageBoxW函数;否则,就是MessageBoxA函数。

执行该程序时,Windows将程序中不同的函数呼叫与不同的Windows动态链接库的进入点连结。虽然只有少数例外,但是,在Windows 98中不能执行Unicode版的Windows函数。虽然这些函数有进入点,但通常返回错误代码。应用程序注意这些返回的错误并采取一些合理的动作。
--------------------
今天看Windows程序设计,理解了上面这些。
可还是不理解BPX MessageBox
内存中是已经编译链接过的程序吧,那么就是说,程序中的MessageBox已经被替换成了MessageBoxA或者MessageBoxW了,所以只能用BPX MessageBoxA或者BPX MessageBoxW,而不能用BPX MessageBox,是这个意思么?
求高手指点,谢谢!
2009-12-19 10:43
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵。。聪明的人
2009-12-19 23:41
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
基本上这个样子,就是啊,你都看到那了。
2009-12-19 23:49
0
雪    币: 231
活跃值: (233)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
有意思,看看。
2009-12-20 01:38
0
游客
登录 | 注册 方可回帖
返回
//