注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

odbcad32输入输出  

2013-03-14 16:50:42|  分类: 调试记录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

odbcad32发送数据02后,在以下地方接收数据

eax=0007a934 ebx=00034ed8 ecx=71a245ad edx=00d52098 esi=0007c98c edi=0007a934
eip=6d88ce89 esp=0007a8ec ebp=0007c938 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
DBNETLIB!GetNextEnumeration+0x295:
6d88ce89 ff156411886d    call    dword ptr [DBNETLIB+0x1164 (6d881164)] ds:0023:6d881164={WSOCK32!recvfrom (71a43001)}
0:000> dd esp l4
0007a8ec  000006fc 0007a934 00002000 00000000
0:000> p
eax=00000077 ebx=00034ed8 ecx=00b06d20 edx=00000001 esi=0007c98c edi=0007a934
eip=6d88ce8f esp=0007a904 ebp=0007c938 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
DBNETLIB!GetNextEnumeration+0x29b:
6d88ce8f 83f8ff          cmp     eax,0FFFFFFFFh

接收的数据

0:000> db 0007a934 leax
0007a934  05 74 00 53 65 72 76 65-72 4e 61 6d 65 3b 41 41  .t.ServerName;AA
0007a944  41 41 41 41 41 41 3b 49-6e 73 74 61 6e 63 65 4e  AAAAAA;InstanceN
0007a954  61 6d 65 3b 4d 53 53 51-4c 53 45 52 56 45 52 3b  ame;MSSQLSERVER;
0007a964  49 73 43 6c 75 73 74 65-72 65 64 3b 4e 6f 3b 56  IsClustered;No;V
0007a974  65 72 73 69 6f 6e 3b 38-2e 30 30 2e 31 39 34 3b  ersion;8.00.194;
0007a984  74 63 70 3b 31 34 33 33-3b 6e 70 3b 5c 5c 41 41  tcp;1433;np;\\AA
0007a994  41 41 41 41 41 41 5c 70-69 70 65 5c 73 71 6c 5c  AAAAAA\pipe\sql\
0007a9a4  71 75 65 72 79 3b 3b                                              query;;

上面的数据格式:05开头;后面2字节为数据长度;最后的为真正的数据。

在这两行下断点并自动运行输出看看

ba e1 6d88ce89 "r @eip;dd @esp l4;g"

ba e1 6d88ce8f "r @eax;g"

有很多次,这取决于网络上的服务器了

eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=00000077
eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=00000079
eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=00000079
eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=0000007b
eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=00000101
eip=6d88ce89
0007a8ec  000006fc 0007a934 00002000 00000000
eax=ffffffff

上面的接收缓冲区(地址0007a934 大小00002000 )是堆栈上的空间,堆栈空间00002028大小。

每一次接收到后都做检查,之后分配2个堆空间,一个作为链表项,大小0c,一个保存数据包,大小由数据包长决定。

把收到的数据拷到新分配的堆空间里,之后继续接收下一个数据包。

DBNETLIB!GetNextEnumeration+0x316:
6d88cf0a ff15dc10886d    call    dword ptr [DBNETLIB+0x10dc (6d8810dc)] ds:0023:6d8810dc={msvcrt!malloc (77bfc407)}
0:000> dd esp l4
0007a900  0000000c 5c277c6b 00000000 000b0c08

DBNETLIB!GetNextEnumeration+0x329:
6d88cf1d ff15dc10886d    call    dword ptr [DBNETLIB+0x10dc (6d8810dc)] ds:0023:6d8810dc={msvcrt!malloc (77bfc407)}
0:000> dd esp l4
0007a900  00000101 5c277c6b 00000000 000b0c08

示意如下

odbcad32输入输出 - appall - 且行且记录
 

 一些具体数据示意

odbcad32输入输出 - appall - 且行且记录
 

 在上面分配对内存的下一行指令处下断点

ba e1 6d88cf10 ".echo =====111====;r @eip;r @eax;g"
ba e1 6d88cf23 "r @eip;r @eax;g"

运行到

6d88ce94 ff156811886d    call    dword ptr [DBNETLIB+0x1168 (6d881168)] ds:0023:
6d881168={WS2_32!WSAGetLastError (71a23cce)}

输出如下

=====111====
eip=6d88cf10
eax=000346d0
eip=6d88cf23
eax=00034c48
=====111====
eip=6d88cf10
eax=00034f18
eip=6d88cf23
eax=00036c38
=====111====
eip=6d88cf10
eax=00034cd8
eip=6d88cf23
eax=000372d0
=====111====
eip=6d88cf10
eax=00036cd0
eip=6d88cf23
eax=00037368
=====111====
eip=6d88cf10
eax=00036cf8
eip=6d88cf23
eax=00037488

之后这些空间里的字符串在

6d88cde1 ff15b810886d    call    dword ptr [DBNETLIB+0x10b8 (6d8810b8)] ds:0023:6d8810b8={kernel32!MultiByteToWideChar (7c809c98)}

转换成宽字符串

同样下断点

ba e1 6d88cde1 ".echo ====222===;dd esp l8;g"

运行后输出

====222===
0007a8ec  00000000 00000000 00034c4b 00000074
0007a8fc  000d79d8 00000074 5c277c6b 00000000
====222===
0007a8ec  00000000 00000000 00036c3b 00000076
0007a8fc  000d7ac0 00000076 5c277c6b 00000000
====222===
0007a8ec  00000000 00000000 000372d3 00000076
0007a8fc  000d7bac 00000076 5c277c6b 00000000
====222===
0007a8ec  00000000 00000000 0003736b 000000fe
0007a8fc  000d7c98 000000fe 5c277c6b 00000000
====222===
0007a8ec  00000000 00000000 0003748b 00000078
0007a8fc  000d7e94 00000078 5c277c6b 00000000

上面的转换前在以下分配堆空间

sqlsrv32!Ordinal78+0x20ec:
4b4720ec ff156410474b    call    dword ptr [sqlsrv32!Ordinal78+0x1064 (4b471064)
] ds:0023:4b471064={ntdll!RtlAllocateHeap (7c9300c4)}
0:000> dd esp l8
0007c92c  00090000 00000008 000005ae 00000000
0007c93c  0007ce88 4b4c1c03 000b0db8 000005ae

0:000> p
eax=000d79d8

最后就处理这个新堆空间

 

  评论这张
 
阅读(220)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017