c语言分析和循坏对应的汇编定义格式(Debug版本)
c语言if单分支结构所对应的汇编代码结构
#include "stdafx.h"
int main(int argc, char* argv[])
{
if(argc > 8 )
{
printf("argc > 8");
if(argc > 50)
{
printf("argc > 50");
}
}
return 0;
}


注意这些与语言没有关系,这是编译原理的问题,以后看编译原理
if和else双分支的汇编结构
#include "stdafx.h"
int main(int argc, char* argv[])
{
if(argc> 0 )
{
printf("argc>0\r\n");
}
else
{
printf("argc<=0\r\n");
}
return 0;
}


双分支的结构特点:jxx的目标上一行指令为jmp,而且是往高地址去的的jmp
编译原理代码优化外提

do—while(效率最高,跳转的目标没有检测条件,往上跳)
#include "stdafx.h"
int main(int argc, char* argv[])
{
int n = 1;
int nSum = 0;
do
{
nSum=nSum+n;
n++;
}
while(n<=100);
return 0;
}


1.识别代码定式
2.如果是do循环,则按jxx同条件还原等价高级代码
3.其余的代码还原则按相反的规则还原
while循环的代码定式(地址减量跳,两跳)

int main(int argc, char* argv[])
{
int n = 1;
int nSum = 0;
while(n<=100){
nSum = nSum + n;
n++;
}
printf("%d",nSum);
return 0;
}


关键比较是比较的是常量,常量在是可以在编译期间预知其结果。常量传播
for循环
#include "stdafx.h"
int main(int argc, char* argv[])
{
int i = 1; ;
int nSum = 0;
for(i=1; i<=100; i++)
{
nSum = nSum+ i ;
}
printf("%d\n",nSum);
return 0;
}


if和else if
#include "stdafx.h"
int main(int argc, char* argv[])
{
int nSum = 0 ;
if(argc ==1)
{
nSum = nSum+1;
}
else if(argc == 2)
{
nSum = nSum-1;
}
else if(argc == 3)
{
nSum = nSum*argc;
}
else
{
nSum = nSum / argc;
}
return 0;
}

常量传播
常量折叠
四则运算运算符难 算法逆向最难对象的简单最简单。
c语言分析和循坏对应的汇编定义格式(Debug版本)的更多相关文章
- java(5)循坏结构
一. while循环 1.循环的优点? 减少重复代码的编写:程序会更加的简洁 2.语法 while(表达式){ // 1.表达式是[循环条件],结果必须是boolean类型 //2.{}中的代码,即[ ...
- 哈工大LTP语言分析:分词、词性标注、句法分析等
1. LTP介绍和安装 LTP语言云官网 在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...
- R语言分析朝阳医院数据
R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...
- 流程控制之while循坏
流程控制之while循坏 一.语法 循环就是一个重复的过程,我们人需要重复干一个活,人岂不是要累死啊,而且还是那么-..的枯燥乏味,向我这样要的小年轻,不骚里骚气的行吗?那岂不是白白流浪了这么多年头, ...
- python while循坏和for循坏
while循坏 while 条件: 条件成立,执行循坏体(注意,while循坏必须有结束条件,不然会进入死循坏) 简单做个演示: # -*- coding:utf-8 -*- # Author:覃振鸿 ...
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- for语句嵌套循坏性能的剖析
日常工作中,处理数据难免会遇到遍历,for循环可能是我们用的比较多的了.本节就来探讨下for语句嵌套循环的性能,猜想下面两个语句的性能. 语句1 ; i < ; i++){ ; j < ; ...
- 用R语言分析我的fitbit计步数据
目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来 已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下: 日期 消耗卡路里数 步 距离 攀爬楼 ...
- 用R语言分析与预測员工离职
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...
- 使用R语言分析股价波动
今天看的R语言.做个笔记. 使用R语言读取雅虎財经数据.分析微软公司(股票代码:MSFT)在2015年股价波动超过百分之十的日期. 然后通过检索新闻的方式,看看微软当天有什么新闻发生,导致股价波动. ...
随机推荐
- Windows 11 启用 Hyper-V 之后网络上传速度异常慢解决方案
最近在开发用的台式机上启用了 Windows 的 Hyper-V 虚拟化功能,利用虚拟机运行了一台 Windows Server 2022 和 一台 Ubuntu Server,为了方便别的机器直接访 ...
- flink之Sink to MySQL和Redis
前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...
- prism journal导航按钮的可用性探索记录
prism使用导航功能的时候,跳了几个坑,记录一下. 1.导航记录的产生,是在区域导航过程中产生的. _regionManager.Regions[PrismManager.MainViewRegio ...
- 通过空间占用和执行计划了解SQL Server的行存储索引
1 索引介绍 索引是一种帮助查询语句能够快速定位到数据的一种技术.索引的存储方式有行存储索引.列存储索引和内存优化三种存储方式: 行存储索引,使用B+树结构,行存储指的是数据存储格式为堆.聚集索引和内 ...
- 2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i
2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i ...
- 2020-12-28:java中,生产环境服务器变慢,如何诊断处理?
福哥答案2020-12-28:答案1:使用 top 指令,服务器中 CPU 和 内存的使用情况,-H 可以按 CPU 使用率降序,-M 内存使用率降序.排除其他进程占用过高的硬件资源,对 Java 服 ...
- uni-app Pages.json配置
https://uniapp.dcloud.net.cn/collocation/pages.html pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径.窗口样式.原 ...
- requests标头在json序列化时报错TypeError: Object of type CaseInsensitiveDict is not JSON serializable
requests的作者似乎为了解决header里大小写兼容的问题,而创建了大小写不敏感的数据结构CaseInsensitiveDict,requests返回的响应标头即是一个CaseInsensiti ...
- CMU15445 (Fall 2020) 数据库系统 Project#2 - B+ Tree 详解(上篇)
前言 考虑到 B+ 树较为复杂,CMU15-445 将 B+ 树实验拆成了两部分,这篇博客将介绍 Checkpoint#1 部分的实现过程,搭配教材 <DataBase System Conce ...
- Linq的所有用法(简单化)
Linq 是一种强大的查询语言,可以过滤.排序和组合各种数据源.下面我们将讨论 Linq 的各种用法. Linq 的基本语法: Linq 可以应用于任何对象集合,以下是一个示例: var number ...