一道经典面试题的不同解法

该题答案整理于看雪论坛:
原文地址:http://bbs.pediy.com/showthread.php?t=104954

原题这样的,要求在下面的*处添加代码,输出helloworld,不允许修改其他地方:

#include "stdio.h"
void print()
{
    *
}

void main()
{
}

解答的方式很多种,根本原因是让程序先执行print(),然后在其中输出hellowolrd。反正是各种诡异的方法,下面一一讲说:

方法1:

#include "stdio.h"

void print()
{    
  #pragma comment(linker, "/entry:print")
  #pragma comment(linker, "/SECTION:.text,REW" )
  int mainCRTStartup();
  void main();

  __asm
  {
    MOV   EAX,  OFFSET main
    MOV   BYTE PTR[EAX], 0xB8  //MOV  EAX, 0x
    MOV   DWORD PTR[EAX+1], OFFSET SHOWSTRING
    MOV   WORD PTR[EAX+5], 0xE0FF // JMP  EAX
  }

  mainCRTStartup();

SHOWSTRING:
  printf ("i am MentalDease
");
  getchar();
  
}

void main()
{
}

方法2:

#include "stdio.h"

void print()
{
  #pragma comment(linker, "/entry:print")

  void main();

  __asm
  {
      push offset main
  }
  puts ("Hello world!
");
  __asm
  {
      ret
  }

}

void main()
{
 
}

方法3:

#include "stdio.h"

void print()
{
  #pragma comment(linker, "/entry:print")
 #pragma comment(lib, "msvcrt.lib")
  puts("hello world
");

}
void  main()
{

}

方法4:

#include <stdio.h> 

void print() 
{
  } 
  void main() 
  { 
  printf("Hello, World
"); 
  #define main AnyUnusedFunctionName  
  } 

void main() 
{ 
   
} 

方法5:

#include "stdio.h"

void print()
{
  }
  int i = printf("%s","Hello,world"); 
  void a()
  {
}


void main()
{
} 

方法6:

#include "stdio.h"
void print()
{    
  #pragma comment(linker, "/entry:print")
  #pragma comment(lib, "msvcrt.lib")
  void main();
  printf ("Hello world!");
  main();  
}
void main()
{
} 

方法7:

#include "stdio.h"



void print()
{
  printf("Hello world");} void main(){print();}/*
}

int main()
{
  return 0;
} 

方法8:

void print()
{
    printf("hello world
");

    #define main main(){print();} void null
}

void main()
{

}

方法9:

#include "stdio.h"
void print()
{
  }
  void main()
  {
    printf("Hello World");
  }
  #define main a
  void fun(){
}

void main()
{
}
原文地址:https://www.cnblogs.com/lfsblack/p/3873977.html