## L14
首先我们用x32dbg打开游戏,在开始正式跟踪前我先教你一些基本操作,这里我要一些口舌,请不要嫌麻烦,因为不会这些你什么都做不了:

F8:步过,单步执行,遇到call不会停。
F7:步进,调试过代码的懂的都懂,就是你平时调试用的单步执行,和步过的唯一区别是,会引导你进入程序调用函数内部,比如你call abc,单步断会在abc子程序内部停下来,当你想查看调用函数具体怎么执行的,用步进F7就对了。

用绿色笔圈出来的部分call ntdll.xxxx,其中ntdll叫模块名,xxxx是指模块call的函数在模块的偏移(offset)
你可能以为ntdll是一个字母,但在计算机的视角下其实的ntdll是一个基地址0x??????
call ntdll.772D7EF4 实际的含义是 call (0x??????+772D7EF4)这么一个地方。
call <????>这种带尖号的是指被公开dll api库符号解析出的地址,含义和前面的一样,只是说明这个call调用的是一个对外public(写过代码的都知道什么是public吧?)的函数api
鼠标放在黄色标注的地方,按enter可以跳转到xxxx.xxxx指示的地址,所有地方都是这么操作的。

按enter后,发现确实视角跳转到前面说的772D7EF4这个地方,然后怎么跳回去呢?
按-号视角跳回上一次查看的指令,按shift + ‘+’号调转到后一次查看的指令,就和网页跳转一样的路由逻辑。如果你跳的太深了,找不到当前运行的指令了,就按ctrl + G,然后输出eip就可以回到原处(这个就不放图了)。
【模块】:我前面提到的ntdll.xxxx,说ntdll叫模块名,什么是模块呢?模块和一个一个可执行文件(.exe,.dll,.so)几乎就是一一对应的,比如这里的ntdll模块,就对应着ntdll.dll文件:

模块最大的特征就是他有自己独立的内存空间(*机理涉及虚拟内存相关知识),你在其他模块的页面的内存中是找不到你想要的数据的。另外,你在x64dbg的标题栏也就是红圈圈出的地方,就可以查看当前程序流所处的模块。

(要解释的比我想象的多,后面的再写写...

)