![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
根基
文章平均质量分 83
。
Dutkig
奔跑吧, 用绝望追不上的速度。
展开
-
掌握进程虚拟地址空间划分
前言众所周知,任何的编程语言都会产生两种东西:数据和指令。那么拿我们c++代码来看,编译链接完成之后在我们Windows上来说会产生一个xxx.exe的可执行文件,现在这个文件放在我们磁盘上,那么cpu肯定是不能直接运行磁盘上的程序的,那么在运行它的时候首先会把这个程序从磁盘上加载到内存当中,那么就涉及到几个问题:这一个可执行程序的哪些东西将会加载到内存当中?加载到内存当中他是如何存放的?内存有没有区域的划分?4.划分了以后到底是什么样子?首先我们得搞清楚一点,加载到内存是不可能直接加载到物原创 2022-03-13 18:27:27 · 268 阅读 · 0 评论 -
从编译器角度来理解C++代码的编译和链接原理
我们可以在linux系统下对下列代码是如何进行编译进行一个理解:main.cpp//引用sum.cpp文件里面定义的全局变量以及函数extern int gdata;int sum (int, int) ;int data = 20;int main (){ int a = gdata; int b = data; int ret =sum (a, b); return o;}sum.cppint gdata = 10;int sum(int a, int b){ ret原创 2022-03-13 19:15:46 · 193 阅读 · 0 评论 -
从汇编分析函数调用堆栈详细过程
前言首先来说,我们今天的学习并不是为了学习汇编语言,而是为了更好地分析一些问题的底层原理。、进入正题:首先由下面简单的代码我们来考虑两个问题:1.main函数调用sum,sum执行完以后,怎么知道回到哪个函数中?2.sum函数执行完,回到main以后,怎么知道从哪一行指令继续运行的?int sum(int a,int b){ int temp = 0; temp = a + b; return temp;}int main(){ int a = 10;//mov dword pt原创 2022-03-13 19:09:05 · 1307 阅读 · 0 评论