6行代码领略C/C++学习的乐趣
Posted 易道云学院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6行代码领略C/C++学习的乐趣相关的知识,希望对你有一定的参考价值。
int gi;
int main()
{
gi = 0xffffffff;
return 0;
}
调试 ---> 窗口 ---> 反汇编(或者是alt + 8快捷键);
现在,点击右键,把红色方框的全部选择;就可以看到C语言中无法看到的信息了。
C7 05代表什么意思?
第1个问题,C7 05 其实就是mov指令的机器码,这个大家应该都知道,在这里不做赘述。
0x00EF1728到底是不是mov指令的地址?我们按照如下步骤操作:
把0x00EF1728拷贝到该窗口,从下面的窗口我们就确确实实看到了C7 05。
接着,我们再回过头来看第2个问题:内存地址00EFA138h到底代表什么意思?
大家可以看到,0X00EFA138h确确实实是变量gi的地址值。
这时,我们可以看到gi的值变成了0Xffffffff。
在这里,我们还可以从另一个角度出发,来佐证我们的猜想:
重新运行程序,触发断点;
我们还是把内存监控的窗口调出来,在程序没有运行到gi = 0xffffffff之前,我们修改内存里面的值。
大家可以看到值变成了红色字体显示的00000001,这是我手动修改的。
就算运行了gi = 0xffffffff;我们监控的gi的值却变为了1;而不是0xffffffff;
所以,再一次验证了我们的猜想:这个地址确实是 gi的地址。
1、C/C++的调试环境,确实比较好玩,尤其是调试环境的反汇编、监视窗口、内存窗口、单步、断点、mov 指令、全局变量赋值的反汇编,它们对指令建立了形象的认知,并直接构建了指令,直接改变了内存的值。
2、
调试学习过程
,就是我们探索式学习很好的一个方法——
它由由浅及深的三阶段组成∶深入剖析 → 部分修改 → 全新构建。我们要善于将自己的探索过程分解为:假设 ---》 实证 ---》 推进;通过这样的过程,锻炼到我们对调试学习的理解力;同时,我们的分析能力和逻辑推理都会更上一层楼。
以上是关于6行代码领略C/C++学习的乐趣的主要内容,如果未能解决你的问题,请参考以下文章
一些值得细细品味的书籍
A程序员的乐趣,生成自定义二维码,5行Python代码就搞定
base64stego 还不懂base64的隐写,详解15行代码带你领略
[linux][c/c++]代码片段01
[linux][c/c++]代码片段02
机器学习建模神器PyCaret已开源!提升效率,几行代码轻松搞定模型