wsprint 的解释
Win32 API中一个很常用的函数wsprintf,这是一个字符串格式化函数,可以将数值按指定格式转换成字符串
这个数值到底是什么呢?肯定不是地址 是一个数据
那这个数据应该是多长呢?
我做了一个试验
szTest db '参数: [%08x]',0
szNum dw 0d0ah
dwTemp db 256 dup (?)
invoke wsprintf,addr dwTemp,addr sztest,szNum
invoke MessageBox,NULL,addr dwTemp,NULL,MB_OK
运行以后 对话框提示
参数: [00000d0a]
似乎没错 接着我再重新定义一次
sztest db '参数: [%08x]',0
szNum db 0ah,0dh
dwTemp db 256 dup (?)
invoke wsprintf,addr dwTemp,addr sztest,szNum
invoke MessageBox,NULL,addr dwTemp,NULL,MB_OK
运行以后 结果对话框提示
参数: [0000000a]
szNum dw 0d0ah 和
szNum db 0ah,0dh
我看了编译以后的数据 都是一样的啊?
为什么两次执行的结果却不一样?
写到一般,突然想到或许是 编译是编译器翻译的。我现在跟踪下看看 执行到这里到底是怎么翻译的
高手也可以解答下 这个数值的长度到底有什么样子的标准?
如果数字都是0的情况的下会怎么样?
最近 研究WIN32汇编 的HOOK
截取消息的时候 用这个函数格式化 MSG里的lParam的数值
有时候 格式化是8个0 有时候 8个0后面又会跟些莫名其妙的数据
到现在一直搞不懂是为什么
比如
szFormat db 0dh,0ah
db '消息类型:%s'
db 'nWnd:%08x'
db 'wParam:%08x'
db 'lParam:%08x',0
_dwCode==HC_ACTION
mov edx,_lParam
assume edx:ptr MSG
invoke wsprintf,addr @szBuffer,addr szFormat,eax,[edx].hwnd,[edx].wParam,[edx].lParam
invoke SendMessage,hWnd,WM_HOOK,0,addr @szBuffer
收到消息以后写到 文件里 有时候总是会出现乱七八糟的数据 到现在也搞不懂为什么
比如会写入类似
消息类型:WM_PAINT nWnd:00cf05f0wParam:00000000lParam:00000000
这样的数据
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课