你真的会写 HelloWorld 吗?

news2025/1/15 19:38:52

目录

Hello World

写一个批处理命令行脚本

关于include

关于程序的入口

输出充定向

在内存的存储详情

WinHex工具介绍


初学C语言时,第一个程序一定是Hello World!。但是Hello World的具体实现细节你真的了解吗?

Hello World

C语言代码如下:

#include<stdio.h>

int main()
{
	int n = 999;
	printf("Hello world!%d\r\n",n);
	return 0;
}

写一个批处理命令行脚本

del *.obj                // 删除obj文件
del 8.exe                // 删除exe文件
cl /c /W4 /WX hello.c    // 编程源文件,生成obj文件
link hello.obj           // 链接,打包生成可执行程序
hello.exe                // 运行exe
pause                    // 暂停进程

关于include

实际上处理时就是吧inlcude包含的文件里的代码放进c文件里,相当于替换

  • #include<.h> .h文件,声明性代码,不会产生处理器行为,声明函数等
  • #include<.c>      .c文件,功能性代码,会产生处理器行为,定义全局变量(占空间)等

<> 只找环境变量 一般是官方库, "" 先找当前目录,如果没有,再找环境变量 一般是作者或他人自定义

可以使用这条命令,会生成预处理的文件,代开看看就会发现,Include本质就是一个替换操作。

cl /c /W4 /P Hello.c

指向某个文件在电脑磁盘上的位置。

关于程序的入口

一般都说C语言的程序的入口是main函数,但实际并非如此。在VC98中,有一个文件CRT0.c的文件,其缩写是C Run Time,是C语言真正的入口。

作用:它的执行开始在exe之前,初始化堆栈,线程,IO等,支持main函数的运行,所以CTR0.c才是程序的运行的环境

关于VC98:

VC98是指Microsoft Visual C++ 6.0(也称为Visual C++ 98),是一款由微软开发的集成开发环境(IDE),用于C和C++编程。

Visual C++ 6.0是在1998年发布的,它提供了一套工具和库,用于开发Windows平台下的应用程序。它包括了一个代码编辑器、调试器、编译器以及可视化的界面设计器等。

Visual C++ 6.0是一个相对较旧的版本,它在其发布时是非常受欢迎的,并广泛用于Windows应用程序开发。然而,由于时间的推移和微软的后续版本发布,如Visual Studio 2005、2010、2015等,Visual C++ 6.0逐渐被淘汰。

如果你打算使用Visual C++进行编程,建议考虑使用最新版本的Visual Studio,以获得更好的开发工具和更强大的功能支持。

里面还有很多的具体细节,之后会随着进一步学习慢慢了解

输出充定向

输出重定向,把输出内容重定向到磁盘

hello > 1.txt

 Windows中文乱码解决

chcp 65001

效果如下:

在内存的存储详情

观察 999 在内存的存储情况

int main()
{
	int n = 999;
	printf("n的内存地址是:%p \n",&n);
	system("pause");
	return 0;
}

运行批处理命令,打印 999 在内存中的存储地址

使用WinHex查看 999 在内存地址的存储情况,8字节

 999 的16进制形式: 00000000000003E7

内存存储情况

结论:999 在内存中的存储形式是低位存储在低地址,高位在高地址

对比x64dbg,在x64dbg中使用快捷键 CTRL+G,可以出入指定的地址并查看

从内存布局窗口可以看出,地址的每次变化是8,正对应8各字节,也就是16位16进制数据。

WinHex工具介绍

这里主要用于分析查看可执行文件在内存的存储情况,熟悉内存。

在菜单栏下有一个open ram,打开内存

找到你想要分析的进程,选中它即可

查看内存

        Primary Memory 主要内存

        Entire Memory 全部内存

内存中找数据

        寻找999,找999的 16进制的值,进行查找内存地址

程序运行时,除了可执行程序外还有dll动态链接库支持

主要页面

通过这个功能可以跳转到指定到内存地址

