00:00
好,那就重新打开这个啊,然后咱们今天主要讲什么呢?就是讲一些它的这个特性啊,那首先呢,比如说我们在这个高级原理啊,比如说我的C语言和下加里,它通常情况下呢,是有文件这么一个概念的,那实际上而言呢,在我们的这个汇编里呢,它也是有头文件这个概念的啊,那怎么去用它呢?啊,也是在这个投文键这直接添加就行啊,怎么添加呢?就是比如说我们这儿啊,如果是C元或者C加投文键,它就是点H,那现在呢,我们就不用这个点H,我们用什么呢?我们用点in INC啊,我们比如说这个nt.inc啊,我们直接点击这个添加,添加完之后啊,它注意啊,它自动给你添加这一行代码呢,它在这个汇编里会报错,所以你直接删掉,删掉之后呢,回来之后呢,你就可以把你这些声明类的东西啊,全部啊给它干嘛呢,放到你的这个头文件里,然后呢,你在你自己这边啊,在你的这个实现文件里,你直接对它进行in,我们前边写的呢,都是这个in lab啊,然后直。
01:01
可以加载,现在呢,我们可以加载,那我们比如说我们刚才这个啊,我们这个叫做这个n.I这个INC。我们现在啊,也可以直接啊给他include上,你点INC,然后我们重新生成。我们运行。诶,你看它也正常运行了,我们下段点啊在这啊,它直接退出了,因为调用这个这个呃,Work啊,然后我们直接再运行一次。诶,你看它断下来了啊,这个就是这个功能啊,就是我们可以实现一个头文件啊,专门用来装我们这种常用的这种声明类的东西啊,这样呢,我在不同的文件里也可以直接去这个调用这个头文件啊,就不用多次包含,然后呢,我们这儿呢,可以看到啊,我这里写了一个新的指令啊,一个伪指令叫什么呢?叫做work,这个东西是什么用的呢?它实际上是为了方便你去调用一些三二的API的,那我们之前调PI的候都怎么写的,比如说这个啊,我们我这个首什个零,然后再干嘛呢,再进行一下这ES果说的参数少呢,对咱们来实际是没有啊,你看我正常也无所谓,但如果说它的参数过多的情况下,其实这个呢,是不是特别方便的啊,那我们其实就有一个解决方式,就是用我们的这个呃,Work来进行调用,但是需要注意一点什么呢,你用。
02:31
须有这个东西,那么我们这些函数呢,在我们的CTRL32 ul32之类的UCRT里边进行导出啊,那它肯定都是有这个,呃,有的这个头文件的啊,但是我们这个头文件在我们汇编里用不了,因为什么呢?因为它的这个呃表达形式是不一样的,你比如说我汇编是这样声明的,那如果你是这个C或者C加的话呢,你就直接是另一种声明形式啊,就比如说我一个返回类型,然后中间是个函数名,后边是一个呃参数这种,那我们怎么解决这件事呢?啊,那这个呢,就有一个咋说呢?啊,这个组团的好心人啊,替我们解决了这件事情啊,我们去找一个叫做masm这个32SDK的东西啊,我们打开这个SDK,打开这个SDK之后呢,我们选择这个download的,然后它有几个下载不同的下载点啊,你可以看到啊这个。
03:31
了一个什么下载网站,从中国的程序员啊,我们用这个就行啊,这俩哪个都行,我们随便选一个点击,点击之后呢,它就出自,他就会帮你下载啊,然后下载到你的这个桌面上啊,下载到桌面上之后呢,我们把它打开啊,就这个玩意儿,我们可以把它打开啊,我上面已经有一个了啊,我就直接打开了,打开之后呢,你可以看到啊,里边是一个install.exe啊,你就可以干嘛呢,直接啊双击运行啊,把它安装上。啊,点击这个位置啊,你不要看这里边啊,好像是那个没有这个按钮的样子啊,这边说明你其实这是什么,他点写的这有一行小字啊,我最开始也没看见啊,就是什么check install To Begin啊,然后要你点一下这个install啊,你点一下就可以了,然后呢,选择一个你的这个磁盘,比如说你选个C,点击确。
04:21
然后这个点击确定,然后再点确定啊,然后这儿呢,让你释放啊,释放文件啊,你就释放。释放完事之后点OK啊,它就开始安装啊,这个过程就别着急啊,它这玩意儿就主要看你的这个操作系统的这个硬盘之类的速度啊,啊,它会装一小会儿。我这个好像是卡住了,但不重要啊。反正他一会儿就会弄完的。他装完了之后就根据你选择路径在啊,比如说刚才我就直接选了一个C盘啊,那可能是C盘原因导致的,嗯,C盘MS32啊,诶你看啊,它这其实已经出来了啊,东西都有了啊,比如说这inlu的啊,我要的就是这些东西啊,你看这不是有很多inlude嘛,这类东西啊,那我直接有这些东西就够用了,那我现在要干什么呢?我回到我的这个项目上,我右键啊,我直接属性,属性之后我干什么呢?我直接在这个位置上,你看这有一个什么呢?这有一个东西啊,这个它这个写的实际上是一个这个预边红之类的东西啊,然后我们直接选择,选择完之后这有一个派就告诉你啊,你包含了一个路径啊,你打开之后,注意这个从极或项目默认设置程,这个你不要去掉啊,你一定要勾着它,然后呢,在上边呢,给它添加东西啊,我们现在呢,就添加我们的这个目录,我们不是刚才打开的这个目录嘛,就这个in录的,我们把这个in录的啊给它包包含进去啊,包含进去诶放到这儿啊,你看着没啊C。
05:48
它的M32文件夹下的include文件夹啊,包含进去,点击确定啊,点击应用,点击确定,这样呢,有一个什么好处呢,就是它里边呢,给你给你其实已经写好了大量的这个文件啊,比如说我们找一个这个COUNT32,这呢COUNT32啊,你现在呢,你直接啊点击编辑你看啊,它里边这些API啊,都给你声明好了,你直接用就行,你用的时候你把它文件include进去就行,是不是很方便对不对,所以说呢,我们都偷懒,我们直接用啊,我们include最基础的最是基础的,我们包的要包一个叫做windows.inc的一个文件啊,它里边呢,是解决什么呢?你其他的INC啊,你是解决一些这个,呃,哎,没不对,他这好像没包含上啊,我看一下啊,WWWWW这。
06:35
windows.nc啊,我没添加进来啊,我要添加啊,我这在这儿给他添加文件啊。添加这个现有项,我需要把这个INC给他拷贝过来啊。啊,刚才忘了我我要把这个复制一下,然后呢,在我当前的这个目录下,我可以给它单独写一个文件夹也可以,这个就直接放一起啊,如果说你觉得他们比较乱啊,你想觉得需要单独给他来一个,那你就给他写一个in放在这里边,比如说我现在呢,需要一个windows.h,然后里边呢,我现在呢,再给他去找,找一下我的这个U432啊,U32我也给复制出来,复制出来放在这儿,然后呢,我再给他来找一个科NO32啊科O32我复复制过来也放在这儿啊,其实这种方式不是最方便的,这种方便是直接两边一附加那个都附加依赖库上就行了,但是呢,我在录播课时候这么讲过,但是大家呢,很多人呢,都在他过程中呢,出现了问题,所以说呢,我就决定干嘛呢,直接啊,咱们就搞得这个稳妥一点啊,咱们稳妥一点,我们直接给他,呃包含进来啊,我们新建一个筛选器啊里边呢,就是这个我们的这个M4。
07:41
M32的一个文件啊,我们直接给它全部这个添加,添加像项。啊,这就属于一个外部依赖了啊,然后我们在include里把这仨给选上。选完事之后呢,我们在头文件里啊,再包含这个Windows h一般情况下呢,就不会出现什么问题了啊。
08:04
如果还出现问题,那我们就需要给它加上路径啊,这个是那个。啊,英科路的。诶,你看这样是不是就没有问题了啊,就需要加上它的路径啊,我们再给它in路的一个啊in in路的,然后呢,是那个我们的这个uc32.inc。然后再来一个英科路的。克32.inc,那你像是我们这个U2.c和这个克2.unnc里头都是这种函数声明,那现在这个函数明我们就已经用不到了啊,我们可以直接调用了,所以说我们就给它去了,那你像Windows的这里边呢,是什么东西呢?是你一些常用的结构体啊,什么叫什么意思呢?就是比如说你要使用一个这个之类的东西,它里头是有一些参数是结构体的,或者说你比如说你在window下有一个大写的这个参数啊,可以填啊,就代表着这个可以为空啊,这些东西呢,都是包含在我们Windows里的,而其他的东西呢,才是放到我们的什么这个啊,什么声明啊,才是在我们这些INC里啊,那所以说我们把最常用的东西先上啊,其他以后再说啊,而这个呢,因为我们就没有一个合适的了啊,我这我记得里头应该是没有标准库的这个INC啊,我打开看一下啊。
09:30
哎,我刚才好像关了啊,算了,那我重新打开一下这C盘下的这个MS342啊,然后。我看有没有这个UT的这个。应该是没有,然后CRT应该也没有。啊对,应该是没有啊,这类的头文件比较少用啊,它这里头应该是没有包含在内,好,那我现在呢,直接用这种包含头文件,然后包含漏lab库的形式啊,我去调用我的这个API啊,我只要有声明啊,我就可以直接用这个in work来调用嘛,比如说我现在已经调用了一个这个e process,有一个退出进程的功能,那我接着我调用一个什么呢?In work,我要用一个弹窗mes啊,这个box a后边呢填参数呗,第一个参数,那我窗口句,比如我传个now啊,我就nurl啊就传上去了,然后第二个呢,开始是字符串,那我就要给它定义字符串了,也在头文件里定义这个变量啊,我们直接给它在这起一个,然起一个呢,比如说我现在呢,我这就有一个这个SZ8。
10:36
然后DB啊,给它进行声明啊,比如说我写一个日,然后逗号零啊给它结尾,接着呢,我要把这俩东西给它传进去,在这边啊第二个参数啊,我们用off取一下它的地址,然后呢在off取一次,我把它内容和标题提成一样的,最后呢,我们这块呢,我们要传一个按钮类型,比如说我们传一个m BOK啊好,那现在呢,我们重新生成,看一下会不会出现问题啊。
11:05
可以看到啊,重新生成成功了啊,那我现在运行一下。看到没啊,它就正常的弹出来了啊,然后有一个m BOK的一个确定按钮啊,那这个呢,运行到下一步之后呢,停在这儿了啊,然后如果我说再走一步F10呢,它就去把这个退出了啊,你看啊,这个呢,就是相对而言啊,给我们提供了什么呢?提供了一个这个便利啊,不用像我们原来那样啊,去这个头文件里到处声明这些东西啊,我们现在呢,直接用就行了啊,然后如果说啊,你需要一个新的,比如说你一会呢需要个G点,那你就包含一个G32点吧,然后再去找一个g di32.inc给包进来就行了。啊,这个呢,就是使用API的一个简简模式啊,因为我们之后的这个32程啊,要使用很多很多的A,所以说呢,我们今天呢,先给大家介A红啊叫做红,那红这个东西怎么定义呢?首先呢,红它这个东西呢,分为两类啊,一类呢叫做有餐红,一类呢叫做无餐红啊它呢它的常量还不一样啊,就是变动不了的变量啊叫常量啊和这个东西还不一样,它是一个预处理阶段就给消失的东西,什么叫预处阶段就消失的东西,比如说你定义了一个红啊,我这定义一个红,比如说我这是一个这个。
12:28
嗯,我定一个这个什么呢?我定一个这个啊,我定一个RKVR啊,然后呢,我用一个这个euq啊,不是e qqu啊,然后呢,我给它定义成一二啊12,那么这个时候啊,你在任何位置使用这个RK,那么在它的预处理阶段都会直接把文本替换成12啊,作为一个数来使用啊,这个就是所谓的这个,呃,无参红啊,无参红进行一个替换,那如果说是有参红呢,它这里边呢,是支持一个奇怪的使用方式的,在汇编里的有参红,它的操作方式极其类似于什么类似于函数啊,类似于函数。
13:09
比如说啊,我们这啊,我写一个这个MY啊,我是一个加法啊,然后呢,我要给他参数嘛,然后我现在呢,呃,随便给他,我先给他声明一下它的这个类型啊,它是一个有三红,然后比如说我现在呢,给他一个这个参数啊。啊,N1啊,然后呢,我这结束的时候呢,我要写一下这个N的M啊,代表着这个有三红结束了,接着啊,我在里头啊,愿意用什么愿用什么,如我啊E啊,然后呢,这个N,那这是什么意思呢?就是我把这个N数和E原本的数进行相加,加完之后把结果放到E里啊这么调用,那我现在呢,我去调用一下啊,怎么调用呢?比如说我在这啊,我就写一个啊木E,我给他一个十,然后接下来呢,我要调用一下我的这个有三红,注意它的参数通过监号传进去的,比如说我这里头一啊,然后我在这儿啊,下个断点,我重新生成一下这个东西。
14:12
好,那我现在呢,重新运行,运行之后到这个位置上了啊,我们来看一下啊,首先M10啊啊这个F10啊,然后你看啊,现在EAS里变成A了啊,就是说这个值已经完事了,然后呢,我们这个有三,我们直接下一步你可以看到它就变成B了啊,就加一了,那我们还可以干嘛呢?我还可以直接运行,运行之后跟进去看一下啊,就是现在到这断断点了吗?我F11F11啊,我跟不进去啊好吧,然后呢,我这儿还有一个东西要演示是什么呢?就是我现在呢,是用立记数给它复制的啊复值的,那我现在呢,不是有一个红吗?那刚好我就把这个红拿过来啊,我给它进行一个赋值啊,现在呢,我再重新生成。然后运行。运行之后大家看啊,我这个直接干嘛复制给ES就变成了C啊,C就是什么16进制的这个啊,C就是十进制的这个12嘛,对不对啊,那所以说它直接就被替换了,那这种方式呢,就是什么呢?一个是无参红,一个是有餐红,这两个红的方式啊。
15:15
嗯,有回音是吗?现在还有吗?喂,哎。还有回音吗?没回音,我继续了啊。好,那我们继续啊,那么这个东西呢,就是红的这个概念啊,那我们红这个东西聊完之后呢,我们再给大家补充一点关于这个函数的知识,哎,我就不太记得咱们前面讲没讲过啊,我来看一下啊。
16:00
嗯。我们前面有没有讲过函数子程序这个概念?有谁是一直跟着的吗?我我我忘了啊,咱们讲没讲过这个东西。我不太记得了啊。啊,算了,再讲一下吧,啊,然后呢,正好呢,咱们再给他讲一个这个新的东西啊。嗯,我们首先呢,就是子函数这个东西相当于什么呢?相当于一个功能,对不对啊,那这个功能呢,你复杂也好,不复杂也好,都是可以的,你像是我们前面呢,应该说过这个对战啊,对,那我们说过对战应该是讲过函数这个概念啊,它有两种传参方式啊,在32位下,那我们首先呢,比如说我这有一个ad.x啊,我这个PC啊,然后底下啊,我这个a dxn的P啊,那这个呢是函数的开始,这是函数结束,中间呢,你就是函数的一个实现的一个过程,那你过来之后,你要回去,你有要有一个啊,这个指令咱们肯定讲过。
17:14
然后呢,我们在里头就开始实现我们的功能,比如说我们啊传进来两个数啊,有一个是这个在这个哦对应该是我们在这个16位时候讲的啊,那个时候是这个加加四和加六两个地方取出来的啊,那是咱们push进去的,那么我们啊可以用这个计算器算差,也可以用它的这个,呃,Push这种方式传参这两种方式我记得了啊,他是讲过的,那我们今天用一种新的方式传参就是什么,就直接给他声明出明确的啊,就是形参啊形式参数,比如说我现在呢,我有一个这个n number啊n n number a,然后呢,我我这个n number a的这个类型呢,是一个,然后我一个逗号,我再给他写一个参数,我们来一个这个n number b啊,N number b的类型呢,也是一个D啊,那现在呢,我就可以用这俩玩意儿进行一个运算了啊,比如说啊,我首先啊,我进行ADD啊D,我我我先把这个E把它的值给清空啊,我先把它值给清空啊,清空之后呢,我进行ADDD。
18:15
DAAX啊,加上这个n number a,然后呢,把结果就放在E里的嘛,然后加完之后呢,再把再用这个和这个n number b啊进行相加,这样呢,实际上就造成的结果就是A和B进行了相加,加完之后呢,因为它返回值呢,一般情况下放在ES里,根据std的一个函数调用约定,那么此时返回之后呢,我们就得到了它两个相加的一个值啊,那我们现在呢,可以来简单调用一下,看一下啊,比如说我在这个位置上啊,我直接啊给它干怎么怎么用这个东西呢,我们如东那我们已经给声明这了啊,那我们用使用了。
19:09
好,双双成成功了啊,我们来运行。运行完事之后,你看他这都断下来了啊,然后我可以干嘛呢?我可以F11直接跟进去,跟进去之后啊,我先清空eass,注意e as被清空了,然后呢,我这个NW1里边呢,实际上是什么呢?是我们的这个呃,十啊,然后这个B里边呢是20,那我现在先把十放到这里边啊,你看E变成十了,然后呢,再加上十,你看成1亿,就实际上就是十进制的十加20就变16进制的一了,然后现在呢,进行回来之后,你可以看到E里还有这个值,如果要用啊那种呢,就相简单,就是使用方实是这个纯汇编应该有的形式了,它更多的是一种依赖于这个伪指令的形式啊,来这个创造出来的啊,那这个呢,就是我们的一种这个形式,然后呢,除了这个这个东西之外呢,北北比如说啊,我们在使用一些库函数的时候,什么叫库函数,比如说我在这儿啊,我嗯,我我能不能直接用。
20:14
啊,我试一下啊。我我直接靠P应该是不行啊,没有这个符号啊,那就是说明我还是要给他声明一下这个啊,因为这个没有它这个图文件啊,我只能自己来声明一下啊。嗯,Ten啊,Ten之后这个F,然后这个pro to。哎,不对,不是pro to proc啊,这个声明的时候写proc就行,那它中间应该是空格还是冒号来着。嗯,我想想啊,应该是冒号,应该是冒号,这应该是接冒号好,然后呢,我这不是有一个字符串嘛,那我现在呢,再给他来一个SZ啊,这个format format s啊,然后我直接一个DB啊,然后百分号S大S吧,小S大S。
21:06
想想,嗯,按照这种情况来说,我们应该用一个。应该用个小S啊,应该用个小S,然后逗号零好,现在我给他进行打印啊,首先啊这个东西。我现在如果直接引work这个F,即使我声明了它也是没有符号的啊,也是用不了的,或者说参数错误的啊,或者说我们来试一下,比如说第一个我是这个格式化字符串,然后呢,我第二个我是这个SZ8分,我看一下我名字有没有写错啊。应该没错,然后我现在重新生成。你可以看到啊,它依然会失败啊,是因为in work它找不到原形,你知道吗?那怎么办呢?啊这种的,那你就可以给它干嘛呢,自己给它封装一下啊,因为这种的你只能用put call,那你要封装它,比如说我现在给它封装成什么呢?Print啊啊print,那我现在呢,Print string,我就可以有两个参数啊对不对,这两个参数呢,分别是它的格格式字符串格式化字符串的地址和它的这个变量的一个地址,那首先呢,我就是一个这个PC,然后呢是一个这个,然是个或者是个这个。
22:25
接着啊,我给它进行函数的这个定义。N的P啊好,那我这里边呢,我就可以对它进行封装,那我要现在要写,首先我第一个,第二第一个我是从这个右往左传参的,我首先要拿到的是我的这个VR,然后呢,我这个VR呢,拿过来之后呢,我给它进行一个push到这个站里边,到站之后我再拿我的。放外头,我也给它放ex里头,然后再给它push进站里边,Push完之后呢,我现在呢,就要调我的call了啊F拷完之后呢,它有一个的过程啊,那就是什么呢?就是A。
23:09
对没对齐呢,这玩意儿。Ad啊,然后ESP啊,两个参数八啊八字节,八字节完之后,我一个I回去了啊,那这个我就封装完了,那我现在呢,就可以进行这样一个调用了,我调用的是什么呢?调用的是我的这个啊,然后呢,后边的参数不变啊,那我现在重新生成。成功了啊,那我在这儿,我下一个断点。然后我运行。但步一步。然后看它就打印出来了,那这种形式呢,实际上就是我把这个通,把通过这种函数的命令的形式啊,指定参数的形式,把一个C原本是这个CDCL的一个这个调用约定的函数,把它的所有调用过程全部封装在一个SD的一个这个内容里,然后呢,我就可以用什么呢?用SD的方式去调用它啊,因为我在里头已经实现了自己的完整的一个这个内屏,所以说我也不需要在外边它它的调用方法就跟其他的一模一样了啊,那我现在呢,是打用来打印字符串的,那我还可以再封印几个打印整数的,打印其他东西的啊,那我就可以这个一一给它调用一下,对不对啊。
24:25
呃,这这个配色我不知道怎么改啊,它是那个AAMS的那个插件自己带的啊。它是那个一个高亮插件啊,这不是我设的。你可以跟咱们助理要一下那个录播,录播的时候可能看的会清楚一点啊。好,然后这个东西呢,就是我们说的这个今天的第二个内容啊,就是关于函数的这个参数啊,可以多了一种使用方式啊,除了这个计算器传参和这个我们的对战传参啊,我们其实本质上走走的还是对战传参,但是我们可以有这种形式啊。
25:04
说完这两种之后呢,我们再来说一个什么呢?就是结构体的问题啊,那我们在这个高级原理拥有结构体,在我们这个汇编实际上也是拥有结构体这个概念的啊,那结构体呢,它要声明在我们data塔端外边啊,那怎么声明呢?比如说我这有一个这个嗯嗯,这个point in啊point in,然后呢,S啊声明啊,这个关键字和是一样的啊,然后呢,我在里头啊,给他声明两个这个变量啊,一个X啊。X,诶。Word啊,然后呢,我不给它初始化啊一个问号,然后Y。哎,这个自动补全有点烦啊,Word啊,然后结束的时候,我们还是要写一个这个po印的,然后NS啊这样呢,我们就声明完了一个结构体的一个原型啊,一个原型,然后你在用它的时候呢,你要给它声明出一个结构体对象出来,比如说啊,我现在呢,在这个位置上,我要写一个这个它的这个对象,比如说啊,我叫什么这个,呃,这什么结构呢,就是my PU nt啊就叫这个得了,然后它的结构类型啊,然后后边加一个兼括号啊,然后呢,我给他写一个这个,呃,问号就代表着不初始化啊,那现在呢,我就声明了一个没有初化的这个结构的对象,那么这种情况下,我要给他的内容啊进行赋值啊,有两种方式啊,第一种方式呢,就是你直接啊,把它的这个地址取出来啊,Move啊,然后呢,比如说EEX,然后呢,这个off啊,你再给他取一下啊,取出他的地址,取出它的地址之后呢,你就可以干嘛呢,直接给他这个地址上的东西赋值了啊,因为什么呢?因为此时此刻啊。
26:47
ES是他的这个结构体的这个起始地址,那么你这个ES,比如说ES加二的地方就是什么,就是他第一个成员,因为它两字节word嘛,比如说你这个一二啊,然后再加啊,就是另一个成员,但这种方式呢,就体现不出什么呢,体现不出你结构体的一个优势性了,所以说你可以这么赋值啊,你就是目啊,直接把你的对象放在这儿。
27:11
然后直接点X啊,然后你比如说给他个123啊,然后我再木啊木它的这个Y啊,我再给他个这个456啊,然后我现在呢,下一个断点啊,给他重新生成一下。好,我们来运行啊。运行之后啊,它会这个断在这儿了啊,断在这儿之后呢,我们可以通过这个监视啊,这监视我们监视直接来看一下啊,嗯,它的这个对象,然后放在这儿啊展开啊,你可以看到XY现在的值都是这个零啊,然后现在走一步F值啊,你看它的这个X的值已经被赋值了,然后再走一步Y的值也被赋值了,看到吧啊,就可以使用这样的方式啊,对它进行赋值,那可能你觉得这个结构体,它这个用在哪呢?啊,很多它的API什么其他的都要用到这个结构,或者说你比如说你要一个结构信息啊,你比如说你一个书信息一个构,起码有书要定价对不对啊,还有书号什么的,那这种情况下呢,就要用到它的这个结构体了,现在我们这个写的东西呢,就是简单的演示一下啊,那我们比如说啊,我现在呢,就给大家举个例子啊,就是我们如何去使用一个这个,嗯。
28:25
我想说什么呢?我们如何去使用一个需要用到结构体参数的这个A啊,比如我要用一个这个我都给它注释掉啊。我现在比如说我要写一个这个create,那我首先我in work啊in work的肯定没毛病,In work。T create process啊,我们肯定要用correct a啊啊不对就行了,它会在头文件里给你自动切换啊,然后填参数,那首先呢,我们可以直接呃呃,正常情况下F1它就直接能转到MDN啊,但是这个汇编的M4MSDN有点问题啊,你进去之后他没直接到啊,你需要自己搜一下啊,你看他没到啊,你在这个位置你要给他搜一下,搜完之后呢,他就到这个。
29:17
嗯,他咋是中文的呢。不应该呀。我说个A啊。啊,这就对了。啊,这就是他的参数啊,有这么多参数啊,比如说他第一个参数啊,是你要这个去找的一个路径啊,那这个路径呢,你可以随便找一个东西啊。比如就他啊,我给他取一下他的一个路径。取完路径之后呢,我在我的这个投文件里,比如说我定义一个文件路径啊,这个这个SZ啊,这个firepa,然后DB它这个路径,路径之后呢,再以零结尾,注意这种斜杠呢,最好给它转个E啊。
30:05
好,这样呢,我就有路径了,有了路径之后呢,我在这边我肯定要这个调用我的路径啊,那我这呢,这个路径呢,我要首先啊,我这个process第一个参数啊是一个。路径我应该我路径我看一下啊。啊,命令行也行啊,路径也行啊,这个这俩传哪个都行,那我传成第一个吧,啊,我直接这个ADDADD啊取地址,然后呢放在这儿,然后第二个呢,命令行我传个到,然后接下来呢,我们这个进程属性和这个线程属性啊,这俩都没啥用啊,我们全都全闹。当然了,你要用的时候它有用啊,现在我们只是做个演示啊,它肯定是没什么用的啊,然后下边还有这个句柄和这个flag。句柄和flag,我想想。
31:00
Flag还是要的,这个句柄就没有必要了,句柄我直接给他弄掉啊。然后flag我看一下。Flag,他说可以用这几种啊,那我想想我用的是应该是我用正常的就行,应该。这种红都在windows.nc里定义了啊,你不需要去管它啊,你直接用就行。它都是一定的整数值啊,这种红啊,然后呢,下边是我看一下下边两个参数。啊,这俩都不用啊,然后这两个是结构体啊,一会儿咱们要写一下啊,这两个不用的,我们给它闹掉,然后之后结构体啊,重点来了啊,我们这两我们主要是就是给大家看一下要用结构的情况下,我们应该怎么办啊,那这两个结构体呢,一个是这个start upf啊,启动信息,一个是information啊,一个进程信息啊,它有两个呢,都是有这个结构的啊,你可以看到有一个startup info啊,那我们就把它拿过来啊,比如说我在我的文件里给它进行一个定义。
32:07
嗯,那首先呢,我给它定义一个我们的这个。嗯。它叫什么结构呢?ST啊,然后这个start t start info,然后呢,我直接给它放成我这个结构。嗯,然后我们给它初始化,按照我们自己结构体那种方式嘛,前面是类型,然后后边跟个初始化,那我给他初化一个问号,就是都不给他初始化,然后还有一个就是我们的这个。Price info,然后它也有一个结构,我看一下啊,在应该在这啊,Process information。我们给他拿过来。同样的初始化方式啊,也给他未知的初始化。好,然后这两个东西呢,我们就都有了,但是这里头需要注意点什么呢?就是我们的这个process呢,是由我们的外界进行输入的,也就是说我们不需要管它啊,你可以看到它是一个out参数,但是我们的start information呢,实际上是一个in参数啊,也就是需要我们输入的,那我们怎么去输入它呢?这个东西呢,是从外界来的啊,一会儿我给带大家来获取它,现在呢,首先呢,我把这两个参数给它放放上边啊。
33:26
也是传地址啊,这个不是ad啊,是a drr啊,传的都是结构体对象一个地址,然后下一个啊,也是啊,这个ST process。啊,后边应该是没有没有参数了啊,前面也是ADR,好这样就完事了,但是问题有一个就是什么呢?我们这个start in呢,没有获取到啊,所以说呢,我们在这呢,要通过另一个API给它进行一个获取啊,我们这有一个这个啊,然后get start。TART。嗯,Info。
34:03
然后ADR把我们那个start info这个结构的地址啊给它传进去,传进去之后通过它进行获取,然后呢,我们这样呢,应该就可以了啊,我们在这儿下个断点,重新生成一下。然后我们运行。运行之后,我们首先啊在这儿啊,我们可以下一个这个EHR的一个监视啊,看它这个API调用效果,然后我们首先一个F10啊,它你可以看到操作成功啊,那我们现在这个应该是没有问题的,那么接下来我们接着走。走。你看啊,我们通过走完之后,我们的这个程序啊,就也正常的给它这个创建起来了啊,看到没啊,已经正常的执行了啊,创建起来了,功能也就实现出来了,那么这里边啊,你可以看到的就是什么呢?就是它里边有两个,有两个参数啊,是通过什么呢?结构体来的,实际上不止这两个,前面还有两个这个属性特性,因为我演示的缘故,我就没有给他写进来,但是这两个是必填项啊,所以说我们就一定要给它填进来,这两个东西呢,在我们的这个头文件里声明的时候,他们俩就是结构体啊,那这种情况下呢,如果说你不你不用头文件,不用windows.inc这种情况下,你就自己干嘛呢,自己找到它的这个结构啊,这个结构你可以看到它这里边结构长什么样啊,点一下进去之后,你看它是两个handle,两个or那两个handle呢?Handle这个东西本质上在32位下,就是四字节啊,就是四节一个整数,所以说你直接用两个整数来存D也行,然后后边两个直接是整数啊,也就是说你就这个结构里边啊,写四个就能行了,然后呢,你给它传进。
35:38
啊,也能达到一样的效果啊,就是说如果别人没帮你声明,可以自己声明啊,结构体是这么用的。好啊,那我们今天的内容呢,就结束了啊,然后有什么问题呢,大家先趁现在问啊,如果没有问题呢,咱们今天就这个结束了,然后明天还是同样的内容,呃,需要领取这个往期视频资料啊,还有这些代码什么乱七八糟东西的啊,就是添加咱们小助理和这个加群啊,可以获取到。
36:05
在公屏上可以联系啊。
我来说两句