【问题标题】:How do I poke the flag in a win32 PE that controls console window display如何在控制控制台窗口显示的win32 PE中戳标志
【发布时间】:2011-01-27 00:11:09
【问题描述】:

我有一个可执行文件,它是批处理的一部分。这个可执行文件会打开一个控制台窗口,这很烦人,因为它对最终用户来说毫无用处,并且会从他们的活动任务中转移注意力。

我们无法从源代码(轻松)编译此 EXE 的新版本。有没有一种简单的方法可以在 PE 中调整此设置?

【问题讨论】:

    标签: winapi console


    【解决方案1】:

    找到了。

    editbin.exe /subsystem:windows foo.exe
    

    editbin.exe 是 MSVC 的一部分

    【讨论】:

      【解决方案2】:

      我是根据PE规范用python写的 http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx

      我不确定带有控制台|windows 子系统的 Windows EXE 二进制文件是否相同 入口点格式(具有相同的参数),但似乎是这样。

      Python 代码:

      import sys
      import struct
      
      if len(sys.argv) < 4:
          print "Change Exe Run Mode Application by burlachenkok@gmail.com\nNot sufficient parametrs. 'exe_src_name.exe' 'exe_dest_name.exe' 'to_console' or 'to_windows'"
          sys.exit(-1)
      
      source = open(sys.argv[1], "rb")
      dest   = open(sys.argv[2], "w+b")
      dest.write(source.read())
      
      dest.seek(0x3c)
      (PeHeaderOffset,)=struct.unpack("H", dest.read(2))
      
      dest.seek(PeHeaderOffset)
      (PeSignature,)=struct.unpack("I", dest.read(4))
      if PeSignature != 0x4550:
          print "Error in Find PE header"
      
      dest.seek(PeHeaderOffset + 0x5C)
      
      if sys.argv[3].strip() == "to_console":
          # console mode
          dest.write(struct.pack("H", 0x03))
      elif sys.argv[3].strip() == "to_windows":
          # window mode
          dest.write(struct.pack("H", 0x02))
      else:
          print "Wrong Format: '" + sys.argv[3] + "'"
      
      source.close()
      dest.close()
      
      print "Completed succesfully.."
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 2011-06-12
        • 2010-10-11
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        相关资源
        最近更新 更多