<p>在下面有*的地方添加代码,显示出hello world!<br>#include "stdio.h"</p>
<p>void print()<br>{<br>*<br>}</p>
<p>void main()<br>{<br>}</p>
<p>答案:</p>
<p>一、用宏的方式<br>#include <stdio.h><br>void print(void)<br>{<br>#define main main(void){ print();} /<br>void __main<br>printf("Hello world/n");<br>}<br>void main(void)<br>{<br>}</p>
<p>二、用重定向入口点的方式<br>#include "stdio.h"</p>
<p>void print()<br>{<br>#pragma comment(linker, "/entry:print")<br>#pragma comment(lib, "msvcrt.lib")<br>puts ("hello world/n");<br>printf ("hello world/n");<br>}</p>
<p>三、用重定向和HOOK main的方式<br>#include "stdio.h"<br>extern "C" int __cdecl mainCRTStartup(void); //注意:若源文件是.c结尾的话,不需要这一句<br>void print()<br>{ <br>#pragma comment(linker, "/entry:/"print/"")<br>#pragma comment(linker, "/SECTION:.text,REW" )<br>//int mainCRTStartup();<br>void main();<br><br>__asm<br>{<br>MOV EAX, OFFSET main<br>MOV BYTE PTR[EAX], 0xB8 //MOV EAX, 0x<br>MOV DWORD PTR[EAX+1], OFFSET SHOWSTRING<br>MOV WORD PTR[EAX+5], 0xE0FF // JMP EAX<br>}<br><br>mainCRTStartup();<br><br>SHOWSTRING:<br>printf ("hello,world/n");<br>getchar();<br><br>}</p>
<p>void main()<br>{<br>}</p>
<p></p>
<p>看似简单,实则复杂,这才是好题目!感谢提供该题的朋友!</p>
<p>void print()<br>{<br>*<br>}</p>
<p>void main()<br>{<br>}</p>
<p>答案:</p>
<p>一、用宏的方式<br>#include <stdio.h><br>void print(void)<br>{<br>#define main main(void){ print();} /<br>void __main<br>printf("Hello world/n");<br>}<br>void main(void)<br>{<br>}</p>
<p>二、用重定向入口点的方式<br>#include "stdio.h"</p>
<p>void print()<br>{<br>#pragma comment(linker, "/entry:print")<br>#pragma comment(lib, "msvcrt.lib")<br>puts ("hello world/n");<br>printf ("hello world/n");<br>}</p>
<p>三、用重定向和HOOK main的方式<br>#include "stdio.h"<br>extern "C" int __cdecl mainCRTStartup(void); //注意:若源文件是.c结尾的话,不需要这一句<br>void print()<br>{ <br>#pragma comment(linker, "/entry:/"print/"")<br>#pragma comment(linker, "/SECTION:.text,REW" )<br>//int mainCRTStartup();<br>void main();<br><br>__asm<br>{<br>MOV EAX, OFFSET main<br>MOV BYTE PTR[EAX], 0xB8 //MOV EAX, 0x<br>MOV DWORD PTR[EAX+1], OFFSET SHOWSTRING<br>MOV WORD PTR[EAX+5], 0xE0FF // JMP EAX<br>}<br><br>mainCRTStartup();<br><br>SHOWSTRING:<br>printf ("hello,world/n");<br>getchar();<br><br>}</p>
<p>void main()<br>{<br>}</p>
<p></p>
<p>看似简单,实则复杂,这才是好题目!感谢提供该题的朋友!</p>

被折叠的 条评论
为什么被折叠?



