_BYTE v7[256]; // [sp+0h] [bp-128h]
__int64 v8; // [sp+120h] [bp-8h]
v8 = a2;
v4 = a2;
memcpy(v7, &v8, sizeof(v7));
memcpy(a1, v7, 0x100u);
_QWORD *v5; // r4
int v7; // [sp+0h] [bp-128h]
__int64 v8; // [sp+120h] [bp-8h]
v8 = a2;
v4 = a2;
v5 = a1;
memcpy(&v7, &v8, 0x100u);
memcpy(v5, &v7, 0x100u);void __cdecl printf_float(float a)
{
printf("%f\n", a);
}
void __cdecl printf_float(float a)
{
double v1; // r0
v1 = COERCE_DOUBLE(_extendsfdf2(LODWORD(a)));
printf("%f\n", v1);
}__int64 sprintf_s(
char *__ptr64 const _Buffer,
const unsigned __int64 _BufferCount,
const char *__ptr64 const _Format,
...)
{
unsigned __int64 *v6; // x0
__int64 result; // x0
va_list va; // [xsp+38h] [xbp+38h]
va_start(va, _Format);
v6 = _local_stdio_printf_options();
return _stdio_common_vsprintf_s(*v6, _Buffer, _BufferCount, _Format, 0i64,
(char *__ptr64)va);
}__int64 sprintf_s(
char *__ptr64 const _Buffer,
const unsigned __int64 _BufferCount,
const char *__ptr64 const _Format,
...)
{
char *v3; // x21
unsigned __int64 v4; // x20
const char *v5; // x19
unsigned __int64 *v6; // x0
__int64 result; // x0
va_list va; // [xsp+38h] [xbp+38h]
va_start(va, _Format);
v3 = _Buffer;
v4 = _BufferCount;
v5 = _Format;
v6 = _local_stdio_printf_options();
return _stdio_common_vsprintf_s(*v6, v3, v4, v5, 0i64, (char *__ptr64)va);
}
if ( operation == ReadKeyNames )
return BaseDllReadVariableNames(v1, v2);
if ( operation != ReadSection )
{
if ( operation == WriteKeyValue || operation == DeleteKey )
return BaseDllWriteVariableValue(v1, v2, 0, 0);
if ( operation == WriteSection || operation == DeleteSection )
return BaseDllWriteApplicationVariables(v1, v2);if ( operation == 4 )
return BaseDllReadVariableNames(v1, v2);
if ( operation != 6 )
{
if ( operation == 2 || operation == 3 )
return BaseDllWriteVariableValue(v1, v2, 0, 0);
if ( operation == 7 || operation == 8 )
return BaseDllWriteApplicationVariables(v1, v2);std::string *
__fastcall
std::_System_error::_Makestr(
std::string *result,
std::error_code _Errcode,
std::string _Message)std::basic_string<char,std::char_traits<char>,std::allocator<char> > *
__fastcall
std::_System_error::_Makestr(
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result,
std::error_code _Errcode,
std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Message)return h() % 1024;v0 = h();
return (__int16)((((v0 ^ (SHIDWORD(v0) >> 31)) - (SHIDWORD(v0) >> 31)) & 0x3FF ^ (SHIDWORD(v0) >> 31))
- (SHIDWORD(v0) >> 31));return a1 - 1;v1 = a1 + 0xFFFFFFFFLL;
HIDWORD(v1) = ((unsigned __int64)(a1 + 0xFFFFFFFFLL) >> 32) - 1;MessageBoxA_0 = (int (__stdcall *)(HWND, LPCSTR, LPCSTR, UINT))
GetProcAddress(v4, "MessageBoxA");
if ( !MessageBoxA_0 )
return 0;
GetActiveWindow = (HWND (__stdcall *)())GetProcAddress(v5, "GetActiveWindow");
GetLastActivePopup = (HWND (__stdcall *)(HWND))GetProcAddress(v5, "GetLastActivePopup");
}
if ( GetActiveWindow )
{
v3 = GetActiveWindow();
if ( v3 )
{
if ( GetLastActivePopup )
v3 = GetLastActivePopup(v3);
}
}
return MessageBoxA_0(v3, a1, a2, a3);
dword_12313BA8 = (int (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))
GetProcAddress(v4, "MessageBoxA");
if ( !dword_12313BA8 )
return 0;
dword_12313BAC = GetProcAddress(v5, "GetActiveWindow");
dword_12313BB0 = (int (__stdcall *)(_DWORD))GetProcAddress(v5, "GetLastActivePopup");
}
if ( dword_12313BAC )
{
v3 = dword_12313BAC();
if ( v3 )
{
if ( dword_12313BB0 )
v3 = dword_12313BB0(v3);
}
}
return dword_12313BA8(v3, a1, a2, a3);# void __fastcall free_argv(int argc, char **argv)
.globl _Z9free_argviPPc # weak
_Z9free_argviPPc: # CODE XREF: test_expand_argv(void)+264↑p
# test_expand_argv(void)+51C↑p ...
var_10 = -0x10
var_4 = -4
var_s0 = 0
var_s4 = 4
arg_0 = 8
arg_4 = 0xC
# __unwind {
addiu $sp, -0x28
sw $ra, 0x20+var_s4($sp)
sw $fp, 0x20+var_s0($sp)
move $fp, $sp
la $gp, _GLOBAL_OFFSET_TABLE_+0x7FF0
sw $gp, 0x20+var_10($sp)
sw $a0, 0x20+arg_0($fp)
sw $a1, 0x20+arg_4($fp)
lw $v0, 0x20+arg_4($fp)
beqz $v0, loc_17778
nop
sw $zero, 0x20+var_4($fp)
loc_1770C: # CODE XREF: free_argv(int,char **)+80↓j
lw $v1, 0x20+var_4($fp)
lw $v0, 0x20+arg_0($fp)
slt $v0, $v1, $v0
beqz $v0, loc_17760
nop
lw $v0, 0x20+var_4($fp)
sll $v0, 2
lw $v1, 0x20+arg_4($fp)
addu $v0, $v1, $v0
lw $v0, 0($v0)
move $a0, $v0
lw $v0, (qfree_ptr-0x7FF0 - _GLOBAL_OFFSET_TABLE_)($gp)
move $t9, $v0
jalr $t9 ; qfree
nop
lw $gp, 0x20+var_10($fp)
lw $v0, 0x20+var_4($fp)
addiu $v0, 1
sw $v0, 0x20+var_4($fp)
b loc_1770C
nop
# ---------------------------------------------------------------------------
loc_17760: # CODE XREF: free_argv(int,char **)+40↑j
lw $a0, 0x20+arg_4($fp)
lw $v0, (qfree_ptr-0x7FF0 - _GLOBAL_OFFSET_TABLE_)($gp)
move $t9, $v0
jalr $t9 ; qfree
nop
lw $gp, 0x20+var_10($fp)
loc_17778: # CODE XREF: free_argv(int,char **)+28↑j
nop
move $sp, $fp
lw $ra, 0x20+var_s4($sp)
lw $fp, 0x20+var_s0($sp)
addiu $sp, 0x28
jr $ra
nop
# } // starts at 176D8void __fastcall free_argv(int argc, char **argv)
{
int i; // [sp+1Ch] [+1Ch]
if ( argv )
{
for ( i = 0; i < argc; ++i )
qfree(argv[i]);
qfree(argv);
}
}# =============== S U B R O U T I N E =======================================
# Attributes: bp-based frame fpd=0x18
# _DWORD uh_eq_s(void)
.globl _Z7uh_eq_sv
_Z7uh_eq_sv: # DATA XREF: .eh_frame:000478E4↓o
var_s0 = 0
var_s4 = 4
var_s8 = 8
var_sC = 0xC
var_s10 = 0x10
var_s14 = 0x14
var_s18 = 0x18
var_s1C = 0x1C
# __unwind {
addiu $sp, -0x38
sw $ra, 0x18+var_s1C($sp)
sw $fp, 0x18+var_s18($sp)
sw $s5, 0x18+var_s14($sp)
sw $s4, 0x18+var_s10($sp)
sw $s3, 0x18+var_sC($sp)
sw $s2, 0x18+var_s8($sp)
sw $s1, 0x18+var_s4($sp)
sw $s0, 0x18+var_s0($sp)
move $fp, $sp
jal uh
nop
move $s5, $v1
move $s4, $v0
jal s
nop
move $s3, $v0
sra $v0, 31
move $s2, $v0
xor $s0, $s4, $s2
xor $s1, $s5, $s3
or $v0, $s0, $s1
sltiu $v0, 1
andi $v0, 0xFF
move $sp, $fp
lw $ra, 0x18+var_s1C($sp)
lw $fp, 0x18+var_s18($sp)
lw $s5, 0x18+var_s14($sp)
lw $s4, 0x18+var_s10($sp)
lw $s3, 0x18+var_sC($sp)
lw $s2, 0x18+var_s8($sp)
lw $s1, 0x18+var_s4($sp)
lw $s0, 0x18+var_s0($sp)
addiu $sp, 0x38
jr $ra
nop
# } // starts at 25Cbool uh_eq_s(void)
{
unsigned __int64 v0; // $v1
v0 = uh();
return v0 == s();
}.globl smod199
smod199: # DATA XREF: .eh_frame:0000875C↓o
# __unwind {
lui $v1, 0x5254
sra $v0, $a0, 31
li $v1, 0x5254E78F
mult $a0, $v1
mfhi $v1
sra $v1, 6
subu $v1, $v0
li $v0, 0xC7
mul $a1, $v1, $v0
jr $ra
subu $v0, $a0, $a1
# } // starts at 4F2Cint __fastcall smod199(int a1)
{
return a1 % 199;
}
branch_to_b_dslot: # CODE XREF: branch_to_bal_dslot+14↓p
# DATA XREF: branch_likely_cond_move+10↓o
move $t2, $a0
addiu $t3, $t2, -0x18
bltz $t3, l1
li $a0, 1
sllv $a0, $t3
b l2
l1: # CODE XREF: branch_to_b_dslot+8↑j
li $t4, 0xFFFFFFC0
li $t3, 0x18
subu $t3, $t2
srav $a0, $t3
l2: # CODE XREF: branch_to_b_dslot+14↑j
jr $ra
addu $v0, $a0, $t4
# End of function branch_to_b_dslotint __fastcall branch_to_b_dslot(int a1)
{
int v1; // $a0
if ( a1 - 24 < 0 )
v1 = 1 >> (24 - a1);
else
v1 = 1 << (a1 - 24);
return v1 - 64;
}.globl upd_d2
upd_d2:
lwl $v0, 5($a0)
lwr $v0, 2($a0)
addiu $v0, $v0, 1
swl $v0, 5($a0)
swr $v0, 2($a0)
jr $ra
lb $v0, 0($a0)
# End of function upd_d2 .globl upd_d2
upd_d2:
lwl $v0, 2($a0)
lwr $v0, 5($a0)
addiu $v0, $v0, 1
swl $v0, 2($a0)
swr $v0, 5($a0)
jr $ra
lb $v0, 0($a0)
# End of function upd_d2int __fastcall upd_d2(char *a1)
{
++*(_DWORD *)(a1 + 2);
return *a1;
}
lwm16_sp:
var_10 = -0x10
addiu $sp, -0x10
swm $ra,$s0-$s2, 0x10+var_10($sp)
move $s0, $a0
move $s1, $a1
move $s2, $a2
addu $s0, $s1
addu $v0, $s0, $s2
lwm $ra,$s0-$s2, 0x10+var_10($sp)
jraddiusp 0x10__int64 __fastcall lwm16_sp(int a1, int a2, int a3)
{
return a1 + a2 + a3;
}x2y2m1f:
lui $v0, %hi(dbl_50)
ldc1 $f1, dbl_50
sub.d $f0, $f12, $f1
add.d $f1, $f12, $f1
mul.d $f0, $f1
jr $ra
madd.d $f0, $f13, $f0, $f12double __fastcall x2y2m1f(double a1, double a2)
{
return a2 * ((a1 - 1.0) * (a1 + 1.0)) + a1;
}mod4:
var_C = -0xC
var_s0 = 0
lui $gp, %hi(_GLOBAL_OFFSET_TABLE_+0x7FF0)
addiu $sp, -0x20
la $gp, _GLOBAL_OFFSET_TABLE_+0x7FF0
li $a3, 5
sw $ra, 0x1C+var_s0($sp)
sw $gp, 0x1C+var_C($sp)
lw $t9, (__moddi3_ptr-0x7FF0 - _GLOBAL_OFFSET_TABLE_)($gp)
jalr $t9 ; __moddi3
move $a2, $zero
lw $ra, 0x1C+var_s0($sp)
jr $ra
addiu $sp, 0x20
__int64 __fastcall mod4(__int64 a1)
{
return a1 % 5;
}bool __fastcall ge_100000001(__int64 a1)
{
return a1 >= 0x100000001LL;
}bool __fastcall ge_100000001(__int64 a1)
{
return a1 >= 4294967297LL;
}
BlockNumber = EfiBootRecord->RecordExtents[ExtentIndex64].BlockNumber;
BlockCount = EfiBootRecord->RecordExtents[ExtentIndex64].BlockCount;
BlockNumber = *(UINT64 *)((char *)&EfiBootRecord[1].BlockHeader.Checksum + ExtentIndex64);
BlockCount = *(UINT64 *)((char *)&EfiBootRecord[1].BlockHeader.ObjectOid + ExtentIndex64);
v3 = std::operator<<<std::char_traits<char>>(&std::cout, U"This is U\"Hello\" .rodata:0000000000000120 text "UTF-32LE", 'This is U"Hello"',0
...
v10 = std::ostream::operator<<(v9, aThisIsUHello_0);
int __fastcall ididi(int a1, __int64 a2, int a3, __int64 a4, int a5)
{
int varg_r0; // [sp+28h] [bp-10h]
__int64 varg_r2; // [sp+30h] [bp-8h]
varg_r0 = a1;
varg_r2 = a2;
my_print("d=%I64d\n", a2);
my_print("d1=%I64d\n", a4);
my_print("%d-%I64d-%d-%I64d-%d\n", varg_r0, varg_r2, a3, a4, a5);
return 0;
}int __fastcall ididi(int a1, int a2, __int64 a3, int a4, __int64 a5, int a6)
{
int v6; // r1
char v8; // [sp+4h] [bp-34h]
int varg_r0; // [sp+28h] [bp-10h]
__int64 varg_r2; // [sp+30h] [bp-8h]
varg_r0 = a1;
varg_r2 = a3;
my_print("d=%I64d\n", a2, a3);
my_print("d1=%I64d\n", v6, a5);
my_print("%d-%I64d-%d-%I64d-%d\n", varg_r0, varg_r2, a4, v8, a5, a6);
return 0;
}scanf("8: %d%i %x%o %s%s %C%c", &v12, &v7, &v3, &v4, &v2, &v9, &v8, &v13);
scanf("8: %[ a-z]%c %2c%c %2c%2c %[ a-z]%c", &v12, &v7, &v3, &v4, &v2, &v9, &v8, &v13);
scanf("8: %d%i %x%o %s%s %C%c", &v12, &v7, &v3, &v4, &v2, &v9, &v8, &v13, &v10, &v0, &v6, &v5, &v1, &v11);
scanf(
"8: %[ a-z]%c %2c%c %2c%2c %[ a-z]%c",
&v12,
&v7,
&v3,
&v4,
&v2,
&v9,
&v8,
&v13,
&v10,
&v0,
&v6,
&v5,
&v1,
&v11);
v15 = NtCurrentTeb()->NtTib.ExceptionList;v15 = __readfsdword(0);union __XmStringEntryRec
{
_XmStringEmptyHeader empty;
_XmStringOptSegHdrRec single;
_XmStringUnoptSegHdrRec unopt_single;
_XmStringArraySegHdrRec multiple;
};
struct __XmStringEmptyHeader
{
unsigned __int32 type : 2;
};
struct __XmStringOptSegHdrRec
{
unsigned __int32 type : 2;
unsigned __int32 text_type : 2;
unsigned __int32 tag_index : 3;
unsigned __int32 rend_begin : 1;
unsigned __int8 byte_count;
unsigned __int32 rend_end : 1;
unsigned __int32 rend_index : 4;
unsigned __int32 str_dir : 2;
unsigned __int32 flipped : 1;
unsigned __int32 tabs_before : 3;
unsigned __int32 permanent : 1;
unsigned __int32 soft_line_break : 1;
unsigned __int32 immediate : 1;
unsigned __int32 pad : 2;
};if ( entry->single.byte_count )if ( *((_BYTE *)&entry->empty + 1) )void __fastcall h_generic_calc_Perm32x8(V256 *res, V256 *argL, V256 *argR)
{
res->w32[0] = argL->w32[argR->w32[0] & 7];
res->w32[1] = argL->w32[argR->w32[1] & 7];
res->w32[2] = argL->w32[argR->w32[2] & 7];
res->w32[3] = argL->w32[argR->w32[3] & 7];
res->w32[4] = argL->w32[argR->w32[4] & 7];
res->w32[5] = argL->w32[argR->w32[5] & 7];
res->w32[6] = argL->w32[argR->w32[6] & 7];
res->w32[7] = argL->w32[argR->w32[7] & 7];
}void __fastcall h_generic_calc_Perm32x8(V256 *res, V256 *argL, V256 *argR)
{
LODWORD(res->w64[0]) = *((_DWORD *)argL->w64 + (argR->w64[0] & 7));
HIDWORD(res->w64[0]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[0]) & 7));
LODWORD(res->w64[1]) = *((_DWORD *)argL->w64 + (argR->w64[1] & 7));
HIDWORD(res->w64[1]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[1]) & 7));
LODWORD(res->w64[2]) = *((_DWORD *)argL->w64 + (argR->w64[2] & 7));
HIDWORD(res->w64[2]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[2]) & 7));
LODWORD(res->w64[3]) = *((_DWORD *)argL->w64 + (argR->w64[3] & 7));
HIDWORD(res->w64[3]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[3]) & 7));
}
int __cdecl main(int argc, const char **argv, const char **envp)
{
printf("r = %d == 42\n", 42);
printf("r = %lld == 42\n", 42LL);
printf("ABORT %d\n", 0x40000001);
return 0;
}void __fastcall h_generic_calc_Perm32x8(V256 *res, V256 *argL, V256 *argR)
{
LODWORD(res->w64[0]) = *((_DWORD *)argL->w64 + (argR->w64[0] & 7));
HIDWORD(res->w64[0]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[0]) & 7));
LODWORD(res->w64[1]) = *((_DWORD *)argL->w64 + (argR->w64[1] & 7));
HIDWORD(res->w64[1]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[1]) & 7));
LODWORD(res->w64[2]) = *((_DWORD *)argL->w64 + (argR->w64[2] & 7));
HIDWORD(res->w64[2]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[2]) & 7));
LODWORD(res->w64[3]) = *((_DWORD *)argL->w64 + (argR->w64[3] & 7));
HIDWORD(res->w64[3]) = *((_DWORD *)argL->w64 + (HIDWORD(argR->w64[3]) & 7));
}tbdint __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // r0
int v4; // r0
int v5; // r0
int v6; // r0
int v7; // r0
__int64 v8; // r0
int v9; // r2
__int64 v11; // [sp+0h] [bp-14h]
int v12; // [sp+Ch] [bp-8h]
int v13; // [sp+Ch] [bp-8h]
v3 = _mulvsi3(7, 6, envp);
v4 = _negvsi2(v3);
v5 = _addvsi3(v4, 101);
v12 = _subvsi3(v5, 17);
printf("r = %d == 42\n", v12);
v11 = _mulvdi3(7, 0, 6, 0);
v6 = _negvdi2(v12, v12 >> 31);
v7 = _addvdi3(v6, v6 >> 31, 101, 0);
v8 = _subvdi3(v7, v7 >> 31, 17, 0);
printf("r = %lld == 42\n", HIDWORD(v8), v11);
v13 = _mulvsi3(0x7FFFFFFF, 0x3FFFFFFF, v9);
printf("ABORT %d\n", v13);
return 0;
}
sub_1135FC(-266663568, "This is a long long long string");
if ( v2 > 0x48u )
{
sub_108998("Another str");
sub_1135FC(-266663568, 89351520);
if ( v2 > 0x48u )
{
sub_108998(89351556); _BYTE v1[12]; // rax
...
return *(mystruct *)v1;
} _BYTE v1[12]; // ax
mystruct result; // 0:ax.11
...
*(_QWORD *)result.ca1 = *(_QWORD *)v1;
result.s1 = *(_WORD *)&v1[8];
result.c1 = v1[10];
return result;
}while ( *++v4 )
;do
v5 = *++v4;
while ( v5 );unsigned __int8 *__fastcall otp_memset(unsigned __int8 *pDest, unsigned __int8 val, int size)
{
unsigned __int8 *i; // r3
for ( i = pDest; (unsigned int)size-- >= 1; ++i )
*i = val;
return pDest;
}unsigned __int8 *__fastcall otp_memset(unsigned __int8 *pDest, unsigned __int8 val, int size)
{
unsigned __int8 *i; // r3
_BOOL1 v4; // cf
for ( i = pDest; ; ++i )
{
v4 = (unsigned int)size-- >= 1;
if ( !v4 )
break;
*i = val;
}
return pDest;
}
}
unsigned __int64 __fastcall konst_mod251_shr3(unsigned __int64 a1)
{
return (a1 >> 3) % 0xFB;
}__int64 __fastcall konst_mod251_shr3(unsigned __int64 a1)
{
unsigned __int64 v1; // rcx
v1 = a1 >> 3;
_RDX = v1 + ((v1 * (unsigned __int128)0x5197F7D73404147ui64) >> 64);
__asm { rcr rdx, 1 }
return v1 - 251 * (_RDX >> 7);
}
_BOOL8 __fastcall sub_0(__int64 a1, int *a2)
{
int v2; // eax
int v3; // eax
int v4; // eax
v2 = *a2;
if ( *a2 > 522 )
{
v4 = v2 - 4143;
return !v4 || v4 == 40950;
}
if ( v2 != 522 )
{
v3 = v2 - 71;
if ( v3 )
{
if ( (unsigned int)(v3 - 205) >= 2 )
return 0;
}
}
return 1;
}__int64 __fastcall sub_0(__int64 a1, int *a2)
{
int v2; // eax
int v3; // eax
int v4; // eax
v2 = *a2;
if ( *a2 > 522 )
{
v4 = v2 - 4143;
if ( !v4 || v4 == 40950 )
goto LABEL_8;
LABEL_9:
return 0;
}
if ( v2 != 522 )
{
v3 = v2 - 71;
if ( v3 )
{
if ( (unsigned int)(v3 - 205) >= 2 )
goto LABEL_9;
}
}
LABEL_8:
return 1;
}__int64 __fastcall sub_4008C0(int a1)
{
int v1; // ecx
int v2; // edx
int v4; // [rsp+0h] [rbp-4h]
v1 = 2;
if ( a1 > 2 )
{
do
{
nanosleep(&rmtp, &rqtp);
v2 = a1 % v1++;
v4 = 1 / v2;
}
while ( v1 != a1 );
}
return 0LL;
}__int64 __fastcall sub_4008C0(int a1)
{
int v1; // ecx
v1 = 2;
if ( a1 > 2 )
{
do
{
nanosleep(&rmtp, &rqtp);
++v1;
}
while ( v1 != a1 );
}
return 0LL;
}int __cdecl func1(const float a, int b, void *c)
{
return sub_88("%f, %d, %p\n", a, (unsigned int)b, c);
}int __cdecl func1(const float a, int b, void *c)
{
return sub_88("%f, %d, %p\n", (unsigned int)b, c, a);
}int int_h_mod_m32ui64(void)
{
return h() % 32;
}int int_h_mod_m32ui64(void)
{
__int64 v0; // r10
v0 = h();
return (abs64(v0) & 0x1F ^ (SHIDWORD(v0) >> 31)) - (SHIDWORD(v0) >> 31);
}; struct_result *__fastcall sub_210DC(struct_result *result)
var_10 = -0x10
var_4 = -4
MOV R12, SP
STMFD SP!, {R0}
STMFD SP!, {R12,LR}
SUB SP, SP, #4
LDR R2, [SP,#0x10+var_4]
MOV R3, #0
STR R3, [R2]
LDR R3, [SP,#0x10+var_4]
ADD R2, R3, #4
MOV R3, #0
STR R3, [R2]
LDR R3, [SP,#0x10+var_4]
ADD R2, R3, #8
MOV R3, #0
STR R3, [R2]
LDR R3, [SP,#0x10+var_4]
STR R3, [SP,#0x10+var_10]
LDR R0, [SP,#0x10+var_10]
ADD SP, SP, #4
LDMFD SP, {SP,LR}
BX LR
; End of function sub_210DCstruct_result *__fastcall sub_210DC(struct_result *result)
{
result->dword0 = 0;
result->dword4 = 0;
result->dword8 = 0;
return result;
} ; bool __cdecl uh_gt_uc()
EXPORT _uh_gt_uc__YA_NXZ
_uh_gt_uc__YA_NXZ ; DATA XREF: .pdata:$T7452o
var_2C = -0x2C
var_28 = -0x28
var_24 = -0x24
var_20 = -0x20
var_1C = -0x1C
var_18 = -0x18
var_14 = -0x14
var_10 = -0x10
var_C = -0xC
var_8 = -8
var_4 = -4
STR LR, [SP,#var_4]! ; $M7441
; $LN8@uh_gt_uc
SUB SP, SP, #0x28
$M7449
BL uh
STR R1, [SP,#0x2C+var_24]
STR R0, [SP,#0x2C+var_28]
BL uc
STRB R0, [SP,#0x2C+var_20]
LDRB R3, [SP,#0x2C+var_20]
STR R3, [SP,#0x2C+var_1C]
LDR R1, [SP,#0x2C+var_1C]
LDR R3, [SP,#0x2C+var_1C]
MOV R2, R3,ASR#31
LDR R3, [SP,#0x2C+var_28]
STR R3, [SP,#0x2C+var_18]
LDR R3, [SP,#0x2C+var_24]
STR R3, [SP,#0x2C+var_14]
LDR R3, [SP,#0x2C+var_18]
STR R3, [SP,#0x2C+var_10]
STR R1, [SP,#0x2C+var_C]
LDR R3, [SP,#0x2C+var_14]
CMP R3, R2
BCC $LN3_8
loc_6AC
BHI $LN5_0
loc_6B0
LDR R2, [SP,#0x2C+var_10]
LDR R3, [SP,#0x2C+var_C]
CMP R2, R3
BLS $LN3_8
$LN5_0
MOV R3, #1
STR R3, [SP,#0x2C+var_8]
B $LN4_8
; ---------------------------------------------------------------------------
$LN3_8
; uh_gt_uc(void)+68j
MOV R3, #0
STR R3, [SP,#0x2C+var_8]
$LN4_8
LDR R3, [SP,#0x2C+var_8]
AND R3, R3, #0xFF
STRB R3, [SP,#0x2C+var_2C]
LDRB R0, [SP,#0x2C+var_2C]
ADD SP, SP, #0x28
LDR PC, [SP+4+var_4],#4
; End of function uh_gt_uc(void)bool __fastcall uh_gt_uc()
{
unsigned __int64 v0; // ST04_8@1
v0 = uh();
return v0 > uc();
}; int __cdecl ReadShort(void *, unsigned __int32 offset, int whence)
ReadShort
whence = -0x18
var_A = -0xA
var_8 = -8
STMFD SP!, {R4,LR}
SUB SP, SP, #0x10 ; whence
MOV R4, #0
ADD R3, SP, #0x18+var_8
STRH R4, [R3,#-2]!
STR R2, [SP,#0x18+whence] ; whence
MOV R2, R3 ; buffer
MOV R3, #2 ; len
BL ReadData
CMP R0, R4
MOVNE R0, R4
LDREQSH R0, [SP,#0x18+var_A]
ADD SP, SP, #0x10
LDMFD SP!, {R4,PC}
; End of function ReadShortint __cdecl ReadShort(void *a1, unsigned __int32 offset, int whence)
{
int result; // r0@2
__int16 v4; // [sp+Eh] [bp-Ah]@1
v4 = 0;
if ( ReadData(a1, offset, &v4, 2u, whence) )
result = 0;
else
result = v4;
return result;
}
; signed int __fastcall get_next_byte(entry_t *entry)
get_next_byte ; DATA XREF: sub_3BC+30o
;
LDR R2, [R0,#4]
CMP R2, #0
LDRNE R3, [R0]
LDRNEB R1, [R3],#1
CMPNE R1, #0
MOVEQ R1, #1
STREQ R1, [R0,#0xC]
MOVEQ R0, 0xFFFFFFFF
MOVEQ PC, LR
SUB R2, R2, #1
STR R2, [R0,#4]
STR R3, [R0]
MOV R0, R1
RET
; End of function get_next_bytesigned int __fastcall get_next_byte(entry_t *entry)
{
signed int chr; // r1@0
unsigned __int8 *ptr; // r3@0
int count; // r2@1
char done; // zf@1
signed int result; // r0@4
count = entry->count;
done = count == 0;
if ( count )
{
ptr = entry->ptr + 1;
chr = *entry->ptr;
done = chr == 0;
}
if ( done )
{
entry->done = 1;
result = -1;
}
else
{
entry->count = count - 1;
entry->ptr = ptr;
result = chr;
}
return result;
}; void __fastcall sub_2A38(list_t *ptr, unsigned int a2)
sub_2A38 ; CODE XREF: sub_5C8+48p
; sub_648+5Cp ...
MOV R2, #0
STMFD SP!, {LR}
MOV R3, R2
MOV R12, R2
MOV LR, R2
SUBS R1, R1, #0x20
loc_2A50 ; CODE XREF: sub_2A38+24j
STMCSIA R0!, {R2,R3,R12,LR}
STMCSIA R0!, {R2,R3,R12,LR}
SUBCSS R1, R1, #0x20
BCS loc_2A50
MOVS R1, R1,LSL#28
STMCSIA R0!, {R2,R3,R12,LR}
STMMIIA R0!, {R2,R3}
LDMFD SP!, {LR}
MOVS R1, R1,LSL#2
STRCS R2, [R0],#4
MOVEQ PC, LR
STRMIH R2, [R0],#2
TST R1, #0x40000000
STRNEB R2, [R0],#1
RET
; End of function sub_2A38void __fastcall sub_2A38(list_t *ptr, unsigned int a2)
{
char copybig; // cf@1
unsigned int size; // r1@1
list_t *v4; // r0@3
int remains; // r1@4
int final; // r1@8
copybig = a2 >= 0x20;
size = a2 - 32;
do
{
if ( !copybig )
break;
ptr->dword0 = 0;
ptr->dword4 = 0;
ptr->dword8 = 0;
ptr->dwordC = 0;
v4 = ptr + 1;
v4->dword0 = 0;
v4->dword4 = 0;
v4->dword8 = 0;
v4->dwordC = 0;
ptr = v4 + 1;
copybig = size >= 0x20;
size -= 32;
}
while ( copybig );
remains = size << 28;
if ( copybig )
{
ptr->dword0 = 0;
ptr->dword4 = 0;
ptr->dword8 = 0;
ptr->dwordC = 0;
++ptr;
}
if ( remains < 0 )
{
ptr->dword0 = 0;
ptr->dword4 = 0;
ptr = (list_t *)((char *)ptr + 8);
}
final = 4 * remains;
if ( copybig )
{
ptr->dword0 = 0;
ptr = (list_t *)((char *)ptr + 4);
}
if ( final )
{
if ( final < 0 )
{
LOWORD(ptr->dword0) = 0;
ptr = (list_t *)((char *)ptr + 2);
}
if ( final & 0x40000000 )
LOBYTE(ptr->dword0) = 0;
}
}
EXPORT op_two64
op_two64 ; CODE XREF: refer_all+31Cp
; main+78p
anonymous_1 = -0x28
var_20 = -0x20
anonymous_0 = -0x18
var_10 = -0x10
arg_0 = 4
000 MOV R12, SP
000 STMFD SP!, {R4,R11,R12,LR,PC}
014 SUB R11, R12, #4
014 SUB SP, SP, #0x18
02C SUB R4, R11, #-var_10
02C STMDB R4, {R0,R1}
02C MOV R1, 0xFFFFFFF0
02C SUB R12, R11, #-var_10
02C ADD R1, R12, R1
02C STMIA R1, {R2,R3}
02C LDR R3, [R11,#arg_0]
02C CMP R3, #1
02C BNE loc_9C44
02C MOV R3, 0xFFFFFFF0
02C SUB R0, R11, #-var_10
02C ADD R3, R0, R3
02C SUB R4, R11, #-var_10
02C LDMDB R4, {R1,R2}
02C LDMIA R3, {R3,R4}
02C ADDS R3, R3, R1
02C ADC R4, R4, R2
02C SUB R12, R11, #-var_20
02C STMDB R12, {R3,R4}
02C B loc_9D04
; ---------------------------------------------------------------------------
loc_9C44 ; CODE XREF: op_two64+30j
02C LDR R3, [R11,#arg_0]
02C CMP R3, #2
02C BNE loc_9C7C
02C MOV R3, 0xFFFFFFF0
02C SUB R0, R11, #-var_10
02C ADD R3, R0, R3
02C SUB R4, R11, #-var_10
02C LDMDB R4, {R1,R2}
02C LDMIA R3, {R3,R4}
02C SUBS R3, R1, R3
02C SBC R4, R2, R4
02C SUB R12, R11, #-var_20
02C STMDB R12, {R3,R4}
02C B loc_9D04
; ---------------------------------------------------------------------------
loc_9C7C ; CODE XREF: op_two64+68j
02C LDR R3, [R11,#arg_0]
02C CMP R3, #3
02C BNE loc_9CB8
02C MOV R3, 0xFFFFFFF0
02C SUB R0, R11, #-var_10
02C ADD R3, R0, R3
02C SUB R2, R11, #-var_10
02C LDMDB R2, {R0,R1}
02C LDMIA R3, {R2,R3}
02C BL __muldi3
02C MOV R4, R1
02C MOV R3, R0
02C SUB R12, R11, #-var_20
02C STMDB R12, {R3,R4}
02C B loc_9D04
; ---------------------------------------------------------------------------
loc_9CB8 ; CODE XREF: op_two64+A0j
02C LDR R3, [R11,#arg_0]
02C CMP R3, #4
02C BNE loc_9CF4
02C MOV R3, 0xFFFFFFF0
02C SUB R0, R11, #-var_10
02C ADD R3, R0, R3
02C SUB R2, R11, #-var_10
02C LDMDB R2, {R0,R1}
02C LDMIA R3, {R2,R3}
02C BL __divdi3
02C MOV R4, R1
02C MOV R3, R0
02C SUB R12, R11, #-var_20
02C STMDB R12, {R3,R4}
02C B loc_9D04
; ---------------------------------------------------------------------------
loc_9CF4 ; CODE XREF: op_two64+DCj
02C MOV R3, 0xFFFFFFFF
02C MOV R2, 0xFFFFFFFF
02C SUB R4, R11, #-var_20
02C STMDB R4, {R2,R3}
loc_9D04 ; CODE XREF: op_two64+5Cj
; op_two64+94j ...
02C SUB R12, R11, #-var_20
02C LDMDB R12, {R0,R1}
02C SUB SP, R11, #0x10
014 LDMFD SP, {R4,R11,SP,PC}
; End of function op_two64signed __int64 __fastcall op_two64(signed __int64 a1, signed __int64 a2, int a3)
{
signed __int64 v4; // [sp+0h] [bp-28h]@2
switch ( a3 )
{
case 1:
v4 = a2 + a1;
break;
case 2:
v4 = a1 - a2;
break;
case 3:
v4 = a1 * a2;
break;
case 4:
v4 = a1 / a2;
break;
default:
v4 = -1LL;
break;
}
return v4;
}loc_110D6 ; CODE XREF: sub_10E38+43Cj
; sub_10E38+442j ...
LDR R1, =(tmin_ptr - 0x1CDB8)
LDR R2, =(tmax_ptr - 0x1CDB8)
LDR R0, =(aRttMinAvgMaxMd - 0x1CDB8)
LDR R6, [R7,R1]
LDR R5, [R7,R2]
MOVS R3, #0xFA
LDR R4, [R6]
LSLS R1, R3, #2
LDR R6, [R5]
ADDS R5, R7, R0 ; "rtt min/avg/max/mdev = %ld.%03ld/%lu.%0"...
MOVS R0, R4
BLX __aeabi_idiv
MOV R8, R0
MOVS R0, R4
MOVS R4, #0xFA
LSLS R1, R4, #2
BLX __aeabi_idivmod
LDR R3, =0
LDR R2, =0x3E8
MOVS R4, R1
LDR R0, [SP,#0x78+var_40]
LDR R1, [SP,#0x78+var_40+4]
BLX __aeabi_ldivmod
LDR R3, =0
LDR R2, =0x3E8
STR R0, [SP,#0x78+var_50]
STR R1, [SP,#0x78+var_4C]
LDR R0, [SP,#0x78+var_40]
LDR R1, [SP,#0x78+var_40+4]
BLX __aeabi_ldivmod
MOVS R1, #0xFA
MOVS R0, R6
LSLS R1, R1, #2
STR R2, [SP,#0x78+var_78]
BLX __aeabi_idiv
STR R0, [SP,#0x78+var_74]
MOVS R0, R6
MOVS R6, #0xFA
LSLS R1, R6, #2
BLX __aeabi_idivmod
MOVS R2, #0xFA
STR R1, [SP,#0x78+var_70]
LDR R0, [SP,#0x78+var_38]
LSLS R1, R2, #2
BLX __aeabi_idiv
MOVS R3, #0xFA
STR R0, [SP,#0x78+var_6C]
LSLS R1, R3, #2
LDR R0, [SP,#0x78+var_38]
BLX __aeabi_idivmod
MOVS R0, R5 ; format
STR R1, [SP,#0x78+var_68]
MOVS R2, R4
MOV R1, R8
LDR R3, [SP,#0x78+var_50]
BLX printf printf(
"rtt min/avg/max/mdev = %ld.%03ld/%lu.%03ld/%ld.%03ld/%ld.%03ld ms",
tmin / 1000,
tmin % 1000,
v27 / 1000,
v27 % 1000,
tmax / 1000,
tmax % 1000,
v28 / 1000,
v28 % 1000);
sub_65768 ; DATA XREF: .data:007E37A4o
var_18 = -0x18
var_14 = -0x14
var_10 = -0x10
arg_0 = 0
PUSH {LR}
LDR.W R12, =aResponsetype ; "responseType"
SUB SP, SP, #0x14
ADR.W LR, loc_65774
loc_65774 ; DATA XREF: sub_65768+8o
ADD R12, LR
LDR.W LR, [SP,#0x18+arg_0]
STR.W LR, [SP,#0x18+var_18]
MOV.W LR, #0x10
STR.W LR, [SP,#0x18+var_14]
LDR.W LR, =0xFFF0883C
ADD R12, LR
STR.W R12, [SP,#0x18+var_10]
BL sub_65378
ADD SP, SP, #0x14
POP {PC}
; End of function sub_65768int __fastcall sub_65768(int a1, int a2, int a3, int a4, int a5)
{
return sub_65378(a1, a2, a3, a4, a5, 16, (int)myarray);
}; =============== S U B R O U T I N E =======================================
; int __cdecl sub_4061C0(char *Str, char *Dest)
sub_4061C0 proc near ; CODE XREF: sub_4062F0+15p
; sub_4063D4+21p ...
Str = dword ptr 4
Dest = dword ptr 8
push esi
push offset aSmtp_ ; "smtp."
push [esp+8+Dest] ; Dest
call _strcpy
mov esi, [esp+0Ch+Str]
push esi ; Str
call _strlen
add esp, 0Ch
xor ecx, ecx
test eax, eax
jle short loc_4061ED
loc_4061E2: ; CODE XREF: sub_4061C0+2Bj
cmp byte ptr [ecx+esi], 40h
jz short loc_4061ED
inc ecx
cmp ecx, eax
jl short loc_4061E2
loc_4061ED: ; CODE XREF: sub_4061C0+20j
; sub_4061C0+26j
dec eax
cmp ecx, eax
jl short loc_4061F6
xor eax, eax
pop esi
retn
; ---------------------------------------------------------------------------
loc_4061F6: ; CODE XREF: sub_4061C0+30j
lea eax, [ecx+esi+1]
push eax ; Source
push [esp+8+Dest] ; Dest
call _strcat
pop ecx
pop ecx
push 1
pop eax
pop esi
retn
sub_4061C0 endpsigned int __cdecl sub_4061C0(char *Str, char *Dest)
{
int len; // eax@1
int i; // ecx@1
char *str2; // esi@1
signed int result; // eax@5
strcpy(Dest, "smtp.");
str2 = Str;
len = strlen(Str);
for ( i = 0; i < len; ++i )
{
if ( str2[i] == 64 )
break;
}
if ( i < len - 1 )
{
strcat(Dest, &str2[i + 1]);
result = 1;
}
else
{
result = 0;
}
return result;
}
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_4061C0(char *Str, char *Dest)
sub_4061C0 proc near ; CODE XREF: sub_4062F0+15p
; sub_4063D4+21p ...
Str = dword ptr 4
Dest = dword ptr 8
push esi
push offset aSmtp_ ; "smtp."
push [esp+8+Dest] ; Dest
call _strcpy
mov esi, [esp+0Ch+Str]
push esi ; Str
call _strlen
add esp, 0Ch
xor ecx, ecx
test eax, eax
jle short loc_4061ED
loc_4061E2: ; CODE XREF: sub_4061C0+2Bj
cmp byte ptr [ecx+esi], 40h
jz short loc_4061ED
inc ecx
cmp ecx, eax
jl short loc_4061E2
loc_4061ED: ; CODE XREF: sub_4061C0+20j
; sub_4061C0+26j
dec eax
cmp ecx, eax
jl short loc_4061F6
xor eax, eax
pop esi
retn
; ---------------------------------------------------------------------------
loc_4061F6: ; CODE XREF: sub_4061C0+30j
lea eax, [ecx+esi+1]
push eax ; Source
push [esp+8+Dest] ; Dest
call _strcat
pop ecx
pop ecx
push 1
pop eax
pop esi
retn
sub_4061C0 endpsigned int __cdecl sub_4061C0(char *Str, char *Dest)
{
int len; // eax@1
int i; // ecx@1
char *str2; // esi@1
signed int result; // eax@5
strcpy(Dest, "smtp.");
str2 = Str;
len = strlen(Str);
for ( i = 0; i < len; ++i )
{
if ( str2[i] == 64 )
break;
}
if ( i < len - 1 )
{
strcat(Dest, &str2[i + 1]);
result = 1;
}
else
{
result = 0;
}
return result;
}; =============== S U B R O U T I N E =======================================
; int __cdecl myfunc(wchar_t *Str, int)
myfunc proc near ; CODE XREF: sub_4060+76p
; .text:42E4p
Str = dword ptr 4
arg_4 = dword ptr 8
mov eax, dword_1001F608
cmp eax, 0FFFFFFFFh
jnz short loc_10003AB6
push offset aGetsystemwindo ; "GetSystemWindowsDirectoryW"
push offset aKernel32_dll ; "KERNEL32.DLL"
call ds:GetModuleHandleW
push eax ; hModule
call ds:GetProcAddress
mov dword_1001F608, eax
loc_10003AB6: ; CODE XREF: myfunc+8j
test eax, eax
push esi
mov esi, [esp+4+arg_4]
push edi
mov edi, [esp+8+Str]
push esi
push edi
jz short loc_10003ACA
call eax ; dword_1001F608
jmp short loc_10003AD0
; ---------------------------------------------------------------------------
loc_10003ACA: ; CODE XREF: myfunc+34j
call ds:GetWindowsDirectoryW
loc_10003AD0: ; CODE XREF: myfunc+38j
sub esi, eax
cmp esi, 5
jnb short loc_10003ADD
pop edi
add eax, 5
pop esi
retn
; ---------------------------------------------------------------------------
loc_10003ADD: ; CODE XREF: myfunc+45j
push offset aInf_0 ; "\\inf"
push edi ; Dest
call _wcscat
push edi ; Str
call _wcslen
add esp, 0Ch
pop edi
pop esi
retn
myfunc endpsize_t __cdecl myfunc(wchar_t *buf, int bufsize)
{
int (__stdcall *func)(_DWORD, _DWORD); // eax@1
wchar_t *buf2; // edi@3
int bufsize; // esi@3
UINT dirlen; // eax@4
size_t outlen; // eax@7
HMODULE h; // eax@2
func = g_fptr;
if ( g_fptr == (int (__stdcall *)(_DWORD, _DWORD))-1 )
{
h = GetModuleHandleW(L"KERNEL32.DLL");
func = (int (__stdcall *)(_DWORD, _DWORD))
GetProcAddress(h, "GetSystemWindowsDirectoryW");
g_fptr = func;
}
bufsize = bufsize;
buf2 = buf;
if ( func )
dirlen = func(buf, bufsize);
else
dirlen = GetWindowsDirectoryW(buf, bufsize);
if ( bufsize - dirlen >= 5 )
{
wcscat(buf2, L"\\inf");
outlen = wcslen(buf2);
}
else
{
outlen = dirlen + 5;
}
return outlen;
}
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; sgell(__int64, __int64)
public @sgell$qjj
@sgell$qjj proc near
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
arg_C = dword ptr 14h
push ebp
mov ebp, esp
mov eax, [ebp+arg_0]
mov edx, [ebp+arg_4]
cmp edx, [ebp+arg_C]
jnz short loc_10226
cmp eax, [ebp+arg_8]
setnb al
jmp short loc_10229
; ---------------------------------------------------------------------------
loc_10226: ; CODE XREF: sgell(__int64,__int64)+Cj
setnl al
loc_10229: ; CODE XREF: sgell(__int64,__int64)+14j
and eax, 1
pop ebp
retn
@sgell$qjj endpbool __cdecl sgell(__int64 a1, __int64 a2)
{
return a1 >= a2;
}; =============== S U B R O U T I N E =======================================
wndproc proc near ; DATA XREF: sub_4010E0+21o
Paint = tagPAINTSTRUCT ptr -0A4h
Buffer = byte ptr -64h
hWnd = dword ptr 4
Msg = dword ptr 8
wParam = dword ptr 0Ch
lParam = dword ptr 10h
mov ecx, hInstance
sub esp, 0A4h
lea eax, [esp+0A4h+Buffer]
push 64h ; nBufferMax
push eax ; lpBuffer
push 6Ah ; uID
push ecx ; hInstance
call ds:LoadStringA
mov ecx, [esp+0A4h+Msg]
mov eax, ecx
sub eax, 2
jz loc_4013E8
sub eax, 0Dh
jz loc_4013B2
sub eax, 102h
jz short loc_401336
mov edx, [esp+0A4h+lParam]
mov eax, [esp+0A4h+wParam]
push edx ; lParam
push eax ; wParam
push ecx ; Msg
mov ecx, [esp+0B0h+hWnd]
push ecx ; hWnd
call ds:DefWindowProcA
add esp, 0A4h
retn 10h
; ---------------------------------------------------------------------------
loc_401336: ; CODE XREF: wndproc+3Cj
mov ecx, [esp+0A4h+wParam]
mov eax, ecx
and eax, 0FFFFh
sub eax, 68h
jz short loc_40138A
dec eax
jz short loc_401371
mov edx, [esp+0A4h+lParam]
mov eax, [esp+0A4h+hWnd]
push edx ; lParam
push ecx ; wParam
push 111h ; Msg
push eax ; hWnd
call ds:DefWindowProcA
add esp, 0A4h
retn 10h
; ---------------------------------------------------------------------------
loc_401371: ; CODE XREF: wndproc+7Aj
mov ecx, [esp+0A4h+hWnd]
push ecx ; hWnd
call ds:DestroyWindow
xor eax, eax
add esp, 0A4h
retn 10h
; ---------------------------------------------------------------------------
loc_40138A: ; CODE XREF: wndproc+77j
mov edx, [esp+0A4h+hWnd]
mov eax, hInstance
push 0 ; dwInitParam
push offset DialogFunc ; lpDialogFunc
push edx ; hWndParent
push 67h ; lpTemplateName
push eax ; hInstance
call ds:DialogBoxParamA
xor eax, eax
add esp, 0A4h
retn 10h
; ---------------------------------------------------------------------------
loc_4013B2: ; CODE XREF: wndproc+31j
push esi
mov esi, [esp+0A8h+hWnd]
lea ecx, [esp+0A8h+Paint]
push ecx ; lpPaint
push esi ; hWnd
call ds:BeginPaint
push eax ; HDC
push esi ; hWnd
call my_paint
add esp, 8
lea edx, [esp+0A8h+Paint]
push edx ; lpPaint
push esi ; hWnd
call ds:EndPaint
pop esi
xor eax, eax
add esp, 0A4h
retn 10h
; ---------------------------------------------------------------------------
loc_4013E8: ; CODE XREF: wndproc+28j
push 0 ; nExitCode
call ds:PostQuitMessage
xor eax, eax
add esp, 0A4h
retn 10h
wndproc endp
LRESULT __stdcall wndproc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
LRESULT result; // eax@4
HWND h; // esi@10
HDC dc; // eax@10
CHAR Buffer; // [sp+40h] [bp-64h]@1
struct tagPAINTSTRUCT Paint; // [sp+0h] [bp-A4h]@10
LoadStringA(hInstance, 0x6Au, &Buffer, 100);
switch ( Msg )
{
case 2u:
PostQuitMessage(0);
result = 0;
break;
case 15u:
h = hWnd;
dc = BeginPaint(hWnd, &Paint);
my_paint(h, dc);
EndPaint(h, &Paint);
result = 0;
break;
case 273u:
if ( (_WORD)wParam == 104 )
{
DialogBoxParamA(hInstance, (LPCSTR)0x67, hWnd, DialogFunc, 0);
result = 0;
}
else
{
if ( (_WORD)wParam == 105 )
{
DestroyWindow(hWnd);
result = 0;
}
else
{
result = DefWindowProcA(hWnd, 0x111u, wParam, lParam);
}
}
break;
default:
result = DefWindowProcA(hWnd, Msg, wParam, lParam);
break;
}
return result;
}loc_804BCC7: ; CODE XREF: sub_804BB10+A42j
mov [esp+28h+var_24], offset aUnzip ; "unzip"
xor eax, eax
test esi, esi
setnz al
mov edx, 1
mov ds:dword_804FBAC, edx
lea eax, [eax+eax+1]
mov ds:dword_804F780, eax
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jz loc_804C4F1
loc_804BCFF: ; CODE XREF: sub_804BB10+9F8j
mov eax, 2
mov ds:dword_804FBAC, eax
loc_804BD09: ; CODE XREF: sub_804BB10+9FEj
mov [esp+28h+var_24], offset aZ2cat ; "z2cat"
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jz loc_804C495
loc_804BD26: ; CODE XREF: sub_804BB10+99Cj
; sub_804BB10+9B9j ...
mov eax, 2
mov ds:dword_804FBAC, eax
xor eax, eax
test esi, esi
setnz al
inc eax
mov ds:dword_804F780, eax
.............................. SKIP ............................
loc_804C495: ; CODE XREF: sub_804BB10+210j
mov [esp+28h+var_24], offset aZ2cat_0 ; "Z2CAT"
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jnz loc_804BD26
mov [esp+28h+var_24], offset aZcat ; "zcat"
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jnz loc_804BD26
mov [esp+28h+var_24], offset aZcat_0 ; "ZCAT"
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jnz loc_804BD26
jmp loc_804BD3D
; ---------------------------------------------------------------------------
loc_804C4F1: ; CODE XREF: sub_804BB10+1E9j
mov [esp+28h+var_24], offset aUnzip_0 ; "UNZIP"
mov eax, ds:dword_804FFD4
mov [esp+28h+var_28], eax
call _strstr
test eax, eax
jnz loc_804BCFF
jmp loc_804BD09dword_804F780 = 2 * (v9 != 0) + 1;
if ( strstr(dword_804FFD4, "unzip") || strstr(dword_804FFD4, "UNZIP") )
dword_804FBAC = 2;
if ( strstr(dword_804FFD4, "z2cat")
|| strstr(dword_804FFD4, "Z2CAT")
|| strstr(dword_804FFD4, "zcat")
|| strstr(dword_804FFD4, "ZCAT") )
{
dword_804FBAC = 2;
dword_804F780 = (v9 != 0) + 1;
} mov eax, [esp+argc]
sub esp, 8
push ebx
push ebp
push esi
lea ecx, ds:0Ch[eax*4]
push edi
push ecx ; unsigned int
call ??2@YAPAXI@Z ; operator new(uint)
mov edx, [esp+1Ch+argv]
mov ebp, eax
or ecx, 0FFFFFFFFh
xor eax, eax
mov esi, [edx]
add esp, 4
mov edi, esi
repne scasb
not ecx
dec ecx
cmp ecx, 4
jl short loc_401064
cmp byte ptr [ecx+esi-4], '.'
jnz short loc_401064
mov al, [ecx+esi-3]
cmp al, 'e'
jz short loc_401047
cmp al, 'E'
jnz short loc_401064
loc_401047: ; CODE XREF: _main+41j
mov al, [ecx+esi-2]
cmp al, 'x'
jz short loc_401053
cmp al, 'X'
jnz short loc_401064
loc_401053: ; CODE XREF: _main+4Dj
mov al, [ecx+esi-1]
cmp al, 'e'
jz short loc_40105F
cmp al, 'E'
jnz short loc_401064
loc_40105F: ; CODE XREF: _main+59j
mov byte ptr [ecx+esi-4], 0
loc_401064: ; CODE XREF: _main+32j _main+39j ...
mov edi, esi
or ecx, 0FFFFFFFFh
xor eax, eax
repne scasb
not ecx
add ecx, 3
push ecx ; unsigned int
call ??2@YAPAXI@Z ; operator new(uint)
mov edx, eax

return 21600 * (t / 21600); return 21600
* (((signed __int64)((unsigned __int128)(1749024623285053783LL
* (signed __int128)t) >> 64) >> 11) - (t >> 63));return a1 << 28 != 0 && (a1 & (unsigned __int8)(a1 - 1)) == 0; v1 = 1;
v2 = 1;
if ( !(a1 << 28) )
v2 = 0;
if ( !((unsigned __int8)a1 & (unsigned __int8)(a1 - 1)) )
v1 = 0;
return v2 && !v1;XImage *__fastcall XImage::setHotSpot(XImage *this, int a2, int a3)
{
LOWORD(this->height) = a2;
HIWORD(this->height) = a3;
return this;
}int __fastcall XImage::setHotSpot(int this, int a2, int a3)
{
*(_WORD *)(this + 4) = a2;
*(_WORD *)(this + 6) = a3;
return this;
}float __fastcall ret4f(__n128 a1)
{
return a1.n128_f32[2];
}float __fastcall ret4f(__n128 a1)
{
return *(float *)&a1.n128_u32[2];
} for ( i = 0; i < 16; ++i )
{
printf("%x", *(unsigned __int8 *)(i + v2) >> 4);
printf("%x", *(_BYTE *)(i + v2) & 0xF);
}v3 = 0;
do
{
printf("%x", (unsigned int)*(unsigned __int8 *)(v3 + v2) >> 4);
printf("%x", *(_BYTE *)(v3++ + v2) & 0xF);
}
while ( v3 < 16 );struct __cppobj B1
{
B1_vtbl *__vftable /*VFT*/;
char d1[4];
};
struct __cppobj B2
{
B2_vtbl *__vftable /*VFT*/;
char d2[4];
};
struct __cppobj A : B1, B2
{
char d3[4];
};
A::a2(A *this)A::a2(B2 *this)int __thiscall A::a2(B2 *__shifted(A,8) this)
{
printf("A::a2 %p\n", ADJ(this));
printf("A::d2 %p\n", ADJ(this)->d2);
return ADJ(this)->d3[0];
}int __thiscall A::a2(B2 *this)
{
B2 *v1; // ST08_4
v1 = this;
printf("A::a2 %p\n", this - 1);
printf("A::d2 %p\n", (char *)v1 + 4);
return *((char *)v1 + 8);
}if ( !memcmp(i + 10, "AMIBIOSC", 8u) )
return i + 10; v2 = 0;
v3 = 1;
v4 = i + 10;
v5 = "AMIBIOSC";
v6 = 8;
do
{
if ( !v6 )
break;
v2 = *v4 < (const unsigned __int8)*v5;
v3 = *v4++ == *v5++;
--v6;
}
while ( v3 );
if ( (!v2 && !v3) == v2 )
return i + 10;
v5 = *++v4;
result = --a4; v5 = (v4++)[1];
result = a4-- - 1;__int64 __fastcall sar64(__int64 a1)
{
return a1 >> 1;
}__int64 __fastcall sar64(__int64 a1)
{
__int64 result; // r0
SHIDWORD(a1) >>= 1;
__asm { MOV R0, R0,RRX }
return result;
}strcpy((char *)&dword_1005DF9A, "basic_string"); dword_1005DF9A = 0xADB0A3A3;
dword_1005DF9E = 0xBCB499A6;
dword_1005DFA2 = 0xABA5A3BB;
LOBYTE(dword_1005DF9A) = 'b';
BYTE1(dword_1005DF9A) ^= 0xC2u;
HIWORD(dword_1005DF9A) = 'is';
LOBYTE(dword_1005DF9E) = 'c';
BYTE1(dword_1005DF9E) ^= 0xC6u;
HIWORD(dword_1005DF9E) = 'ts';
LOBYTE(dword_1005DFA2) = 'r';
BYTE1(dword_1005DFA2) ^= 0xCAu;
HIWORD(dword_1005DFA2) = 'gn';
byte_1005DFA6 = 0;__int64 __fastcall sub_181450634(__int64 a1, __int64 a2, __int64 a3)
{
Block_layout_18145064C blk; // [xsp+0h] [xbp-30h]
blk.isa = _NSConcreteStackBlock;
*(_QWORD *)&blk.flags = 0x42000000LL;
blk.invoke = sub_181450694;
blk.descriptor = (Block_descriptor_1 *)&unk_1B0668958;
blk.lvar1 = *(_QWORD *)(a1 + 32);
blk.lvar2 = a3;
return sub_18144BD0C(a2, &blk);
}__int64 __fastcall sub_181450634(__int64 a1, __int64 a2, __int64 a3)
{
void *(*v4)[32]; // [xsp+0h] [xbp-30h]
__int64 v5; // [xsp+8h] [xbp-28h]
__int64 (__fastcall *v6)(); // [xsp+10h] [xbp-20h]
void *v7; // [xsp+18h] [xbp-18h]
__int64 v8; // [xsp+20h] [xbp-10h]
__int64 v9; // [xsp+28h] [xbp-8h]
v4 = _NSConcreteStackBlock;
v5 = 1107296256LL;
v6 = sub_181450694;
v7 = &unk_1B0668958;
v8 = *(_QWORD *)(a1 + 32);
v9 = a3;
return sub_18144BD0C(a2, &v4);
} gettimeofday(&tv, 0);
v0 = 90 * (v3 / 1000 + 1000LL * *(_QWORD *)&tv);
if ( v0 < 0xFFFFFFFFFFFFFFFFLL )
stamp = 90 * (v3 / 1000 + 1000LL * *(_QWORD *)&tv); gettimeofday(&tv, 0);
v0 = 1000LL * (unsigned int)tv.tv_usec;
HIDWORD(v0) = (unsigned __int64)(1000LL * *(_QWORD *)&tv) >> 32;
v1 = 90LL * (unsigned int)(v4 / 1000 + v0);
HIDWORD(v1) = (unsigned __int64)(90 * (v4 / 1000 + v0)) >> 32;
if ( HIDWORD(v1) < 0xFFFFFFFF || -1 == HIDWORD(v1) && (unsigned int)stamp > (unsigned int)v1 )
stamp = v1; mywcscpy();
if ( a3 < 0 )
v4 = -a3; if ( a3 >= 0 )
{
mywcscpy();
}
else
{
mywcscpy();
v4 = -a3;
} data_format = *p_data_format;
if ( *p_data_format < 0 || data_format > 13 )
{
errcode = 2;
SetError(&this->status, &errcode, "format not one of accepted types");
} data_format = *p_data_format;
if ( *p_data_format < 0 || data_format > 13 )
{
p_data_format = (int *)2;
SetError(&this->status, (errcode_t *)&p_data_format, "format not one of accepted types");
}void __cdecl test3(D7 *a1)
{
a1->f1(&a1->A1);
a1->f2(&a1->D3);
a1->f3(&a1->D5);
a1->f4(&a1->A4);
a1->f5(a1);
a1->f6(a1);
a1->g0(&a1->D5);
a1->g5(&a1->D5);
a1->g7(a1);
if ( a1 )
a1->~D7(a1);
}void __cdecl test3(D7 *a1)
{
(**((void (__cdecl ***)(char *))a1 + 12))((char *)a1 + 48);
(*(void (__cdecl **)(char *))(*((_DWORD *)a1 + 10) + 12))((char *)a1 + 40);
(**((void (__cdecl ***)(char *))a1 + 6))((char *)a1 + 24);
(**((void (__cdecl ***)(char *))a1 + 26))((char *)a1 + 104);
(**(void (__cdecl ***)(D7 *))a1)(a1);
(*(void (__cdecl **)(D7 *))(*(_DWORD *)a1 + 12))(a1);
(*(void (__cdecl **)(char *))(*((_DWORD *)a1 + 6) + 4))((char *)a1 + 24);
(*(void (__cdecl **)(char *))(*((_DWORD *)a1 + 6) + 16))((char *)a1 + 24);
(*(void (__cdecl **)(D7 *))(*(_DWORD *)a1 + 16))(a1);
if ( a1 )
(*(void (__cdecl **)(D7 *))(*(_DWORD *)a1 + 8))(a1);
}
f:
.set back_chain, -0x20
.set var_4, -4
stw r31, var_4(r1)
stwu r1, back_chain(r1)
mr r31, r1
stw r3, 0x14(r31)
mr r4, r3
cmpwi r3, 0
stw r4, 8(r31)
bgt loc_30
b loc_24
loc_24:
li r3, 0
stw r3, 0x18(r31)
b loc_88
loc_30:
li r3, 0
stw r3, 0x10(r31)
stw r3, 0xC(r31)
b loc_40
loc_40:
lwz r3, 0x14(r31)
lwz r4, 0xC(r31)
cmpw r4, r3
bge loc_7C
b loc_54
loc_54:
lwz r3, 0xC(r31)
mullw r3, r3, r3
lwz r4, 0x10(r31)
add r3, r4, r3
stw r3, 0x10(r31)
b loc_6C
loc_6C:
lwz r3, 0xC(r31)
addi r3, r3, 1
stw r3, 0xC(r31)
b loc_40
loc_7C:
lwz r3, 0x10(r31)
stw r3, 0x18(r31)
b loc_88
loc_88:
lwz r3, 0x18(r31)
addi r1, r1, 0x20
lwz r31, var_4(r1)
blr
# End of function fint __fastcall f(int a1)
{
int i; // [sp+Ch] [-14h]@3
int v3; // [sp+10h] [-10h]@3
if ( a1 )
return 0;
v3 = 0;
for ( i = 0; i < a1; ++i )
v3 += i * i;
return v3;
}# _DWORD c_eq_s(void)
.globl _Z6c_eq_sv
_Z6c_eq_sv:
.set back_chain, -0x10
.set var_8, -8
.set var_4, -4
.set sender_lr, 4
stwu r1, back_chain(r1)
mflr r0
stw r0, 0x10+sender_lr(r1)
stw r30, 0x10+var_8(r1)
stw r31, 0x10+var_4(r1)
mr r31, r1
bl c
mr r9, r3
extsh r30, r9
bl s
mr r9, r3
xor r9, r30, r9
cntlzw r9, r9
srwi r9, r9, 5
clrlwi r9, r9, 24
mr r3, r9
addi r11, r31, 0x10
lwz r0, 4(r11)
mtlr r0
lwz r30, -8(r11)
lwz r31, -4(r11)
mr r1, r11
blr
# End of function c_eq_s(void)bool c_eq_s(void)
{
int v0; // r30@1
v0 = c();
return v0 == s();
}.globl i_ge_uh
i_ge_uh:
.set back_chain, -0x10
.set var_4, -4
stwu r1, back_chain(r1)
stw r31, 0x10+var_4(r1)
mr r31, r1
lis r9, i@ha
lwz r9, i@l(r9)
mr r8, r9
srawi r9, r9, 0x1F
mr r7, r9
lis r9, uh@ha
addi r9, r9, uh@l
lwz r10, (uh+4 - uh)(r9)
lwz r9, 0(r9)
cmplw cr7, r9, r7
bgt cr7, loc_7028
cmplw cr7, r9, r7
bne cr7, loc_7020
cmplw cr7, r10, r8
bgt cr7, loc_7028
loc_7020:
li r9, 1
b loc_702C
loc_7028:
li r9, 2
loc_702C:
mr r3, r9
addi r11, r31, 0x10
lwz r31, -4(r11)
mr r1, r11
blr
# End of function i_ge_uhsigned int i_ge_uh()
{
signed int v0; // r9@2 7029 TYPED
if ( uh unsigned __int64)i )
v0 = 1;
else
v0 = 2;
return v0;
}
mr r3, r26 # set
bl .sigfillset
li r0, 0xAE
li r3, 2
mr r4, r26
mr r5, r29
li r6, 8
sc
mfcr r0
lwz r5, (off_F9A704C - dword_F9A7130)(r30) # sub_F9920A4 # start_routine
mr r4, r31 # attr
mr r6, r28 # arg
addi r3, r1, 0x180+var_54 # newthread
bl .pthread_create
li r0, 0xAE
mr r26, r3
mr r4, r29
li r3, 2
li r5, 0
li r6, 8
sc
mfcr r0
mr r3, r31 # attr
bl .pthread_attr_destroy...
sigset_t v36; // [sp+8h] [-178h]@47 F992C04 TYPED
sigset_t v37; // [sp+88h] [-F8h]@47 F992BEC TYPED
pthread_attr_t v38; // [sp+108h] [-78h]@47 F992BC4 TYPED
__int16 v39; // [sp+12Ch] [-54h]@47 F992C1C
...
_sigfillset(&v37);
v29 = linux_syscall(__NR_rt_sigprocmask, 2, &v37, &v36);
v30 = _pthread_create((pthread_t *)&v39, &v38, (void *(*)(void *))0x93C10018, v11);
v31 = linux_syscall(__NR_rt_sigprocmask, 2, &v36, 0);
_pthread_attr_destroy(&v38);.globl lldiv # weak
lldiv:
.set back_chain, -0x30
.set var_18, -0x18
.set var_14, -0x14
.set var_10, -0x10
.set var_C, -0xC
.set var_8, -8
.set var_4, -4
.set sender_lr, 4
stwu r1, back_chain(r1)
mflr r0
stw r28, 0x30+var_10(r1)
mr r28, r5
stw r29, 0x30+var_C(r1)
mr r29, r6
stw r31, 0x30+var_4(r1)
mr r5, r7
mr r31, r3
mr r6, r8
mr r3, r28
mr r4, r29
stw r0, 0x30+sender_lr(r1)
stw r26, 0x30+var_18(r1)
mr r26, r7
stw r27, 0x30+var_14(r1)
mr r27, r8
stw r30, 0x30+var_8(r1)
bl __divdi3
stw r3, 0(r31)
mr r5, r26
stw r4, 4(r31)
mr r6, r27
mr r3, r28
mr r4, r29
bl __moddi3
lwz r0, 0x30+sender_lr(r1)
stw r3, 8(r31)
mr r3, r31
stw r4, 0xC(r31)
mtlr r0
lwz r26, 0x30+var_18(r1)
lwz r27, 0x30+var_14(r1)
lwz r28, 0x30+var_10(r1)
lwz r29, 0x30+var_C(r1)
lwz r30, 0x30+var_8(r1)
lwz r31, 0x30+var_4(r1)
addi r1, r1, 0x30
blr
# End of function lldiv
__int64 *__fastcall lldiv(__int64 *result, int a2, __int64 a3, __int64 a4)
{
*result = a3 / a4;
result[1] = a3 % a4;
return result;
} .globl _x2y2m1f
_x2y2m1f:
lis r9, unk_20@ha
lfs f0, unk_20@l(r9)
fsub f12, f1, f0
fadd f0, f1, f0
fmul f0, f12, f0
fmadd f1, f1, f2, f0
blr
# End of function _x2y2m1fdouble __fastcall x2y2m1f(double a1, double a2)
{
return a1 * ((a1 - 1.0) * (a1 + 1.0)) + a2;
}# __int64 __fastcall int_u_mod_10()
.globl int_u_mod_10
int_u_mod_10:
.set back_chain, -0x20
.set var_C, -0xC
.set var_8, -8
.set var_4, -4
.set sender_lr, 4
stwu r1, back_chain(r1)
mflr r0
stw r0, 0x20+sender_lr(r1)
stw r29, 0x20+var_C(r1)
stw r30, 0x20+var_8(r1)
stw r31, 0x20+var_4(r1)
mr r31, r1
bl u
mr r10, r3
lis r9, -0x3334
ori r9, r9, 0xCCCD # 0xCCCCCCCD
mulhwu r9, r10, r9
srwi r9, r9, 3
mulli r9, r9, 0xA
subf r9, r9, r10
mr r30, r9
li r29, 0
mr r9, r29
mr r10, r30
mr r3, r9
mr r4, r10
addi r11, r31, 0x20
lwz r0, 4(r11)
mtlr r0
lwz r29, -0xC(r11)
lwz r30, -8(r11)
lwz r31, -4(r11)
mr r1, r11
blr
# End of function int_u_mod_10
__int64 __fastcall int_u_mod_10()
{
return u() % 0xAu;
}sub_498E:
se_mr r6, r3
se_mr r7, r4
se_add r7, r6
se_subi r7, 1
se_li r5, 0
se_b loc_49A2
# ---------------------------------------------------------------------------
loc_499A:
se_lbz r4, 0(r6)
se_add r5, r4
se_extzh r5
se_addi r6, 1
loc_49A2:
se_cmpl r6, r7
se_ble loc_499A
se_mr r7, r5
se_mr r3, r7
se_blr
# End of function sub_498Eint __fastcall sub_498E(unsigned __int8 *a1, int a2)
{
unsigned __int8 *v2; // r6@1 498F TYPED
int v3; // r5@1 4997
v2 = a1;
v3 = 0;
while ( v2 a1[a2 - 1] )
v3 = (unsigned __int16)(v3 + *v2++);
return v3;
}
# int __fastcall msdos_add_entry(struct inode *_dir, const unsigned __int8 *name, int is_dir, int is_hid,
int cluster, struct timespec *_ts, struct fat_slot_info *_sinfo)
msdos_add_entry:
.set back_chain, -0x50
.set de, -0x48
.set date, -0x28
.set time, -0x26
.set var_14, -0x14
.set sender_lr, 4
mflr r0
stw r0, sender_lr(r1)
bl _mcount
stwu r1, back_chain(r1)
mflr r0
stmw r27, 0x50+var_14(r1)
stw r0, 0x50+sender_lr(r1)
subfic r5, r5, 0
mr. r30, r6
lwz r0, 0(r4)
subfe r10, r10, r10
mr r31, r3
lwz r11, 4(r4)
lwz r3, 0x1C(r3)
clrrwi r10, r10, 4
mr r29, r7
lhz r5, 8(r4)
addi r10, r10, 0x20
mr r28, r8
lbz r6, 0xA(r4)
mr r27, r9
lwz r3, 0x2B8(r3)
stw r0, 0x50+de(r1)
stw r11, 0x50+de.name+4(r1)
sth r5, 0x50+de.name+8(r1)
stb r6, 0x50+de.name+0xA(r1)
stb r10, 0x50+de.attr(r1)
beq loc_728
ori r10, r10, 2
li r9, 0
li r7, 0
addi r6, r1, 0x50+date
stb r10, 0x50+de.attr(r1)
addi r5, r1, 0x50+time
mr r4, r8
stb r9, 0x50+de.lcase(r1)
bl fat_time_unix2fat
lhz r9, 0x50+time(r1)
li r10, 0
sth r10, 0x50+de.adate(r1)
sth r9, 0x50+de.time(r1)
lhz r9, 0x50+date(r1)
sth r10, 0x50+de.cdate(r1)
sth r10, 0x50+de.ctime(r1)
stb r10, 0x50+de.ctime_cs(r1)
sth r9, 0x50+de.date(r1)
loc_698:
addi r10, r1, 0x50+de.start
srawi r9, r29, 0x10
sthbrx r29, r0, r10
addi r10, r1, 0x50+de.starthi
mr r6, r27
sthbrx r9, r0, r10
li r5, 1
li r9, 0
addi r4, r1, 0x50+de
mr r3, r31
stw r9, 0x50+de.size(r1)
bl fat_add_entries
mr. r30, r3
bne loc_710
lwz r10, 0(r28)
lwz r11, 4(r28)
stw r10, 0x48(r31)
stw r10, 0x50(r31)
stw r11, 0x4C(r31)
stw r11, 0x54(r31)
lwz r9, 0x1C(r31)
lwz r9, 0x34(r9)
andi. r10, r9, 0x90
bne loc_704
lwz r9, 0xC(r31)
andi. r10, r9, 0x41
beq loc_768
loc_704:
mr r3, r31 # struct inode *
li r30, 0
bl fat_sync_inode
loc_710:
mr r3, r30
lwz r0, 0x50+sender_lr(r1)
lmw r27, 0x50+var_14(r1)
addi r1, r1, 0x50
mtlr r0
blr
# ---------------------------------------------------------------------------
loc_728:
li r7, 0
addi r6, r1, 0x50+date
stb r30, 0x50+de.lcase(r1)
addi r5, r1, 0x50+time
mr r4, r8
bl fat_time_unix2fat
li r9, 0
sth r30, 0x50+de.adate(r1)
stb r9, 0x50+de.ctime_cs(r1)
lhz r9, 0x50+time(r1)
sth r30, 0x50+de.cdate(r1)
sth r9, 0x50+de.time(r1)
lhz r9, 0x50+date(r1)
sth r30, 0x50+de.ctime(r1)
sth r9, 0x50+de.date(r1)
b loc_698
# ---------------------------------------------------------------------------
loc_768:
mr r3, r31 # struct inode *
li r4, 7
bl __mark_inode_dirty
mr r3, r3
lwz r0, 0x50+sender_lr(r1)
lmw r27, 0x50+var_14(r1)
addi r1, r1, 0x50
mtlr r0
blr
# End of function msdos_add_entryint __fastcall msdos_add_entry(struct inode *dir, const unsigned __int8 *name, int is_dir, int is_hid,
int cluster, struct timespec *ts, struct fat_slot_info *sinfo)
{
__int16 zero; // r30@1 601
bool not_hidden; // cr34@1 601 TYPED
int v10; // r11@1 611
signed int v11; // r10@1 619 TYPED
__int16 v13; // r5@1 621
__u8 node_attrs; // r10@1 625 TYPED
__u8 v16; // r6@1 62D TYPED
struct msdos_sb_info *sbi; // r3@1 635 TYPED
int err; // r30@3 6C9 TYPED
__time_t sec; // r10@4 6D1 TYPED
__syscall_slong_t nsec; // r11@4 6D5 TYPED
struct msdos_dir_entry de; // [sp+8h] [-48h]@1 639 TYPED
__le16 date; // [sp+28h] [-28h]@2 670 TYPED
__le16 time; // [sp+2Ah] [-26h]@2 670 TYPED
zero = is_hid;
not_hidden = is_hid == 0;
v10 = *((_DWORD *)name + 1);
v11 = (unsigned int)is_dir <= 0 ? 0 : -16;
v13 = *((_WORD *)name + 4);
node_attrs = v11 + ATTR_ARCH; // ATTR_ARCH or ATTR_DIR
v16 = name[10];
sbi = (struct msdos_sb_info *)dir->i_sb->s_fs_info;
*(_DWORD *)&de.name[0] = *(_DWORD *)name; // memcpy(&de.name[0], name, 12);
*(_DWORD *)&de.name[4] = v10; // ...
*(_WORD *)&de.name[8] = v13; // ...
de.name[10] = v16;
de.attr = node_attrs;
if ( not_hidden )
{
de.lcase = zero; // = 0
fat_time_unix2fat(sbi, ts, &time, &date, 0);
de.adate = zero;
de.ctime_cs = 0;
de.cdate = zero;
de.time = time;
de.ctime = zero;
de.date = date;
}
else
{
de.attr = node_attrs | ATTR_HIDDEN;
de.lcase = 0;
fat_time_unix2fat(sbi, ts, &time, &date, 0);
de.adate = 0;
de.time = time;
de.cdate = 0;
de.ctime = 0;
de.ctime_cs = 0;
de.date = date;
}
de.start = _byteswap_ushort(cluster);
de.starthi = _byteswap_ushort(HIWORD(cluster));
de.size = 0;
err = fat_add_entries(dir, &de, 1, sinfo);
if ( err )
return err;
sec = ts->tv_sec;
nsec = ts->tv_nsec;
dir->i_mtime.tv_sec = ts->tv_sec;
dir->i_ctime.tv_sec = sec;
dir->i_mtime.tv_nsec = nsec;
dir->i_ctime.tv_nsec = nsec;
if ( dir->i_sb->s_flags & (MS_DIRSYNC|MS_SYNCHRONOUS) || dir->i_flags & (S_DIRSYNC|S_SYNC) )
{
err = 0;
fat_sync_inode(dir);
return err;
}
_mark_inode_dirty(dir);
return 0;
}