Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* This file has been generated by the Hex-Rays decompiler.
- Copyright (c) 2007-2017 Hex-Rays <info@hex-rays.com>
- Detected compiler: GNU C++
- */
- #include <stdio.h>
- //-------------------------------------------------------------------------
- // Function declarations
- int syscall_wrapper(int a1);
- int do_exit();
- int do_write();
- int do_read();
- int do_open();
- int do_close();
- int read_from_file();
- int print_string(int a1);
- int print_line(int a1);
- signed int parse_opt(int a1);
- int parse_args();
- int do_simple_echo();
- int do_run();
- int mystery1(char *a1);
- signed int mystery2(char *a1, char a2);
- signed int streq(char *a1, char *a2, int a3);
- char * mystery4(char *a1, char *a2, int a3);
- _Bool mystery5(char a1);
- char * mystery6(char *a1);
- int mystery7(char *a1);
- signed int mystery8(int a1, int a2, unsigned int a3);
- unsigned int mystery9(int a1, int a2, unsigned int a3, char *a4);
- //-------------------------------------------------------------------------
- // Data declarations
- char unk_80488D8; // weak
- char unk_80488DB; // weak
- char unk_80488DE; // weak
- char unk_80488E1; // weak
- int edata; // weak
- int wat2; // weak
- char g_wat3; // weak
- char g_wat4; // weak
- char g_wat5; // weak
- int g_wat6; // weak
- int g_wat7; // weak
- int g_wat8; // weak
- //----- (08048100) --------------------------------------------------------
- int syscall_wrapper(int a1)
- {
- int result; // eax
- result = a1;
- __asm ("int $0x80");
- return result;
- }
- //----- (0804812C) --------------------------------------------------------
- int do_exit()
- {
- return syscall_wrapper(1);
- }
- //----- (08048144) --------------------------------------------------------
- int do_write()
- {
- return syscall_wrapper(4);
- }
- //----- (0804815E) --------------------------------------------------------
- int do_read()
- {
- return syscall_wrapper(3);
- }
- //----- (08048178) --------------------------------------------------------
- int do_open()
- {
- return syscall_wrapper(5);
- }
- //----- (08048192) --------------------------------------------------------
- int do_close()
- {
- return syscall_wrapper(6);
- }
- //----- (080481AA) --------------------------------------------------------
- int read_from_file()
- {
- int v0; // ST18_4
- if ( do_open() < 0 )
- do_exit();
- v0 = do_read();
- do_close();
- return v0;
- }
- //----- (080481FE) --------------------------------------------------------
- int print_string(int a1)
- {
- mystery1((char *)a1);
- return do_write();
- }
- //----- (0804822C) --------------------------------------------------------
- int print_line(int a1)
- {
- int result; // eax
- if ( mystery2((char *)a1, 10) == -2 )
- result = print_string(a1);
- else
- result = do_write();
- return result;
- }
- //----- (0804827C) --------------------------------------------------------
- signed int parse_opt(int a1)
- {
- if ( mystery1((char *)a1) != 2 )
- do_exit();
- if ( !streq((char *)a1, &unk_80488D8, 2) ) // -f
- return 8;
- if ( !streq((char *)a1, &unk_80488DB, 2) ) // -s
- return 2;
- if ( !streq((char *)a1, &unk_80488DE, 2) ) // -e
- return 4;
- if ( streq((char *)a1, &unk_80488E1, 2) ) // -i
- return -2;
- return 1;
- }
- //----- (08048329) --------------------------------------------------------
- int parse_args()
- {
- int result; // eax
- signed int v1; // [esp+0h] [ebp-18h]
- signed int v2; // [esp+0h] [ebp-18h]
- int v3; // [esp+0h] [ebp-18h]
- int v4; // [esp+0h] [ebp-18h]
- signed int v5; // [esp+4h] [ebp-14h]
- int v6; // [esp+8h] [ebp-10h]
- unsigned int i; // [esp+Ch] [ebp-Ch]
- v6 = 0;
- for ( i = 1; i < edata; ++i )
- {
- if ( **(char **)(4 * i + wat2) == 45 )
- {
- v5 = parse_opt(*(int *)(4 * i + wat2));
- if ( v5 == -2 ) // -i
- do_exit();
- if ( v6 & v5 )
- do_exit();
- v6 |= v5;
- if ( v5 == 2 ) // -s
- {
- v3 = mystery7(*(char **)(4 * (i + 1) + wat2));
- if ( v3 == -1 )
- do_exit();
- g_wat7 = v3;
- }
- else if ( v5 > 2 )
- {
- if ( v5 == 4 ) // -e
- {
- v4 = mystery7(*(char **)(4 * (i + 1) + wat2));
- if ( v4 == -1 )
- do_exit();
- g_wat8 = v4;
- }
- else if ( v5 == 8 ) // -f
- {
- v2 = mystery1(*(char **)(4 * (i + 1) + wat2));
- if ( v2 > 31 )
- do_exit();
- mystery4(&g_wat4, *(char **)(4 * (i + 1) + wat2), v2);
- }
- }
- else if ( v5 == 1 )
- {
- v1 = mystery1(*(char **)(4 * (i + 1) + wat2));
- if ( v1 > 31 )
- do_exit();
- mystery4(&g_wat3, *(char **)(4 * (i + 1) + wat2), v1);
- }
- ++i;
- }
- }
- result = v6;
- g_wat6 = v6;
- return result;
- }
- // 804A000: using guessed type int edata;
- // 804A004: using guessed type int wat2;
- // EDBA060: using guessed type int g_wat6;
- // EDBA064: using guessed type int g_wat7;
- // EDBA068: using guessed type int g_wat8;
- //----- (08048546) --------------------------------------------------------
- int do_simple_echo()
- {
- unsigned int v0; // eax
- int v2[8]; // [esp+Ch] [ebp-24h]
- int v3; // [esp+2Ch] [ebp-4h]
- v0 = 0;
- do
- {
- v2[v0] = 0;
- ++v0;
- }
- while ( v0 < 8 );
- v3 = 0;
- v3 = do_read();
- return do_write();
- }
- // 8048546: using guessed type int var_24[8];
- //----- (08048598) --------------------------------------------------------
- int do_run()
- {
- int result; // eax
- int v1; // [esp+Ch] [ebp-Ch]
- if ( g_wat6 & 1 )
- v1 = read_from_file();
- else
- v1 = do_read();
- *(char *)(v1 + 134520928) = 0;
- if ( !(g_wat6 & 2) )
- g_wat7 = 0;
- if ( !(g_wat6 & 4) )
- g_wat8 = v1;
- result = g_wat6 & 8;
- if ( g_wat6 & 8 )
- result = mystery9((int)&g_wat5, g_wat7, g_wat8, &g_wat4);
- return result;
- }
- // EDBA060: using guessed type int g_wat6;
- // EDBA064: using guessed type int g_wat7;
- // EDBA068: using guessed type int g_wat8;
- //----- (08048652) --------------------------------------------------------
- int main(int a1)
- {
- void *retaddr; // [esp+Ch] [ebp+4h]
- edata = (int)retaddr;
- wat2 = (int)&a1;
- if ( retaddr == (void *)1 )
- {
- do_simple_echo();
- }
- else
- {
- parse_args();
- do_run();
- }
- return do_exit();
- }
- // 804A000: using guessed type int edata;
- // 804A004: using guessed type int wat2;
- //----- (080486A0) --------------------------------------------------------
- int mystery1(char *a1)
- {
- char *v1; // edi
- int result; // eax
- int v3; // ebx
- v1 = a1;
- result = 0;
- v3 = 0;
- while ( 1 )
- {
- v3 = *v1;
- if ( !v3 )
- break;
- ++result;
- ++v1;
- }
- return result;
- }
- //----- (080486B8) --------------------------------------------------------
- signed int mystery2(char *a1, char a2)
- {
- int v2; // ecx
- signed int result; // eax
- char *i; // edi
- v2 = mystery1(a1);
- result = 0;
- for ( i = a1; *i != a2; ++i )
- ++result;
- if ( !v2 )
- result = -1;
- return result;
- }
- //----- (080486E7) --------------------------------------------------------
- signed int streq(char *a1, char *a2, int a3)
- {
- char *v3; // ebx
- char *v4; // edx
- int v5; // ecx
- v3 = a1;
- v4 = a2;
- v5 = a3;
- while ( *v3 == *v4 )
- {
- ++v3;
- ++v4;
- if ( !--v5 )
- return 0;
- }
- return 1;
- }
- //----- (0804870A) --------------------------------------------------------
- char * mystery4(char *a1, char *a2, int a3)
- {
- char *result; // eax
- char *v4; // ebx
- int v5; // ecx
- result = a1;
- v4 = a2;
- v5 = a3;
- do
- {
- *result++ = *v4++;
- --v5;
- }
- while ( v5 );
- return result;
- }
- //----- (08048722) --------------------------------------------------------
- _Bool mystery5(char a1)
- {
- return a1 >= 48 && a1 <= 57;
- }
- //----- (0804873E) --------------------------------------------------------
- char * mystery6(char *a1)
- {
- int v1; // eax
- int v2; // ecx
- void *v3; // esp
- char *v4; // ebx
- int savedregs; // [esp+0h] [ebp+0h]
- v1 = mystery1(a1);
- v2 = v1;
- v3 = alloca(v1);
- v4 = (char *)&savedregs - v1;
- do
- *v4++ = a1[v2-- - 1];
- while ( v2 );
- return mystery4(a1, (char *)&savedregs - v1, v1);
- }
- //----- (08048772) --------------------------------------------------------
- int mystery7(char *a1)
- {
- int v1; // ST0C_4
- int v2; // ecx
- int v3; // ebx
- int v4; // ecx
- int result; // eax
- int v6; // [esp+0h] [ebp-4h]
- v6 = 0;
- v1 = mystery1(a1);
- mystery6(a1);
- v2 = v1;
- v3 = 0;
- while ( 1 )
- {
- v3 = a1[v2 - 1];
- if ( !mystery5(v3) )
- break;
- v3 = v3 - 48;
- result = v3 + 10 * v6;
- v6 = v3 + 10 * v6;
- v2 = v4 - 1;
- if ( !v2 )
- return result;
- }
- return -1;
- }
- //----- (080487DD) --------------------------------------------------------
- signed int mystery8(int a1, int a2, unsigned int a3)
- {
- unsigned int v4; // [esp+8h] [ebp-8h]
- int v5; // [esp+Ch] [ebp-4h]
- v5 = 0;
- v4 = 0;
- while ( v4 < a3 && *(char *)(a1 + v5) != 10 && *(char *)(a1 + v5) )
- {
- if ( *(char *)(a1 + v5) == *(char *)(a2 + v4) )
- ++v4;
- else
- v4 = 0;
- if ( v4 == a3 )
- return 1;
- ++v5;
- }
- return 0;
- }
- //----- (08048856) --------------------------------------------------------
- unsigned int mystery9(int a1, int a2, unsigned int a3, char *a4)
- {
- unsigned int result; // eax
- int length; // [esp+4h] [ebp-14h]
- int v6; // [esp+8h] [ebp-10h]
- unsigned int i; // [esp+Ch] [ebp-Ch]
- v6 = a2;
- length = mystery1(a4);
- for ( i = a2; ; ++i )
- {
- result = i;
- if ( i >= a3 )
- break;
- if ( *(char *)(a1 + i) == 10 )
- {
- if ( mystery8(a1 + v6, (int)a4, length) != 0 )
- print_line(a1 + v6);
- v6 = i + 1;
- }
- }
- return result;
- }
- // ALL OK, 23 function(s) have been successfully decompiled
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement