小编use*_*426的帖子

从 MSVC 32 位版本(作业)解码程序集。无操作有什么作用?

嗨,请注意,这是作业。我得到了一个由 MSVC 32 位版本生成的带有优化的程序集,我应该将它解码回 C++。我已将函数的顶部包含在我遇到问题的行中。评论是我的,我是在试图理解这一点时写的。

注意:代码应该是从 C++ 生成的。不是传统的 ASM。注 2:代码中有一处未定义行为。

这是我坚持的路线

TheFunction:                            ; TheFunction(int* a, int s);
0F2D4670  push  ebp                     ; Push/clear/save ebp
0F2D4671  mov   ebp,esp                 ; ebp now points to top of stack
0F2D4673  push  ecx                     ; Push/clear/save ecx
0F2D4674  push  ebx                     ; Push/clear/save ebs
0F2D4675  push  esi                     ; Push/clear/save esi

0F2D4676  mov   ebx,edx                         ; ebx = int s
0F2D4678  mov   esi,1                           ; esi = 1
0F2D467D  push  edi  ; calling convention       ; Push/clear/save edi
0F2D467E  mov   edi,dword ptr …
Run Code Online (Sandbox Code Playgroud)

c++ assembly visual-c++

2
推荐指数
1
解决办法
94
查看次数

对于C++中的循环增加变量的区别

以下两个for循环之间有什么区别?

for(int i = 0; i < 5; i++)
{

}
Run Code Online (Sandbox Code Playgroud)

for(int i = 0; i < 5;)
{
//End of whatever code to do.
 i++;
}
Run Code Online (Sandbox Code Playgroud)

根据http://www.cplusplus.com/doc/tutorial/control/,应该没有区别.然而,当我运行我的代码(下面的代码)时,取决于iter ++的位置,存在差异.

在这个程序中,我有一个单独的线程运行来获取输入.当我将iter ++移到底层时会发生什么,当一个单独的客户端连接到服务器时,我必须在响应之前在cin流中输入一些内容.

当iter ++位于for循环内部时,这个问题不会发生.

我希望我的iter ++位于底部的原因是当我收到断开连接时,我可以删除地图中的会话.

    for (iter = network->sessions.begin(); iter != network->sessions.end(); iter++)
{
    //bool Deleted = false;

    int data_length = network->receiveData(iter->first, network_data);

    if (data_length < 0) 
    {
        //no data recieved
        continue;
    }
    if (data_length == 0)
    {
        printf("Data closed GRACEFULLY LOL \n");
        continue;
    }

    int …
Run Code Online (Sandbox Code Playgroud)

c++ loops

1
推荐指数
1
解决办法
1063
查看次数

标签 统计

c++ ×2

assembly ×1

loops ×1

visual-c++ ×1