初学C语言时,第一个程序一定是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 // 暂停进程
实际上处理时就是吧inlcude包含的文件里的代码放进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进制数据。
这里主要用于分析查看可执行文件在内存的存储情况,熟悉内存。
在菜单栏下有一个open ram,打开内存
找到你想要分析的进程,选中它即可
查看内存
Primary Memory 主要内存
Entire Memory 全部内存
内存中找数据
寻找999,找999的 16进制的值,进行查找内存地址
程序运行时,除了可执行程序外还有dll动态链接库支持
主要页面
通过这个功能可以跳转到指定到内存地址
因为主要是使用的这款工具分析查看进程程序的内存状况,所以并不会全面的介绍学习这款工具.