首页 > 编程语言 >do...while循环、for循环、while循环反汇编

do...while循环、for循环、while循环反汇编

时间:2023-06-19 17:11:06浏览次数:72  
标签:do 00 FC mov while 循环 ebp dword ptr

do...while循环、for循环、while循环反汇编

do...while循环

C代码如下所示:

  • VC6++
  • Debug32位版本
#include "stdafx.h"

void Function()
{
	int i = 0;
	int sum = 0;
	do
	{
		sum += i;
		i++;


	}while(i<100);
}	
int main(void){
	Function();
    return 0;
}

反汇编如下:

Function:
0040B960 55                   push        ebp
0040B961 8B EC                mov         ebp,esp
0040B963 83 EC 48             sub         esp,48h
0040B966 53                   push        ebx
0040B967 56                   push        esi
0040B968 57                   push        edi
0040B969 8D 7D B8             lea         edi,[ebp-48h]
0040B96C B9 12 00 00 00       mov         ecx,12h
0040B971 B8 CC CC CC CC       mov         eax,0CCCCCCCCh
0040B976 F3 AB                rep stos    dword ptr [edi]
0040B978 C7 45 FC 00 00 00 00 mov         dword ptr [ebp-4],0
0040B97F C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0
0040B986 8B 45 F8             mov         eax,dword ptr [ebp-8]
0040B989 03 45 FC             add         eax,dword ptr [ebp-4]
0040B98C 89 45 F8             mov         dword ptr [ebp-8],eax
0040B98F 8B 4D FC             mov         ecx,dword ptr [ebp-4]
0040B992 83 C1 01             add         ecx,1
0040B995 89 4D FC             mov         dword ptr [ebp-4],ecx
0040B998 83 7D FC 64          cmp         dword ptr [ebp-4],64h
0040B99C 7C E8                jl          Function+26h (0040b986)
0040B99E 5F                   pop         edi
0040B99F 5E                   pop         esi
0040B9A0 5B                   pop         ebx
0040B9A1 8B E5                mov         esp,ebp
0040B9A3 5D                   pop         ebp
0040B9A4 C3                   ret

反汇编识别:

牢记汇编的几个关键位置,针对于32位汇编而言,ebp+4为返回地址,ebp+8(+c,+0x10)都是外部参数压栈,或者传入的变量

ebp-4,ebp-8一般是内部开辟的局部变量


for循环

C语言代码如下:

  • VC6++
  • Debug32位版本
#include "stdafx.h"

void Function()
{
	int sum = 0;
	for(int i =0;i<100;i++)
	{
		sum+=i;
	}
	printf("sum = %d\n",sum);

}	
int main(void){
	Function();
    return 0;
}

汇编代码如下:

Function:
0040B960 55                   push        ebp
0040B961 8B EC                mov         ebp,esp
0040B963 83 EC 48             sub         esp,48h
0040B966 53                   push        ebx
0040B967 56                   push        esi
0040B968 57                   push        edi
0040B969 8D 7D B8             lea         edi,[ebp-48h]
0040B96C B9 12 00 00 00       mov         ecx,12h
0040B971 B8 CC CC CC CC       mov         eax,0CCCCCCCCh
0040B976 F3 AB                rep stos    dword ptr [edi]
0040B978 C7 45 FC 00 00 00 00 mov         dword ptr [ebp-4],0
0040B97F C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0
0040B986 EB 09                jmp         Function+31h (0040b991)
0040B988 8B 45 F8             mov         eax,dword ptr [ebp-8]
0040B98B 83 C0 01             add         eax,1
0040B98E 89 45 F8             mov         dword ptr [ebp-8],eax
0040B991 83 7D F8 64          cmp         dword ptr [ebp-8],64h
0040B995 7D 0B                jge         Function+42h (0040b9a2)
0040B997 8B 4D FC             mov         ecx,dword ptr [ebp-4]
0040B99A 03 4D F8             add         ecx,dword ptr [ebp-8]
0040B99D 89 4D FC             mov         dword ptr [ebp-4],ecx
0040B9A0 EB E6                jmp         Function+28h (0040b988)
0040B9A2 8B 55 FC             mov         edx,dword ptr [ebp-4]
0040B9A5 52                   push        edx
0040B9A6 68 74 0F 42 00       push        offset string "3" (00420f74)
0040B9AB E8 70 57 FF FF       call        printf (00401120)
0040B9B0 83 C4 08             add         esp,8
0040B9B3 5F                   pop         edi
0040B9B4 5E                   pop         esi
0040B9B5 5B                   pop         ebx
0040B9B6 83 C4 48             add         esp,48h
0040B9B9 3B EC                cmp         ebp,esp
0040B9BB E8 E0 57 FF FF       call        __chkesp (004011a0)
0040B9C0 8B E5                mov         esp,ebp
0040B9C2 5D                   pop         ebp
0040B9C3 C3                   ret

识别如下所示:


while循环

C语言代码如下:

  • VC6++
  • Debug32位
#include "stdafx.h"

void Function()
{
	int i = 0;
	int sum = 0;
	while(i<100){
		sum += i;
		i++;

	}

}	
int main(void){
	Function();
    return 0;
}

汇编语言如下:

