![]() |
1
5
当然,这是可能的——实际上这就是C/C++编译器所做的。 但你为什么要以上帝的名义这么做?如果这是为了教育价值,那么用C语言直接手工做COM的东西肯定会有效果。 考虑到更新后的问题,我建议您将COM内容写入一个dll,并将该dll注入要修补的程序中,然后将简单的x86代码修补到该程序中,以调用执行重量级提升的dll。我不记得将DLL注入进程地址空间的技术,但至少有两种。AppInit注册表设置(或类似的设置)是一个。 但是,我认为大多数将代码注入进程的方法都被认为是安全缺陷(并且经常被恶意软件使用),因此我怀疑微软可能已经从最近的服务包或操作系统版本中删除了许多(或者全部)代码。 |
![]() |
2
1
最简单的方法是创建一个进行COM通信的DLL,然后注入代码,强制另一个应用程序加载该DLL。您可以使用dll注入技术,也可以只编辑应用程序本身的程序集来调用loadlibrary/getprocaddress等。 编辑:顺便说一句,我发现了 OllyDbg 是编辑现有应用程序的程序集的好工具。 |
![]() |
3
1
我必须同意迈克B。这听起来像是你不想做的事,但是… 为了扩展Mike B所说的可能,在最低级别的COM是一个ABI(应用程序二进制接口);也就是说,它定义了内存中COM对象的布局,并且所有COM对象都需要遵循这个布局。COM对象(在x86平台上)以与VisualC++编译器(以及大多数其他编译器)在内存中设置对象的方式相同的方式部署在内存中。这使得C++(和C,还有一些额外的努力)成为与COM一起工作的一个方便的选择。也就是说,我从未见过有人在汇编中尝试过这种方法,但是有一个关于用C语言编写COM的教程可以在codeproject上找到。那里的概念应该很容易翻译成装配: |
![]() |
4
0
是--COM主要设计为 二进制API 虽然有一个非常容易实现的C/C++。然而,规范不是C或C++的。 你可以参考原始的COM规范,有一个副本 here 它也必须埋在微软网站的某个地方。 更新 :您的用例似乎不需要直接使用程序集,可以使用任何代码注入技术。如何编译要注入的代码与如何注入不同。 |
![]() |
5
0
你可以通过
hard way
或者你可以找一个
tested and true
解决方案。
|
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 2 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 2 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 2 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 3 年前 |