重学C---------第一节: Hello world-程序员宅基地

技术标签: c/c++  

Hello world是最简单的c语言程序,也是大多数程序员的开始。

1 #include <stdio.h>
2 
3 void main()
4 {
5     printf("Hello World ! \n");
6 }

对应的工程下载:http://files.cnblogs.com/tk091/rl001.7z

我们用OD对其进行反汇编查看(查看的是主函数):

 1 00401010  |> \55            push ebp
 2 00401011  |.  8BEC          mov ebp,esp
 3 00401013  |.  83EC 40       sub esp,0x40
 4 00401016  |.  53            push ebx
 5 00401017  |.  56            push esi
 6 00401018  |.  57            push edi
 7 00401019  |.  8D7D C0       lea edi,[local.16]
 8 0040101C  |.  B9 10000000   mov ecx,0x10
 9 00401021  |.  B8 CCCCCCCC   mov eax,0xCCCCCCCC
10 00401026  |.  F3:AB         rep stos dword ptr es:[edi]
11 00401028  |.  68 1C204200   push rl001.0042201C                      ;  ASCII "Hello World ! 
12 "
13 0040102D  |.  E8 2E000000   call rl001.00401060
14 00401032  |.  83C4 04       add esp,0x4
15 00401035  |.  5F            pop edi
16 00401036  |.  5E            pop esi
17 00401037  |.  5B            pop ebx
18 00401038  |.  83C4 40       add esp,0x40
19 0040103B  |.  3BEC          cmp ebp,esp
20 0040103D  |.  E8 9E000000   call rl001.004010E0
21 00401042  |.  8BE5          mov esp,ebp
22 00401044  |.  5D            pop ebp
23 00401045  \.  C3            retn

然后用IDA对其进行解析,得到下面的情况

1 int __cdecl main_0()
2 {
3   char v1; 
4 
5   memset(&v1, 0xCCCCCCCCu, 64u);
6   printf("Hello World ! \n");
7   return _chkesp();
8 }

在打印之前,会先申请局部空间,然后初始化为CC,打印结束后,对esp进行检查,对堆栈进行平衡。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34380781/article/details/86105157

智能推荐

java 反编译 调试_eclipse 反编译 jar 中 .class 并打断点调试-程序员宅基地

文章浏览阅读643次。eclipse 反编译 jar中.class 并打断点调试1. 下载工具2. 增加jadeclipse功能把 net.sf.jadclipse_3.3.0.jar复制到eclipse/plugins目录下;jad.exe放到 JAVA_HOME/bin下。3.配置jad路径打开eclipse,windows-->perferences-->java--->jadClips..._eclipse 反编译打不了断点

Visual Studio的SDK配置-程序员宅基地

文章浏览阅读2.4k次。Visual Studio的SDKVisual Studio 6.0自带的SDK是1998年的,目录为C:\Program Files\Microsoft Visual Studio\VC98\,这里简记为VS6SDKDIR。以下为打开vc6菜单tools-&gt;options-&gt;directories. 我们看到Platform为Win32,Show directories ..._vs platformsdk在哪

Java笔记---Hadoop 2.7.1下WordCount程序详解_[hadoop@master mapreduce]$ hadoop jar hadoop-mapre-程序员宅基地

文章浏览阅读1.9w次,点赞7次,收藏21次。一、前言在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境。既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是WordCount程序(一个简单的单词计数程序)二、WordCount 官方案例的运行 2.1 程序简介WordCount程序是hadoop自带的案例,我们可以在 hadoop..._[hadoop@master mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.1.jar wo

2019最新版iOS面试题大全_ios高级面试题2019-程序员宅基地

文章浏览阅读459次。1、设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。3). 单例模式:通过static关键词,声明全局变量。在整个..._ios高级面试题2019

JsonUtil.java-程序员宅基地

文章浏览阅读60次。JsonUtil.javapackage com.xxx.common.util;import java.io.IOException;import org.apache.commons.lang.StringUtils;import org.codehaus.jackson.JsonParseException;import org.codehaus.jackso..._jsonutil.java在哪

Gerrit代码审核服务器的工作流程和原理_gerrit审核状态为ready,怎么审核为merged-程序员宅基地

文章浏览阅读6.6k次。Gerrit 代码审核服务器的工作流和原理谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的 repo,这在之前我们已经详细讨论过。另外一个重要的创新就是 Gerrit —— 代码审核服务器。Gerrit 为 Git 引入的代码审核是强制性的,就是说除非特别的授权设置,向 Git 版本库的推送(Push)必须要经过 Gerrit 服务器,修订必_gerrit审核状态为ready,怎么审核为merged

随便推点

Android安全之DM-verity中的Device Mapper机制分析-程序员宅基地

文章浏览阅读9k次,点赞6次,收藏39次。我们想法:能不能将多个硬盘,映射成一个逻辑的硬盘,那样我们程序就不用关心复杂的地址问题了,也不用关系是哪个device了? DM-raid技术RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks) 将某个地址段的数据进行加密,只有授权方式才可访问,比如FDE。 DM-crypt技术访问存储介质上的数据时,校验下是否被篡改过

apache=>DokuWiki 安装-程序员宅基地

文章浏览阅读306次。checking for APR... noconfigure: error: APR not found.解决办法:1.下载所需软件包:[code=&amp;quot;java&amp;quot;]wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz wget http://archive.apache...

crio电压采集 labview_LabVIEW与cRIO入门.pdf-程序员宅基地

文章浏览阅读702次。 和 CompactRIO LabVIEW入门指南注 新用户可通过LabVIEW 入门指南了解LabVIEW 基本信息和相关术语。本..._labview crio

13. 试用vSphere 6(二):使用vSphere Client 6.0管理ESXi主机-程序员宅基地

文章浏览阅读2.3k次。一、VMware vSphere 6(RC版)安装配置系列文章:1、试用vSphere 6(一):安装ESXi 6 RC版2、试用vSphere 6(二):使用vSphere Client 6.0管理ESXi主机3、试用vSphere 6(三):安装vCenter 6(独立数据库)之:域控服务器安装与配置4、试用vSphere 6(三):安装vCenter 6(独立数据_vsphere client 6

使用gb2312乱码,utf-8正常-程序员宅基地

文章浏览阅读4.9k次。问题:使用gb2312编码会导致在终端输出和网页输出都是乱码,使用utf-8则不会。原因:jsp使用的编码方式是gb2312,这个编码方式决定了jsp页面所有显示文字的编码方式,包括text组件中输入的内容。对于get方法,请求参数是直接拼接在url后面的,而这个参数的编码应该也是由jsp使用的编码方式决定的。这些参数到达tomcat后,会首先经过一次解码,这个过程是程序不能干预的,发生在servlet所有的操作进行之前。而tomcat8之后默认的编码方式是utf-8,两个编码方式的不一致就导致了乱码。._gb2312乱码

Android AudioRecord 流程分析_android record_audio-程序员宅基地

文章浏览阅读1.7k次。Android 4.4KitKat AudioRecord 流程分析   Android是架构分为三层:底层 Linux Kernel中间层 主要由C++实现 (Android 60%源码都是C++实现)应用层 主要由JAVA开发的应..._android record_audio

推荐文章

热门文章

相关标签