相关疑难解决方法(0)

检查Visual Studio C++编译器生成的代码,第1部分

可能重复:
为什么发出这样复杂的代码用于将有符号整数除以2的幂?

背景

我只是通过检查编译器生成的二进制代码来学习x86 asm.

Visual Studio 2010 beta 2中使用C++编译器编译的代码.

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.21003.01 for 80x86
Run Code Online (Sandbox Code Playgroud)

C代码(sandbox.c)

int mainCRTStartup()
{
    int x=5;int y=1024;
    while(x) { x--; y/=2; }
    return x+y;
}
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio命令提示符编译它

cl /c /O2 /Oy- /MD sandbox.c
link /NODEFAULTLIB /MANIFEST:NO /SUBSYSTEM:CONSOLE sandbox.obj
Run Code Online (Sandbox Code Playgroud)

在OllyDgb中解雇sandbox.exe

以下从入口点开始.

00401000 >/$ B9 05000000    MOV ECX,5
00401005  |. B8 00040000    MOV EAX,400
0040100A  |. 8D9B 00000000  LEA EBX,DWORD PTR DS:[EBX]
00401010  |> 99             /CDQ
00401011  |. 2BC2           |SUB …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly

7
推荐指数
2
解决办法
2600
查看次数

标签 统计

assembly ×1

c ×1

x86 ×1