看到的一道面试题,很有趣,与大家分享zt

<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值