![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
滴水逆向
文章平均质量分 77
llzhou.
这个作者很懒,什么都没留下…
展开
-
Win32 进程创建_句柄表
进程就是一个 4GB的空间,因为32位系统里面的寻址范围是2的32次方。Explorer.exe程序也是被操作系统的内核程序创建的,只不过该程序在创建完毕桌面程序后就退出了。原创 2023-12-20 21:39:31 · 922 阅读 · 0 评论 -
Win32 互斥量
【代码】Win32 互斥量。原创 2023-12-19 22:53:38 · 411 阅读 · 0 评论 -
Win32 互斥体
【代码】Win32 互斥体。原创 2023-12-12 16:53:22 · 62 阅读 · 0 评论 -
Win32 提取图标 _修改标题
3.使用SendMessage函数我们已经引入图标和创建图标的指针,接下来就是要告诉系统,系统就知道去使用了HWNDhWnd回调函数的句柄UINTMsg消息类型(这里使用WM_SETICON)WPARAMwParam这里传参的是ICON_SMALL,没搞懂,为啥既不是图标名称也不是指针LPARAMlParam这里传参的是图标指针//break;return 0;原创 2023-11-27 23:02:23 · 123 阅读 · 1 评论 -
Win32_资源文件_消息断点
首先我们创建一个Win32 Application项目,让系统为我们创建一个程序入口函数点击new,选择resource script(资源脚本)这时,编辑器就为我们创建了两个文档注意:resource.h要我们对着Source Files鼠标右键点击添加文件才能看见记得昨天我们创建一个自己的对话框需要以下步骤:1.创建WNDCLASS结构体,为wndclass赋值2.注册3.创建窗口4.提供消息函数5.显示窗口6.提供消息循环今天我们实现Dialog函数又需要哪些步骤呢?原创 2023-11-26 16:09:25 · 50 阅读 · 1 评论 -
Win32 ESP寻址 _ 定位回调函数
第一个参数 :hInstance表示该程序当前运行的实例的句柄,这是一个数值。当程序在 Windows 下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。一个应用程序可以运行多个实例,每运行一个实例,系统都会给该实例分配一个句柄值,并通过 hInstance 参数传递给 WinMain 函数。第二个参数:表示当前实例的前一个实例的句柄。通过查看 MSDN 我们可以知道,在 Win32 环境下,这个参数总是 NULL ,即在 Win32 环境下,这个参数不再起作用。原创 2023-11-24 12:00:55 · 58 阅读 · 1 评论 -
Win32 事件_消息_消息处理函数
注意:这里的wndclass对象必须进行初始化,因为在赋值时,我们并没有将所有的成员都进行赋值,因此在我们为进行初始化的时候,其他成员的值就是堆栈的原始状态,并不符合系统对于窗口属性的格式!!这里WNDCLASS是一个结构体类型WNDCLASS结构包含由RegisterClass函数注册的窗口类属性。这个结构已经被与RegisterClassEx函数一起使用的WNDCLASSEX结构所取代。如果不需要设置与窗口类相关联的小图标,仍然可以使用WNDCLASS和RegisterClass。原创 2023-11-23 23:30:37 · 86 阅读 · 0 评论 -
new-delete_Vector
个人认为vector其实更像一个“遥控器”,它具有很多功能,我们根据自己的需求去“按按钮”vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2023-11-10 20:13:03 · 46 阅读 · 1 评论 -
引用 友元 运算符重载
在平常的操作中,我们需要将一个数据的地址进行传参到函数进行功能的实现,但是如果在比较长的代码过程中,我们容易出现将数据地址错误的赋值更改,就会出现逻辑上的错误,就会非常头疼,因为通过调试来发现逻辑错误是一件很困难痛疼的事,因此我们需要一种语法来实现数据传参的同时能达到安全性---->引用通过引用的方式,我们可以实现在传参到函数中后,编译器设定了&refb不能被修改的条件,就不会出现因地址被修改而出现的逻辑错误了。(&base就叫引用)1.指针传参时传递地址:&base。原创 2023-11-09 19:48:15 · 47 阅读 · 1 评论 -
C++ 权限控制
为了函数的可读性更强,代码看起来简洁明了,我们可以再创建一个新的class,右键新建,我们可以将函数的声明放在MyClass.h中(注意:在函数的定义时,要在函数名前面加上类名::函数名)将函数的定义放在MyClass.cpp中。原创 2023-11-06 20:30:28 · 102 阅读 · 0 评论 -
(虚函数表)
首先我们观察通过base对象来调用正常函数和带有virtual的函数的反汇编此时我们可以看到ebp-4即this指针的地址作为参数传参。带virtual函数和普通函数都是使用E8 call。原创 2023-11-07 18:01:34 · 34 阅读 · 0 评论 -
动态绑定_多态_上
1.多层继承无函数覆盖结论:多继承无函数覆盖时,首先调用的是“爷类”,然后是“父类”,最后是“子类”2.多层继承有函数覆盖(爷类与父类覆盖)结论:首先调用的是父类虚函数,再调用爷类3.多层继承有函数覆盖(爷类与子类覆盖)结论:首先调用的是子类虚函数,再爷类4.多层继承有函数覆盖(子类与父类覆盖)结论:首先调用的是子类虚函数,再父类5.多层继承有函数覆盖(三类都覆盖覆盖)结论:首先调用的是子类,再调用父类 ,最后爷类6.多重继承无函数覆盖。原创 2023-11-08 20:03:25 · 40 阅读 · 1 评论 -
C++ 继承 构造 析构函数
定义:多重继承区别于多层继承在于,多层继承是结构体之间类似于嵌套关系,但是多重继承是属于“一子多父”(从C语言的逻辑理解),一个结构体同时包含两个父类(先写谁,就先继承谁)(实现定义结构体变量的同时,赋值结构体里面的成员)4.可以用父类指针指向子类(但是有时由于父类子类的指针宽度不同,因此父类的指针并不能完全访问所有成员,同理,使用子类访问父类就可以做到完全访问)由于宽度的原因,因此从“高辈”访问“低辈”时会出现宽度不够的问题,同样,“低辈”,访问“高辈”时也要担心宽度过多越界访问的问题。原创 2023-11-06 13:20:51 · 133 阅读 · 0 评论 -
C++类 this指针
从参数:我们在调用时并没有传递任何参数进去,但是查看反汇编可得知,编译器会自动传递结构体的地址进入。从压栈顺序:其他函数由于有参数的传递,因此需要将参数push进入栈内,但成员函数是首先得到结构体的地址,在编译器传递结构体的首地址中可以的到参数,前者是需要参数从高地址到低地址压栈,后者是通过地址直接获取参数。从堆栈平衡:成员函数有独有的堆栈平衡的方式。原创 2023-11-06 12:35:18 · 28 阅读 · 0 评论 -
c++ 模板
在前面的排序和查找代码中,我们的功能函数都是指定接收某一种类型来进行,如果我们需要创建一个可以接受任意数据类型的功能函数呢,应该怎么做?在c++中我们可以通过模板的方式进行,通过模板,编译器可以帮我们枚举所有的类型。在函数上端添加template,可在函数,结构体/类中使用。模板是将代码进行复制,在编译时会编译器会根据我们传参的类型进行代码的复制。1.使用模板实现swap(x,y)函数,功能:交换x,y的值。继承是将父类的数据进行复制。2.实现冒泡排序结构体。原创 2023-11-08 21:38:10 · 40 阅读 · 1 评论