因为主要是使用的这款工具分析查看进程程序的内存状况,所以并不会全面的介绍学习这款工具.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM国内热门景点推荐系统的开发-计算机毕设 附源码83762

SSM国内热门景点推荐系统的开发 摘 要 为了方便用户快速定位自己感兴趣的国内热门旅游景点信息&#xff0c;国内热门景点推荐系统应运而生。本系统的前端界面主要实现页面的美观和动态效果使之符合广大群众的审美观&#xff0c;后台主要使用的技术主要有Java编程语言&#xff0…

Paragon NTFS2023Mac读取、写入外置移动硬盘软件

在我们日常使用电脑时常常会出现NTFS格式分区&#xff0c;那你知道NTFS For Mac是什么&#xff1f;简单的理解就是让你在mac系统下&#xff0c;可以正常读写Windows的Ntfs格式的分区。其中还包括Windows NT 4&#xff0c;2000&#xff0c;XP&#xff0c;2003&#xff0c;Vista&…

springboot 新农村信息化管理与服务平台-计算机毕设 附源码83372

springboot 新农村信息化管理与服务平台 目 录 摘要 1 绪论 1.1新农村信息化概念 1.2研究内容 1.3springboot框架介绍 1.4论文结构与章节安排 2 新农村信息化管理与服务平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析…

如何用GitKeep提交和推送一个空目录或文件夹

目录 .Gitkeep简介 .Gitkeep是什么 如何用GitKeep提交和推送一个空目录或文件夹 结论 相关参考 .Gitkeep简介 Git是一个开发工具&#xff0c;帮助团队管理他们的源代码并有效地处理项目。通过GitHub或其他托管服务上传时&#xff0c;不可能包括空白/空目录。这是有问题的…

[Arduino] ESP32开发 - 基础入门与原理分析

实用 GPIO 用到再查&#xff0c;熟能生巧&#xff0c;别上来就背图&#xff0c;一天你就忘了&#xff01; 仅输入引脚 下面的四个引脚由于内部没有上拉下拉电阻&#xff0c;所以仅仅支持输入信号 GPIO 34 GPIO 35 GPIO 36 GPIO 39 SPI Flash 闪存引脚 这些引脚都是对 ESP32 内…

【Java】以数组为例简单理解引用类型变量

我们首先要知道内存是一段连续的存储空间&#xff0c;主要用来存储程序运行时数据的&#xff0c;如果对内存中存储的数据不加区分的随意存储&#xff0c;那对内存管理起来将会非常麻烦,就像一个杂乱的房间&#xff0c;你如果想在这个房间里找一个东西的话&#xff0c;找起来就会…

怎么使用Sprng提供的容器去注册一个Bean对象(BeanFactory工厂)

目录 BeanFactory怎么使用Sprng提供的容器去注册一个Bean对象&#xff08;BeanFactory工厂&#xff09;总结 BeanFactory 怎么使用Sprng提供的容器去注册一个Bean对象&#xff08;BeanFactory工厂&#xff09; 重点&#xff1a;Spring容器&#xff0c;例如Beanfactory其实并没…

人生还需搏一搏,规划指南不可缺

前言 如题我的人生还需要再搏一搏&#xff0c;本篇文章&#xff0c;我将整理指定下个人目标计划&#xff0c;让这篇文章去指引自己去指导自己前进。敲下这一行字想起了高中时期的一段经历&#xff0c;在高一时我准备了一个小本子&#xff0c;按高一到高三每年每学期的期中&…

KeeperErrorCode = NoAuth for /hbase/tokenauth/keys

kerberos配置hbase出現問題 環境如下&#xff1a; 问题描述 想要在hadoop ha的場景上&#xff0c;基於kerberos配置hbase ha&#xff0c;出現了如下的bug org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode NoAuth for /hbase/runningat org.apache.…

C++ 第四弹动态内存管理

