gpt4 book ai didi

c++ - 确定应用程序编译时是否使用 _DEBUG 宏

转载 作者:行者123 更新时间:2023-11-28 05:54:37 24 4
gpt4 key购买 nike

我有应用程序(可执行文件),但我没有该应用程序的源代码。我可以启动这个应用程序。我需要知道它是发布版还是调试版。

在 Windows 中是否有任何方法以编程方式确定该应用程序是使用 _DEBUG 宏编译的?

附言CheckRemoteDebuggerPresent 可以检查附加的调试器进程是否存在。这不是我需要的。

最佳答案

我会先用一些最基本的数据嗅探它,两个这样的例子是 bin 字符串和应用程序 header ;

  • 在某些情况下,对于使用和不使用编译的同一个可执行文件,字符串可能包含明显的迹象,例如以下内容:

没有 <assemblyIdentity type="win32" name="Microsoft.VC90.CRT "

<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT"

(可能还有 id 编译器?)

您可以使用以下任何选项提取字符串:在 VS 中打开 exe 并查看 RCDATA,在十六进制编辑器中打开 exe,GUI 工具(例如 BinText、字符串实用程序)MinGW binutils (windows)以及更多选择

  • 检查 PE header (例如使用 VS dumpbin.exe)。我过去确实注意到的一个提示是,OPTIONAL HEADER VALUES 中的校验和字段仅在发布版本中设置。如果您尝试对磁盘上的文件执行此操作,PE 格式有详细记录,您应该能够“反汇编”它以获取字段。一旦找到加载到内存中的图像的基地址(例如通过使用 tool help snapshot API ),也应该可以将可执行文件作为运行进程加载到内存中

正如我所说,这些可能会给出答案,或者如果没有的话,希望能提供一些线索。

关于c++ - 确定应用程序编译时是否使用 _DEBUG 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com