int __fastcall freadExint a1 int a2 int a3 FILE a4 int v4; r4 FILE v5; r5 int v6; r10 int v7; r3 FILE v8; r11 int v9; r9 int v10; r6 char v11; r8 int v12; r9 int v13; r1 int v14;
该函数是一个自定义的fread函数,用于从文件中读取数据并存储到指定的内存位置。
函数接受四个参数:a1表示存储读取数据的内存位置,a2表示每个数据的大小,a3表示要读取的数据个数,a4表示要读取的文件。
函数首先判断全局变量dword_12B48的值,如果小于1,则直接返回0,表示读取失败。
接下来,函数通过遍历一个全局变量数组unk_12054,找到与参数a4相对应的文件指针。如果找不到,则返回0。
然后,函数判断另一个全局变量*(v8 - 2)的值,如果不为0,则说明是加密的文件,需要进行解密操作。
函数首先根据参数a2和a3计算出需要分配的内存大小,并分配内存给v11。
然后,函数根据加密算法对文件进行解密操作,具体过程如下:
- 根据参数a2和a3计算出文件中数据的起始位置v20。
- 使用_aeabi_memclr函数将v11内存清零。
- 使用fseek函数将文件指针移动到加密数据的起始位置。
- 使用fread函数读取加密数据的前几个字节,存储到v11中。
- 使用fseek函数将文件指针移动到加密数据的起始位置加上加密数据的大小。
- 使用fread函数读取加密数据的剩余部分,存储到v11中。
- 使用fseek函数将文件指针移动到加密数据的末尾。
- 根据加密算法对v11中的数据进行解密操作,解密后的数据存储回v11中。
- 使用_aeabi_memcpy函数将解密后的数据复制到参数a1指定的内存位置。
- 释放v11内存。
- 返回读取的数据个数。
如果*(v8 - 2)的值为0,则说明是普通的文件,直接调用标准库函数fread进行读取操作,并返回读取的数据个数。
综上所述,该函数的作用是从文件中读取数据并进行解密(如果是加密文件),然后将解密后的数据存储到指定的内存位置,并返回读取的数据个数。
原文地址: https://www.cveoy.top/t/topic/jgiZ 著作权归作者所有。请勿转载和采集!