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


    该题答案整理于看雪论坛:
    原文地址: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()
    {
    }
  • 相关阅读:
    微服务架构 技能图谱skill-map
    LiveTelecast直播平台技术图谱skill-map
    OpenResty 技术图谱skill-map
    HearthBuddy 召唤随从的问题
    五子棋AI教程
    HearthAgent A Hearthstone agent
    Monte Carlo Tree Search – beginners guide
    Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)
    Add hyperlink to textblock wpf
    What do you do as a DevOps?
  • 原文地址:https://www.cnblogs.com/lfsblack/p/3873977.html
Copyright © 2020-2023  润新知