目录 1. C/C程序内存划分 2. C语言中内存管理的方式 3. new /delete 和 new[]/delete[] 4. void* operator new(size_t size) 和 void operator delete(void*) 可以重载的 5. 定义为new表达式 6. 常见的面试题 1. C/C程序内存划分 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数…

PHP代码审计之环境配置

PHP代码审计之环境配置 前言一、PHP环境配置1.1 phpstudy和phpstorm下载配置1.2 Xdebug 配置1.3 phpstudy 基本使用1.4 phpstorm基本使用1.5 RIPR下载使用 二、代码审计配置文件2.5 PHP的核心配置&#xff08;php.ini&#xff09;1. safe_mode2. magic_quote_gpc3. magic_quote…

Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服

概述 主要学习记录Maven仓库相关知识&#xff0c;如何借助上传项目jar包到GitHub、Nexus Sonatype&#xff0c;&#xff0c;以及搭建自己的Nexus Sonatype私服&#xff0c;然后在Maven项目的pom文件引入使用&#xff0c;参考Maven官网文档:https://central.sonatype.org/publi…

【SQL应知应会】分析函数的点点滴滴(三)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

HDFS写流程源码分析(一)-客户端

HDFS 写流程源码分析 一、客户端&#xff08;一&#xff09;文件创建及Pipeline构建阶段&#xff08;二&#xff09;数据写入&#xff08;三&#xff09;输出流关闭 二、服务端 环境为hadoop 3.1.3 一、客户端 以下代码创建并写入文件。 public void create() throws URISynt…

计网学习记录

ps:答案可能不正确噢。 1.什么是计算机网络体系结构&#xff1f;什么是网络协议&#xff1f;协议的三要素是什么&#xff1f;每个要素的含义是什么&#xff1f; 计算机网络体系结构&#xff1a; 我看书上也没说清啊。。。 &#xff08;概念磨人啊&#xff09; 什么是计算机的…

WPF 零基础入门笔记(1):WPF静态页面,布局+样式+触发器(更新中)

文章目录 官方文档往期回顾零基础笔记项目实战&#xff08;已完结&#xff09; WPF项目创建为什么选net core版本 WPF 静态页面WPF 页面布局WPF样式 官方文档 往期回顾 零基础笔记 WPF 零基础入门笔记&#xff08;0&#xff09;&#xff1a;WPF简介 项目实战&#xff08;已…

github 代码实战pycharm

文章目录 下载代码配置环境进入环境下载数据集使用pycharm训练模型 下载代码 配置环境 conda env create -f environment.yml 进入环境 conda activate pytorch-CycleGAN-and-pix2pix 下载数据集 搜索download_pix2pix_dataset.sh然后用记事本打开&#xff0c;会发现有一个…

SpringBoot 疫苗接种管理系统 -计算机毕设 附源码83448

SpringBoot疫苗接种管理系统 摘 要 在目前的形势下&#xff0c;科技力量已成为我国的主要竞争力。而在科学技术领域&#xff0c;计算机的使用逐渐达到成熟&#xff0c;无论是从国家到企业再到家庭&#xff0c;计算机都发挥着其不可替代的作用&#xff0c;可以说计算机的可用领…

【软件架构】软件的设计图纸(用例图,类图,状态图,活动图,顺序图)

【软件架构】软件的设计图纸(用例图&#xff0c;类图&#xff0c;状态图&#xff0c;活动图&#xff0c;顺序图)_bdview的博客-CSDN博客 按图索骥---软件的设计图纸 序&#xff1a; 我一直以为&#xff0c;在软件设计中&#xff0c;各种图要比文档重要的多。图可以更加直接的…

RocketMQ 常见面试题(二)

broker如何处理拉取请求的&#xff1f; Broker处理拉取请求的具体流程如下&#xff1a; 客户端向Broker发送拉取请求&#xff0c;请求指定要拉取的主题名称和消费者组信息。 Broker首先会检查该消费者组是否已经存在&#xff0c;如果不存在则会创建该消费者组&#xff0c;并为…