softice的一个问题

thur 2000-07-12 06:38:00
加精
拦截windows函数时,比如GetDlgItemText有的书上说要在函数后面加个A,说是字符集。
但我在98中使用softice4。0时,敲入bpx getdlgitemtexta就会有错误。请问这是为什么?我把A去掉,又无法拦截到函数,help me,thanks
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蚊子王 2001-09-23
  • 打赏
  • 举报
回复
这是个老帖,我要收藏到精华区。
上面的回答都已基本正确,但Leex2000()的有一点须加以订正:
函数后面加A是这样的:到了WIN32后,有些函数分UNICODE字符集和ANSI字符集,加A表示后者加U表示前者。
xds2000 2000-07-13
  • 打赏
  • 举报
回复
到这里,toye.yeah.net.看来你以前没有学习过这个软件。
Leex2000 2000-07-13
  • 打赏
  • 举报
回复
1. A 不是字符集,表示这是一个 32 位版本的函数,因为 win32 同 windows 3.1 下面有很多同名的函数,加上 A 表示这是个 32 位版本的函数。但仍然有很多重名的函数,一般你用 bpx xxxx 就可以设定断点了,但有时候希望设定 16 位函数的断点,就必须写全了,例如 bpx kernel!readfile 是同 bpx kernel32!readfile 是不同的(softice 总是缺省设定为 32 位函数优先。
2. RuFeng 的回答是正确的,我在这里补充一下,EXP=xxxx 表示的是要 winice 启动的时候预装载的符号表,只有有了符号表你才能在程序中直接 dll 中的函数名字。如果你的机器内存不是很大(<32M) 只装载 kernel32.dll、user32.dll、gdi32.dll、cmddlg32.dll、advapi32.dll、comctl32.dll 就足够了。
这样你应该可以明白了,其实你也可以装载其它 .dll 的符号表,只要你调试的文件调用了这个 .dll 中的函数, 函数名就能看见了.
RuFeng 2000-07-12
  • 打赏
  • 举报
回复
打开winice.dat文件,把里面的:
;EXP=c:\windows\system\kernel32.dll
;EXP=c:\windows\system\user32.dll
;EXP=c:\windows\system\gdi32.dll
;EXP=c:\windows\system\comdlg32.dll
;EXP=c:\windows\system\shell32.dll
;EXP=c:\windows\system\advapi32.dll
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll
前面的;号删除,如果你的windows不是安装在c:\windows,改为你的windows目录,保存,重启,就可以了

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