「因你而在的故事」代码解析
「因你而在的故事」代码解析
高考一考完,去看了新高一的语文
好家伙”好的故事””故事是有力量的”
我一看,一想,这不是因你而在的故事么?!
就跑去看短片去了.
看到前半段左下角有一堆代码,看着->
::
这不是C++么(想起以前短片一出就想分析分析短片里面的代码块的内容和作用
今天看了新一的作文 就来分析这些代码了(逃
🙏爱门
↑以上均为废话
正片开始
在视频的01:12
从IDS::BlockMailciousActivities
可看出,蚀律使用这段代码禁用了爱莉的恶意活动,从而删除了爱莉的右眼.
分段解析(BlockMailciousActivities)
IDS::BlockMailciousActivities
这个函数接受一个指向GDataSet
类型的指针作为参数 可能是在爱莉(作为一个数据库或者数据合集)寻找删除的东西.IDS::BlockMailciousActivities
函数首先检查参数是否有效,如果参数为空或指向数据集合的尾部,返回EXCEED_BDUNDARY
错误码,越界
1 | GRESULT IDS::BlockMailciousActivities(GDataSet* target) { |
然后 创建了一个SCAN_THREAD_PARAM
类型指针 我想这可能是结构体或者类,来存储扫描线程参数
如果内存分配失败 就返回NOT_VALID_STATE
状态码 表状态不合法
1 | // GRESULT IDS::BlockMailciousActivities(GDataSet* target) { |
然后创建了一个事件对象,用来同步扫描线程和主线程
事件对象的名称是g_CAPTURE
初始状态是有信号
如果事件对象创建失败,就会调用GLOBAL_SEARCH
函数,传入数据集合的末尾位置作为参数,这也许是个全局搜索函数,用来查找恶意活动(对付爱莉的
然后删除扫描线程参数,并返回GLOBAL_SEARCH
函数的返回值
1 | scanParam->captureEvent = CreateEvent(g_CAPTURE, TRUE, TRUE, NULL); |
接下来,函数将扫描线程参数的enumurate
成员设为NULL
这可能表示不需要枚举数据集合中的元素。然后将扫描线程参数的instance
成员设为this
指针,这可能表示将当前IDS对象传递给扫描线程。然后调用LocateOnTarget函数,传入数据集合指针的地址作为参数,这可能是一个定位函数,用来将数据集合指针指向目标位置。最后调用ResultThread函数,传入扫描线程的句柄作为参数,这可能是一个结果处理函数,用来等待扫描线程结束并获取结果。
1 | scanParam->enumurate = NULL; |
函数最后返回SUCCESS
状态码,表示没有发生错误
完整片段↓
1 | GRESULT IDS::BlockMailciousActivities(GDataSet* target) { |
分段解析(DefenseAgainstMalAttacks)
在视频的01:23
从IPS::DefenseAgainstMalAttacks
可看出,蚀律使用这段代码(可以看作杀毒的,只不过杀的是爱莉的往世的飞花)删除了爱莉的武器
函数接受一个叫做target
的参数,它指向GDataSet
对象的指针
指针是一变量,存储了另一个变量或对象的内存地址GDataSet
对象是自定义的数据类型,在这段代码中我觉得它并没有被定义,也可能代表了一种需要被保护的数据集
它首先调用另一个函数SetDefenseLevel
它带有三个参数(DEFENCE_LEVEL_10
,true
,kGlobal
)
分别表示防御级别``防御模式``防御范围
而这个SetDefenseLevel
可能设置了一些全局变量,用来控制防御机制的工作方式
接着,函数检查target
指针是否有效,通过调用另一个函数m_ObjExist
这个函数可能返回true
如果指针指向一个存在的对象,否则返回false
如果指针有效,函数调用另一个函数AnalysePreference
,带有target
指针作为参数
这个函数可能分析目标对象的偏好或行为,并存储一些信息以备后用
1 | GRESULT IPS::DefenseAgainstMalAttacks(GDataSet* target) { |
接着,函数检查一个叫做g_IDS
的全局变量是否有一个叫做MalwareDetected
的成员变量被设置为true
这个表示是否有恶意软件(往世的飞花)被其机制检测到
如果检测到恶意软件,就调用两个更多的函数g_IDS->ScanForComponets()
和g_AVDB->VerifySignature(target)
这些函数扫描被恶意软件感染的组件或文件,并且验证目标对象与已知恶意软件签名的数据库中的签名或身份
数据库由另一个全局变量g_AVDB
表示
如果在数据库中没有找到目标对象,就会调用另一个函数g_AVDB->UpdateToDatabase(target)
将新目标对象添加到数据库中
这意味着目标对象是一种新的/未知的恶意软件
1 | if (g_IDS->MalwareDetected) { |
然后,函数设置一个布尔值m_flags
为调用另一个函数EXECUTE_FLAG
的结果,结果带有两个参数g_BindFlags
和tElimination
它们表示一些控制恶意软件消除过程的选项
函数EXECUTE_FLAG
如果返回true
可以执行,否则返回false
如果m_flags
为真,就执行几个步骤来消除恶意软件
首先,它将一个叫做FlagsAndAttributes
的变量设置为它自己与另一个变量tAttrIsolate
的按位
这意味着变量FlagsAndAttributes
存储了一些目标对象的属性,其一是隔离,以防止进一步的感染
然后,调用另一个函数CreateEvent
,带有七个参数m_flags
DesireAccess
ExecuteMode
NULL
CreationDisposition
FlagsAndAttributes
NULL
这些也是在这段代码中没有定义的常量或变量,但它们可能表示一些控制事件创建的参数或选项
事件是一种同步对象,它在发生某事时发出信号。函数CreateEvent
可能创建一个事件对象,并返回一个句柄
句柄是一个值,它标识内存中的一个对象,句柄被存储在一个叫做m_handle
的变量中
然后检查句柄是否等于另一个变量INVALID_HANDLE_VALUE
这意味着句柄无效或事件创建失败
如果这样,函数调用另一个函数GLOBAL_SEARCH
,带有一个参数LocateLastPos(target)
它们执行一些在内存或磁盘中搜索或扫描目标对象的操作
函数LocateLastPos
返回目标对象的最后地址,函数GLOBAL_SEARCH
返回目标对象的句柄,句柄被存储在gr
的变量中
接着,调用另一个函数g_Operator->Add(target)
将目标对象添加到由另一个全局变量g_Operator
表示的一些集合中,这表面目标对象被标记为被处理
最后,函数调用另一个函数 g_Operator->SetTargetHandle((void*)m_handle)
将目标对象的句柄设置为由 CreateEvent
或 GLOBAL_SEARCH
返回的句柄。句柄被转换为一个空指针,这是一种可以指向任何类型对象的指针
函数SetTargetHandle
存储了句柄以备后用
如果m_flags
为假,函数返回一个状态码NOT_VAILD_STATE
这意味着消除不能执行 或者有那么亿些些一些错误:)
1 | bool m_flags = EXECUTE_FLAG(g_BindFlags, tElimination); |
结束时返回状态码SUCCESS
意味着防御过程成功完成
1 | return SUCCESS; |
完整片段↓
1 | GRESULT IPS::DefenseAgainstMalAttacks(GDataSet* target) { |
分段解析(RemoveDependencies)
在视频的01:50
这段意意味清除依赖
指爱莉持水晶盾的左手
由于这一段实在太糊,与上一段删除弓箭大致相似,所以我选择跳过(逃
分段解析(EliminateObjective)
在视频的01:56
与上面的 RemoveDependencies 接应,清除了水晶盾
该函数首先检查目标指针是否为NULL
或者它是否指向数据结构中的无效位置
如果这样,就返回EXCEED_BOUNDARY
状态码,操作失败
然后,检查全局变量g_BindFlags
的值,这控制如何执行消除
根据g_BindFlags
的值,在表示执行属性的局部变量ExexAttr
中设置一些 bits
接着进入一个while循环,这个循环遍历数据结构中与目标指针匹配的所有活动元素,对于每个元素,它添加了一个名为“ELIMINATE”的模式和指向全局对象g_Operator
的目标指针,该对象负责执行实际消除
调用g_Operator
的Execute
方法来执行操作
循环后,该函数调用另一个名为RestructureResources
的函数,该函数可能会在消除后更新数据结构的某些内部状态
1 | GRESULT IPS::EliminateObjective(GDataSet *target){ |
未完(悲
实在多