64,648
社区成员
发帖
与我相关
我的任务
分享
typedef unsigned short ushort;
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
int fun1(const char* arg1, const char* arg2)
{
for( ; *arg1 && *arg2; ++arg1, ++arg2)
{
if(*arg1 == *arg2)
{
continue;
}
if((*arg2 - *arg1 == 0x20) ||
(*arg1 - *arg2 == 0x20))
{
if(*arg1 >= 0x41 && *arg1 <= 0x7A &&
*arg2 >= 0x41 && *arg2 <= 0x7A)
{
continue;
}
}
return *arg2 - *arg1;
}
return *arg2 - *arg1;
}
void* __stdcall fun2(void* arg1, const char* arg2)
{
char* var1 = (char*)arg1;
char* var2 = var1 + *(uint*)(var1 + 0x3c);
uint var3 = *(uint*)(var2 + 0x18 + 0x38);
char* var4 = (char*)(var1 +
*(uint*)(var2 + 0x18 + 0x60));
uint var5 = *(uint*)(var2 + 0x18 + 0x64);
uint var6 = *(uint*)(var4 + 0x18);
uint* var7 = (uint*)((char*)var1 + *(uint*)(var4 + 0x20));
char* var8;
ushort var9;
int var10;
if(!arg1)
{
return 0;
}
if(*(ushort*)var1 != 0x5A4D)
{
return 0;
}
if(*(uint*)var2 != 0x00004550)
{
return 0;
}
if(var4 < var1 ||
var4 > var1+var3)
{
return 0;
}
if(var5 > var3)
{
return 0;
}
if((uint)var7 < (uint)var1 || (uint)var7 > (uint)var1 + var3)
{
return 0;
}
for(var10 = 0; var10!=var6; ++var10)
{
var8 = var1 + var7[var10];
if(!fun1(var8, arg2))
{
var9 = ((ushort*) (var1 + *(uint*)(var4 + 0x24)) )[var10];
return (void*) (var1 +
((uint*)(var1 + *(uint*)(var4 + 0x1C)))[var9]
);
}
}
return 0;
}
int fun3(char* arg1, char* arg2, int arg3)
{
int var1,var2 = *(ushort*)arg1 / 2;
short* var3 = *(short**)(arg1+0x04);
if(var2 >= arg3)
{
return 0;
}
for(var1=0; var1!=var2; ++var1)
{
arg2[var1] = (char)var3[var1];
}
arg2[var1] = 0;
return 1;
}
void* fun5()
{
void* var1;
__asm
{
mov eax, dword ptr fs:[18h]
mov eax, dword ptr [eax + 30h]
mov var1, eax
}
return var1;
}
void* fun4(const char* arg1)
{
char var1[100];
char* var2 = (char*)fun5();
char* var3 = (char*)(*(uint*)(*(uint*)(var2 + 0x0C) + 0x18));
char* var4 = var3;
char* var5 = var4;
char* var6;
if(arg1 == 0)
{
return (void*)(*(uint*)(var2 + 0x08));
}
var5 -= 0x08;
fun3(var5 + 0x2C, var1, 100);
if(!fun1(var1, arg1))
{
return (void*)*(uint*)(var5 + 0x18);
}
for(var6 = (char*)*(uint*)(var3 + 0x04);
var6!=var3;
var6 = (char*)*(uint*)(var6 + 0x04))
{
var5 = var6;
var5 -= 0x08;
fun3(var5 + 0x2C, var1, 100);
if(!fun1(var1, arg1))
{
return (void*)*(uint*)(var5 + 0x18);
}
}
return 0;
}
const char g_var1[] = {0x4B, 0x65, 0x72, 0x6E, 0x65, 0x6C, 0x33, 0x32, 0x2E, 0x64, 0x6C, 0x6C, 0x00};
const char g_var2[] = {0x4C, 0x6F, 0x61, 0x64, 0x4C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x41, 0x00};
const char g_var3[] = {0x55, 0x73, 0x65, 0x72, 0x33, 0x32, 0x2E, 0x64, 0x6C, 0x6C, 0x00};
const char g_var4[] = {0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x6F, 0x78, 0x41, 0x00};
const char g_var5[] = {0x00, 0xD5, 0xE2, 0xBE, 0xF8, 0xB6, 0xD4, 0xCA, 0xC7, 0xD5, 0xE6, 0xB5, 0xC4, 0xA3, 0xA1, 0x00};
int main()
{
void* var1 = fun4(g_var1);
void* (__stdcall* var2)(const char*) = (void* (__stdcall*)(const char*))
fun2(var1, g_var2);
void* var3 = var2(g_var3);
int (__stdcall* var4)(int,const char*,const char*,int) =
(int (__stdcall*)(int,const char*,const char*,int))fun2(var3, g_var4);
var4(0,g_var5 + 1,g_var5,0);
return 0;
}
/**
* 请完成以下复制字符串的函数,注意不能调用其他函数!
* 此题将作为最终的面试成绩
*/
void strcpy_(char * pstr, char * pfrom) {int
I_do_not_know_how_to_write_this_program,
but_I_have_lost_my_job_for_nearly_3_months,
OHHHH_please_show_mercy_on_me, I_can_not_live_without_this_offer,
I_know_my_skill_is_pool, so_I_just_want, Emmmmm, Salary = 03500U,
I_will_THANK_YOU_very_much, Dear_Sir;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; ;;; ;;; ;;;; ;;;; ;;; ;;; ;; ;;;; ;;;; ;;;;;
;;;;;; ;;;;; ;;; ;;; ;;; ;;; ;; ;;; ; ;;;;; ;;;; ;;;;;
;;;;;; ;;;;; ;;; ;;; ; ; ;;; ;;;;;; ;;;; ;;;;;
;;;;;; ;;;;; ;;; ;;; ;;; ;;; ;; ;;; ; ;;;;; ;;;; ;;;;;
;;;;;; ;;;;; ;;; ;;; ;;; ;;; ;;; ;;; ;; ;;;;; ;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; ;;;;;; ;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}