在下面有*的地方添加代码,显示出hello world!
#include "stdio.h"
void print()
{
*
}
void main()
{
}
答案:
一、用宏的方式
#include <stdio.h>
void print(void)
{
#define main main(void){ print();} /
void __main
printf("Hello world/n");
}
void main(void)
{
}
二、用重定向入口点的方式
#include "stdio.h"
void print()
{
#pragma comment(linker, "/entry:print")
#pragma comment(lib, "msvcrt.lib")
puts ("hello world/n");
printf ("hello world/n");
}
三、用重定向和HOOK main的方式
#include "stdio.h"
extern "C" int __cdecl mainCRTStartup(void); //注意:若源文件是.c结尾的话,不需要这一句
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 ("hello,world/n");
getchar();
}
void main()
{
}
看似简单,实则复杂,这才是好题目!感谢提供该题的朋友!