您的位置:首页 > 编程语言 > C语言/C++

一行代码暴露你的C++水平

2016-01-07 09:37 330 查看
1 遇到如下的一个崩溃:

chrome!net::ConnectJob::ConnectJob:

5eb3e0bd 55              push    ebp

5eb3e0be 8bec            mov     ebp,esp

5eb3e0c0 83ec30          sub     esp,30h
5eb3e0c3 a140d0cf6b      mov     eax,dword ptr ds:[6BCFD040h]

5eb3e0c8 33c5            xor     eax,ebp

5eb3e0ca 8945fc          mov     dword ptr [ebp-4],eax

5eb3e0cd 8b451c          mov     eax,dword ptr [ebp+1Ch]

5eb3e0d0 8365d000        and     dword ptr [ebp-30h],0

5eb3e0d4 53              push    ebx

5eb3e0d5 56              push    esi

5eb3e0d6 8b7508          mov     esi,dword ptr [ebp+8]

5eb3e0d9 57              push    edi

5eb3e0da 8bf9            mov     edi,ecx

5eb3e0dc 8945d8          mov     dword ptr [ebp-28h],eax

5eb3e0df 897dd4          mov     dword ptr [ebp-2Ch],edi

5eb3e0e2 8d4f08          lea     ecx,[edi+8]

5eb3e0e5 c707bc19706b    mov     dword ptr [edi],6B7019BCh

5eb3e0eb e80bc5ffff      call    chrome!net::HpackHuffmanTable::HpackHuffmanTable (5eb3a5fb)

5eb3e0f0 8d5f38          lea     ebx,[edi+38h]

5eb3e0f3 56              push    esi

5eb3e0f4 8bcb            mov     ecx,ebx

崩溃在读取这个6BCFD040h地址违例。

但是ConnectJob的构造函数是这样的:

ConnectJob::ConnectJob(const std::string& group_name,

                       base::TimeDelta timeout_duration,

                       RequestPriority priority,

                       Delegate* delegate,

                       const BoundNetLog& net_log)

    : group_name_(group_name),

      timeout_duration_(timeout_duration),

      priority_(priority),

      delegate_(delegate),

      net_log_(net_log),

      idle_(true) {

  DCHECK(!group_name.empty());

  DCHECK(delegate);

  net_log.BeginEvent(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB,

                     NetLog::StringCallback("group_name", &group_name_));

}

似乎也没有读取全局变量的操作,那么问题来了,这个6BCFD040h地址究竟是什么变量呢?

真相在函数的最后:

5eb3e16c 8b4dfc          mov     ecx,dword ptr [ebp-4]

5eb3e16f 8bc6            mov     eax,esi

5eb3e171 5f              pop     edi

5eb3e172 5e              pop     esi

5eb3e173 33cd            xor     ecx,ebp

5eb3e175 5b              pop     ebx
5eb3e176 e8b02ff0ff      call    chrome!__security_check_cookie (5ea4112b)

函数开始的时候,将6BCFD040h值赋予ebp-4,函数退出的时候检测该值,判断缓冲区是否溢出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: