GetE3G2DtcId Function: Retrieving DtcId Based on Parameters
int __fastcall GetE3G2DtcId(int a1, int a2, int a3) { int v3; // r5 int v4; // r8 int v5; // r6 int v6; // r4 size_t v7; // r0 int v8; // r0 int v9; // r5 int v10; // r4 int result; // r0 int v12; // [sp+4h] [bp-30h] int v13; // [sp+8h] [bp-2Ch] int v14; // [sp+Ch] [bp-28h] int v15; // [sp+10h] [bp-24h] char *v16; // [sp+14h] [bp-20h] char *v17; // [sp+18h] [bp-1Ch] char *v18; // [sp+1Ch] [bp-18h] int v19; // [sp+24h] [bp-10h]
v3 = a1; v4 = a2; v5 = a3; v17 = &byte_240C88; v18 = &byte_240C88; v6 = a1 + 4228552; v7 = strlen((const char *)(a1 + 4228552)); sub_1C6D58(&v17, v6, v7); v8 = *(unsigned __int8 *)(v3 + 2); if ( v8 == 18 ) { sub_1C6D58(&v18, 'g2', 2); goto LABEL_5; } if ( v8 == 17 ) { sub_1C6D58(&v18, 'e3', 2); LABEL_5: v16 = &byte_240C88; sub_1C70B8(&v14, (int *)&v18); sub_1C70B8(&v13, (int *)&v17); GetOnlineDtcInfo((int)&v15, (int)&v14, (int)&v13, v5); sub_1C6948(&v16, &v15); sub_1C6FB4((unsigned int *)(v15 - 12)); sub_1C6FB4((unsigned int *)(v13 - 12)); sub_1C6FB4((unsigned int *)(v14 - 12)); v9 = *(unsigned __int8 *)(v3 + 2); sub_1C70B8(&v12, (int *)&v16); v10 = j_GetDtcXmlFileMap(v9, (int)&v12, v4); sub_1C6FB4((unsigned int *)(v12 - 12)); sub_1C6FB4((unsigned int *)v16 - 3); goto LABEL_7; } v10 = -1; LABEL_7: sub_1C6FB4((unsigned int *)v17 - 3); sub_1C6FB4((unsigned int *)&dword_240C7C); sub_1C6FB4((unsigned int *)v18 - 3); result = _stack_chk_guard - v19; if ( _stack_chk_guard == v19 ) result = v10; return result; } 分析一下内容:这段代码是一个函数,函数名为GetE3G2DtcId。函数接受三个参数a1,a2和a3,并返回一个整数。
函数的功能是根据参数a1和a2获取一个DtcId,并将其存储在变量v10中。具体的实现如下:
- 将参数a1赋值给变量v3,将参数a2赋值给变量v4,将参数a3赋值给变量v5。
- 将变量v17和v18初始化为指向byte_240C88的指针。
- 将变量v6初始化为v3加上4228552。
- 调用strlen函数获取v6所指向的字符串的长度,将结果赋值给变量v7。
- 调用sub_1C6D58函数,将v6和v7作为参数传入,并将结果存储在v17中。
- 获取v3加上2偏移处的值,将其赋值给变量v8。
- 如果v8等于18,则调用sub_1C6D58函数,将'g2'和2作为参数传入,并将结果存储在v18中。
- 如果v8等于17,则调用sub_1C6D58函数,将'e3'和2作为参数传入,并将结果存储在v18中。
- 将变量v16初始化为指向byte_240C88的指针。
- 调用sub_1C70B8函数,将v18的地址作为参数传入,并将结果存储在v14中。
- 调用sub_1C70B8函数,将v17的地址作为参数传入,并将结果存储在v13中。
- 调用GetOnlineDtcInfo函数,将v15、v14、v13和v5作为参数传入。
- 调用sub_1C6948函数,将v16的地址和v15作为参数传入,并将结果存储在v16中。
- 调用sub_1C6FB4函数,将v15-12的地址作为参数传入,释放v15占用的内存。
- 调用sub_1C6FB4函数,将v13-12的地址作为参数传入,释放v13占用的内存。
- 调用sub_1C6FB4函数,将v14-12的地址作为参数传入,释放v14占用的内存。
- 获取v3加上2偏移处的值,将其赋值给变量v9。
- 调用sub_1C70B8函数,将v16的地址作为参数传入,并将结果存储在v12中。
- 调用j_GetDtcXmlFileMap函数,将v9、v12和v4作为参数传入,并将结果存储在v10中。
- 调用sub_1C6FB4函数,将v12-12的地址作为参数传入,释放v12占用的内存。
- 调用sub_1C6FB4函数,将v16-3的地址作为参数传入,释放v16占用的内存。
- 调用sub_1C6FB4函数,将v17-3的地址作为参数传入,释放v17占用的内存。
- 返回v10作为函数的结果。
总的来说,这段代码的功能是根据参数a1和a2获取一个DtcId,并将其存储在变量v10中。具体的实现过程中,涉及到字符串的处理、函数的调用和内存的释放等操作。
原文地址: http://www.cveoy.top/t/topic/fofg 著作权归作者所有。请勿转载和采集!