首页
社区
课程
招聘
[求助]菜鸟求助
发表于: 2010-1-16 23:35 3692

[求助]菜鸟求助

2010-1-16 23:35
3692
我想把MsgStruct这个struct类型的数据存储到szBuffer里面, 于是用了下面这段代码:

RtlZeroMemory(szBuffer, sizeof(MSG_STRUCT)) ;
memcpy(szBuffer, &MsgStruct, MsgStruct.MsgHead.Length) ;

wsprintf(Temp, _T("%0x   %0x"), *szBuffer, MsgStruct.MsgHead.dwCmdId ) ;
MessageBox(NULL, Temp, TEXT("发送命令"), MB_OK) ;
显示的是一个对话框:
ffffff81     81;
如果使用itoa(MsgStruct.MsgHead.dwCmdId, szBuffer, 16) ;
则弹出的对话框:
     38       81; 想不通是咋回事
还希望哪位大侠出来指教下...

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
2
看看这个

...

wsprintf(Temp, _T("%04x   %04x"), *szBuffer, 16,16) ;

显示对话框:
0010     0010;
2010-1-17 01:53
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
哈, 谢啦, 朋友建议我用OD看下, 发现原因了.下面是wsprintf函数的调用,
wsprintf(Temp, _T("%0x   %0x"), *szBuffer, MsgStruct.MsgHead.dwCmdId )
mov     eax, [local.78]
push    eax     ; 此处为00000081为MsgStruct.MsgHead.dwCmdId 的值
movsx  ecx, byte ptr ss : [ebp- 338]; [ebp - 338]为szBuffer的值81, 但是由于movsx指令是有符号数扩展, 所以高位以1填充, ecx = ffffff81
push    ecx
push    charrrom.00427161
lea      edx, [local.334]
push   edx
call      dword ptr ds:[<&user32.wsprintf>]
所以显示的是ffffff81, 81
2010-1-17 02:29
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
4
哈哈,发现我的是错误的,多了个参数,没看清
2010-1-17 04:27
0
游客
登录 | 注册 方可回帖
返回
//