1

我有两个可执行文件,都是我手动创建的,我将它们分别称为 1.exe 和 2.exe。首先,这两个可执行文件均由 MSVS 2010 使用 Microsoft 编译器编译。我想在 1.exe 中输入一条消息,我希望 1.exe 将该消息注入 2.exe(可能作为某种参数),所以当我在 1.exe 注入消息后运行 2.exe 时, 2.exe 将显示该消息。

注意- 这不是非法使用,这两个可执行文件都是由我创建的。

对我来说最重要的是:

  1. 在 2.exe 中放置消息/指令的位置,以便 2.exe 可以轻松访问它们
  2. 2.exe 将如何实际FIND使用这些参数(消息)。

我完全理解我不能简单地使用 C++ 代码作为注入,它必须是可以由编译器在运行时生成/翻译的裸程序集(如果我错了,请纠正我)

我一直在考虑的一些解决方案:

  1. 在 2.exe 中创建一个需要参数的标准函数(例如显示消息框),然后将这些参数(消息)简单地注入函数中?
  2. 在 2.exe 中创建某种结构来保存 1.exe 将注入的值,如果是这样如何?我是否需要硬编码将这些参数放入的偏移量?

注意- 我不指望一个勺子,我想熟练地理解编程的这方面,我已经阅读了 PE 文件格式并对汇编(MASM 汇编器语法)有深刻的理解,并且渴望学习更多。感谢您的时间。

4

2 回答 2

4

很少有程序员需要做这种事情。没有它,你的整个职业生涯都可以。我最后一次这样做是在 1983 年左右。

如果我没记错的话,我在 2.exe 中包含了一个类似这样的汇编模块(我忘记了语法):

.GLOBAL TARGET
TARGET  DB 200h  ; Reserve 512 bytes 

1.exe 然后打开 2.exe,在符号表中搜索全局符号“TARGET”,找出它在文件中的位置,写入它想要的 512 字节,然后保存文件。这是针对许可计划的。


https://stackoverflow.com/users/422797/igor-skochinsky的评论提醒我当时没有使用符号表。那是一个不同的操作系统。在这种情况下,我确实扫描了一个字符串。

于 2012-11-28T04:07:40.207 回答
0

从您的描述看来,您只需要在命令行上传递一个值。

Win32GetCommandLine()函数将为您提供您可以传递给的传递值MessageBox()

如果它需要是另一个正在运行的实例,那么另一种形式的 IPC,如 windows 消息 ( WM_COPYDATA) 将起作用。

于 2012-11-28T13:20:04.683 回答