Skip to content

Instantly share code, notes, and snippets.

@msmuenchen
Last active August 28, 2021 17:17
Show Gist options
  • Save msmuenchen/bbc7252138201ce72938f9af657807ed to your computer and use it in GitHub Desktop.
Save msmuenchen/bbc7252138201ce72938f9af657807ed to your computer and use it in GitHub Desktop.
earthsiege2_es.exe_FUN_00401074
**************************************************************
* FUNCTION *
**************************************************************
char * __cdecl FUN_00401074(char * input, char * param_2)
char * EAX:4 <RETURN> XREF[1]: 00401091(RW)
char * Stack[0x4]:4 input
char * Stack[0x8]:4 param_2 XREF[1]: 0040108e(R)
FUN_00401074
00401074 55 PUSH EBP
00401075 8b ec MOV EBP,ESP
00401077 53 PUSH EBX
00401078 56 PUSH ESI
00401079 57 PUSH EDI
0040107a 8b 5d 08 MOV EBX,dword ptr [EBP + 0x8]
startPos=(inputPtr[1]!=':')? 0 : 2
0040107d be 02 00 MOV ESI,0x2
00 00
00401082 0f be 43 01 MOVSX EAX,byte ptr [EBX + 0x1]
00401086 83 f8 3a CMP EAX,0x3a
00401089 74 03 JZ LAB_0040108e
0040108b 83 c6 fe ADD ESI,-0x2
LAB_0040108e XREF[1]: 00401089(j)
0040108e 8b 55 0c MOV EDX,dword ptr [EBP + param_2]
searchByte=0
00401091 33 c0 XOR EAX,EAX
get startPos away, retrieved later 004010b6
00401093 56 PUSH ESI
search beginning at param2
00401094 8b fa MOV EDI,EDX
ECX= -1
00401096 83 c9 ff OR ECX,-1
get this one out of the way
00401099 be d0 36 MOV ESI,CHAR_ARRAY_004036d0 = ??
40 00
0040109e f2 ae SCASB.REPNE ES:EDI
004010a0 f7 d1 NOT ECX
after this, ECX should contain the string length of param2
004010a2 2b f9 SUB EDI,ECX
004010a4 8b d1 MOV EDX,ECX
004010a6 87 f7 XCHG EDI,ESI
004010a8 c1 e9 02 SHR ECX,0x2
004010ab 8b c7 MOV EAX,EDI
004010ad f3 a5 MOVSD.REP ES:EDI=>CHAR_ARRAY_004036d0,ESI = ??
004010af 8b ca MOV ECX,EDX
004010b1 83 e1 03 AND ECX,0x3
004010b4 f3 a4 MOVSB.REP ES:EDI=>CHAR_ARRAY_004036d0,ESI = ??
004010b6 5e POP ESI
004010b7 03 f3 ADD ESI,EBX
004010b9 56 PUSH ESI
004010ba 68 d0 36 PUSH CHAR_ARRAY_004036d0 = ??
40 00
004010bf e8 a6 13 CALL CW3220.DLL::_strcat char * _strcat(char * _Dest, cha
00 00
004010c4 83 c4 08 ADD ESP,0x8
004010c7 b8 d0 36 MOV EAX=>CHAR_ARRAY_004036d0,CHAR_ARRAY_004036d0 = ??
40 00
004010cc 5f POP EDI
004010cd 5e POP ESI
004010ce 5b POP EBX
004010cf 5d POP EBP
004010d0 c3 RET
char * __cdecl FUN_00401074(char *input,char *param_2)
{
char cVar1;
int uVar2;
uint uVar3;
uint uVar4;
int startPos;
char *puVar6;
char *pcVar5;
char *puVar7;
startPos = 2;
if (input[1] != ':') {
startPos = 0;
}
uVar2 = -1;
do {
pcVar5 = param_2;
if (uVar2 == 0) break;
uVar2 = uVar2 - 1;
pcVar5 = param_2 + 1;
cVar1 = *param_2;
param_2 = pcVar5;
} while (cVar1 != '\0');
uVar3 = ~uVar2;
puVar6 = pcVar5 + -uVar3;
puVar7 = CHAR_ARRAY_004036d0;
for (uVar4 = uVar3 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
*(undefined4 *)puVar7 = *(undefined4 *)puVar6;
puVar6 = (char *)((int)puVar6 + 4);
puVar7 = (char *)((int)puVar7 + 4);
}
for (uVar3 = uVar3 & 3; uVar3 != 0; uVar3 = uVar3 - 1) {
*puVar7 = *puVar6;
puVar6 = puVar6 + 1;
puVar7 = puVar7 + 1;
}
_strcat(CHAR_ARRAY_004036d0,input + startPos);
return CHAR_ARRAY_004036d0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment