c# - 使用 C# 替换 native .exe 中的字符串

标签 c# c++

如何从 native Windows .exe 文件中捕获所有字符串并稍后使用 C# 将它们替换为其他字符串?

背景:我想创建一个 C# 工具来从一个简单的 .exe 文件中提取和替换字符串。

这有可能吗?

最佳答案

您需要启动的是一个 PE/COFF 解析器。如果您的字符串存储在 PE 的资源部分中,那么这很容易。例如,您可以将一个 exe 作为资源文件加载到 Visual Studio 中,并使用其资源编辑器更改 exe 中的图标和字符串等。另一方面,如果字符串存储在数据部分或在机器代码中是直接的,那么您的问题要复杂得多。按原样覆盖字符串,让它们保持相同的长度可能会起作用,但让它们变长会开始移动东西,弄乱重定位和偏移量。重写exe​​确实不是实现你想要的方法。

从我的评论上移:PE/COFF 是 windows 程序的 exe 格式。如果您只想编辑资源,则不需要解析器。您可以首先使用带有标志 LOAD_LIBRARY_AS_IMAGE_RESOURCE|LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 的 LoadLibraryEx() 来加载 exe 以仅使用该资源并使其可写。然后开始查看 LoadString()。这些都是 native API 调用。我真的不知道你是如何在 C# 中做到这一点的。

关于c# - 使用 C# 替换 native .exe 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926097/

相关文章:

c# - LINQ 和 C# : How to add a field, 未映射到表列

c++ - 为什么我的凸包周长计算不起作用?

c++ - 没有参数列表时模板名称 ‘boost::asio::strand’ 的使用无效

c# - 当 UWP 解决方案包含 Windows 运行时组件 (C#) 时 WACK 失败

c# - 你将如何声明 DLL 导入签名?

c# - 我怎么知道 "assembly"是否真的改变了?

c# - 更新数据源后,Telerik 的 RadListView 未绘制项目

c# - 从 ASP.NET 页面中获取 Windows 登录

c# - 在 Visual Studio 中打开窗体时修改资源文件

c++ - 如何从派生类函数调用父类函数?