codeblocks和vscode编译时弹出不支持的16位程序解决方案

Posted jawen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeblocks和vscode编译时弹出不支持的16位程序解决方案相关的知识,希望对你有一定的参考价值。

困扰我多年的问题,用vscode也会出现类似的错误。网上的许多方案都是下载360,火绒类似的方案,但是治标不治本,过一段时间又不好了。其根本原因是映像劫持造成的,可以理解成病毒,下面我主要介绍一下:

映像劫持的根本原因就是被恶意程序篡改了注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options。

假如在这里新建一个子项notepad.exe,再在这子项里新建一个REG_SZ的名字为Debugger,内容为cmd.exe的值项。这样就会实现映像劫持了,这样你每次用记事本的方式打开文本文件时,却打开的是命令提示符的窗口。相信你也遇到过类似的情况吧。一下木马,病毒就是通过这个让杀毒软件和防火墙之类的应用程序,启动不起来。

Debugger参数的本意是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序,曾经调试过程序的朋友也许会有一个疑问,既然程序启动时都要经过IFEO这一步,那么在调试器里点击启动刚被Debugger参数送进来的程序时岂不是又会因为这个法则的存在而导致再次产生一个调试器进程?微软并不是傻子,他们理所当然的考虑到了这一点,因此一个程序启动时是否会调用到IFEO规则取决于它是否“从命令行调用”的,那么“从命令行调用”该怎么理解呢?例如我们在命令提示符里执行taskmgr.exe,这就是一个典型的“从命令行调用”的执行请求,而我们在点击桌面上、普通应用程序菜单里的taskmgr.exe时,系统都会将其视为由外壳程序Explorer.exe 传递过来的执行请求,这样一来,它也属于“从命令行调用”的范围而触发IFEO规则了。为了与用户操作区分开来,系统自身加载的程序、调试器里启动的程 序,它们就不属于“从命令行调用”的范围,从而绕开了IFEO,避免了这个加载过程无休止的循环下去。由于Debugger参数的这种特殊作用,它又被称为“重定向”(Redirection), 而利用它进行的攻击,又被称为“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是称呼不同,实际上都是一样的技术手段。

这里介绍一个最简单粗暴的办法 cmd -> regedit -> 找到image file execution options 删除360提示的文件夹 然后设置权限 获得system完全控制的权限 然后删除这个文件夹  最后取消image file execution options的system用户的所有权限,这样一来外界就无法对此进行修改了。

以上是关于codeblocks和vscode编译时弹出不支持的16位程序解决方案的主要内容,如果未能解决你的问题,请参考以下文章

VScode配置好C语言编译调试环境后 按调试时弹出的输出窗口还不到一秒就自动闪退关闭 这是怎么回事

vscode编译不了marlin固件

vscode保存代码自动编译两次是怎么回事

如何将codeblocks的程序移植到stm32上面

vscode中源代码管理点提交,弹出commit_editmsg的窗口。怎么样让它不弹出?

vscode光标无法选中提示的代码