Function:
0040B960 55                   push        ebp
0040B961 8B EC                mov         ebp,esp
0040B963 83 EC 48             sub         esp,48h
0040B966 53                   push        ebx
0040B967 56                   push        esi
0040B968 57                   push        edi
0040B969 8D 7D B8             lea         edi,[ebp-48h]
0040B96C B9 12 00 00 00       mov         ecx,12h
0040B971 B8 CC CC CC CC       mov         eax,0CCCCCCCCh
0040B976 F3 AB                rep stos    dword ptr [edi]
0040B978 C7 45 FC 00 00 00 00 mov         dword ptr [ebp-4],0
0040B97F C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0
0040B986 83 7D FC 64          cmp         dword ptr [ebp-4],64h
0040B98A 7D 14                jge         Function+40h (0040b9a0)
0040B98C 8B 45 F8             mov         eax,dword ptr [ebp-8]
0040B98F 03 45 FC             add         eax,dword ptr [ebp-4]
0040B992 89 45 F8             mov         dword ptr [ebp-8],eax
0040B995 8B 4D FC             mov         ecx,dword ptr [ebp-4]
0040B998 83 C1 01             add         ecx,1
0040B99B 89 4D FC             mov         dword ptr [ebp-4],ecx
0040B99E EB E6                jmp         Function+26h (0040b986)
0040B9A0 5F                   pop         edi
0040B9A1 5E                   pop         esi
0040B9A2 5B                   pop         ebx
0040B9A3 8B E5                mov         esp,ebp
0040B9A5 5D                   pop         ebp
0040B9A6 C3                   ret

汇编识别如下所示:

Over~

标签:do,00,FC,mov,while,循环,ebp,dword,ptr
From: https://www.cnblogs.com/qsons/p/17491594.html

相关文章

  • MONGODB 复制集 DOWN DOWN 机了, 5种情况与系统恢复
    最近TEAM里面的每个DB都在做高可用失效后的应急方案和处理的文档,要写这个东西我和MONGODB的DBA主要要做的有以下内容1 环境的准备三台MOGNODB4.2 社区版本2  安装成为复制集3  制定测试计划     测试计划主要从以下几个方面考虑   1  从库DOWN机,对应......
  • 将docker里的所有images镜像推送至服务器上的harbor指定的仓库里
    使用shell脚本实现将docker里的所有images镜像推送至服务器上的harbor指定的仓库里shell脚本内容如下:#!/bin/bash#设置Harbor仓库的地址和凭据#harbor服务器地址HARBOR_URL="192.168.1.55:88"#用户名HARBOR_USERNAME="admin"#登录密码HARBOR_PASSWORD="Harbor12345"#指......
  • Docker Compose 引用环境变量
    ComposeCLI与环境变量ComposeCLI(composecommand-line即docker-compose程序)能够识别名称为COMPOSE_PROJECT_NAME和COMPOSE_FILE等环境变量(具体支持的环境变量请参考这里)。比如我们可以通过这两个环境变量为docker-compose指定project的名称和配置文件:$exportC......
  • 如何在Windows上从源代码构建OpenJFX 8
    所以你已经听到了这个消息。Oracle震惊世界,改变了Java和相关技术的支持路线图,发布周期等。但是,您的业务'JavaFX应用程序(及其依赖项)在OracleJDK8上运行。您喜欢稳定性,因为如果您不这样做,您的业务软件可能会失败,导致您花钱或更糟-让您破产和/或还是欠债那么这对OracleJDK/Java......
  • windows ,go powershell 测试并且性能分析
    benchamark并且性能分析gotest-runnone-bench.-benchmem-cpuprofilecpu.prof-memprofilemem.prof;Start-Job{gotoolpprof-http=:10000.\cpu.prof};Start-Job{gotoolpprof-http=:10001.\mem.prof}-bench表示执行哪些基准测试函数,后面可以加需要执行......
  • nginx前端页面通过docker部署过程中的相关问题
    1、nginx.conf的ip地址对应服务器的ip 2、数据卷的路径需要与配置文件对应nginx.conf创建数据卷与容器的语句dockerrun--name=nginx01-vhtml:/usr/share/nginx/html-p8080:80-dnginx3、nginx.conf配置文件的存放位置dockercpnginx.confngin......
  • Turndown 源码分析:二、规则`commonmark-ruiles.js` REV1
    import{repeat}from'./utilities'varrules={}//段落rules.paragraph={filter:'p',replacement:function(content){//前后加两个换行return'\n\n'+content+'\n\n'}}//换行rules.lineBrea......
  • window wsl 无法访问flink webui
    https://blog.csdn.net/weixin_38988171/article/details/126012785修改flink配置文件rest.bind-address:localhost为rest.bind-address:0.0.0.0......
  • windows10安装Oracle数据库
    Oracle数据库安装流程配置压缩包资源:链接:https://pan.baidu.com/s/19ElajYQIosiBcM84ZRiIVg提取码:07061.首先提前再除C盘的任意一个盘符里新建一个Oracle文件夹,并将这俩个安装包压缩到其文件夹下,解压完的文件夹如下database。  2、进入database文件夹可执行安装文件......
  • 子系统安装Docker
    安装Docker在本地机器上创建docker.sh脚本,并将如下内容放入脚本中。#!/bin/bashecho~~~~~~~~~~~~~~StartInstall~~~~~~~~~~~~~~#Setuptherepositorysudoaptinstallca-certificatescurlgnupglsb-releaseecho~~~~~~~~~~~~~~AddDockerofficialGPGkey~~~~~~~......