小编ksh*_*har的帖子

监视应用程序对DLL的调用

简而言之:我想监视从应用程序到DLL的选定调用.

我们有一个旧的VB6应用程序,我们丢失了源代码(该公司当时没有使用源代码控制..).此应用程序使用第三方DLL.

我想在新的C++应用程序中使用此DLL.不幸的是,DLL API只是部分记录,所以我不知道如何调用某些函数.我有功能签名.

由于VB6应用程序使用此DLL,我想看看它如何调用多个函数.到目前为止,我已经尝试或看过 -

  1. APIHijack - 要求我为每个函数编写C++代码.由于我只需要记录值,这似乎是一种矫枉过正.
  2. EasyHook - 与1相同,但允许用.NET语言编写代码.
  3. 使用uHooker的OllyDbg - 我仍然需要为每个函数编写代码,这次是在Python中.此外,我必须使用该struct模块在Python中进行许多转换,因为大多数函数使用指针传递值.

由于我只需要记录函数参数,我想要一个简单的解决方案.有没有自动化工具,我可以告诉哪些功能要监控和签名,然后获取详细的日志文件?

dll hook monitoring monitor

37
推荐指数
2
解决办法
6万
查看次数

我应该选择哪个C++信号/插槽库?

我想在不使用QT的项目中使用信号/插槽库.我有很基本的要求:

  1. 使用任意数量的参数连接两个函数.
  2. 信号可以连接到多个插槽.
  3. 手动断开信号/插槽连接.
  4. 不俗的性能 - 应用程序是基于帧的(即不是基于事件的),我想用在每帧中的连接.

我已经阅读了libsigc ++和Boost.Signals之间比较.我还读到Boost.Signals的性能不佳.但是,我知道还有其他库,我仍然不确定应该选择哪个库.

有信号/插槽库的建议吗?

c++ boost signals-slots

37
推荐指数
4
解决办法
2万
查看次数

设计应用程序协议

我有一个现有的独立应用程序,它将由第三方使用网络协议进行扩展.功能已经实现,我需要的只是将它们暴露给外部.

假设已经选择了传输协议(UDP),是否有任何资源可以帮助我设计我的应用程序协议?

似乎有很多关于软件设计的信息,但没有关于协议设计的信息.我已经看过应用程序协议设计了.

networking protocols

15
推荐指数
2
解决办法
2万
查看次数

GLSL着色器中的常量浮点值 - 使用制服的任何理由?

我正在查看使用着色器的OpenGL应用程序的来源.一个特殊的着色器看起来像这样:

uniform float someConstantValue;
void main()
{
    // Use someConstantValue
}
Run Code Online (Sandbox Code Playgroud)

统一是从代码设置一次,并且在整个应用程序运行时都不会更改.

在什么情况下我想宣布someConstantValue为a uniform而不是const float

编辑: 只是为了澄清,常数值是物理常数.

opengl shader constants glsl

13
推荐指数
2
解决办法
2万
查看次数

如何设计一个简单的C++对象工厂?

在我的应用程序中,有10-20个类被实例化一次[*].这是一个例子:

class SomeOtherManager;

class SomeManagerClass {
public:
    SomeManagerClass(SomeOtherManager*);
    virtual void someMethod1();
    virtual void someMethod2();
};
Run Code Online (Sandbox Code Playgroud)

类的实例包含在一个对象中:

class TheManager {
public:
    virtual SomeManagerClass* someManagerClass() const;
    virtual SomeOtherManager* someOtherManager() const;
    /** More objects... up to 10-20 */
};
Run Code Online (Sandbox Code Playgroud)

目前,TheManager使用new运算符来创建对象.

我的目的是能够使用插件替换SomeManagerClass(或任何其他类)实现与另一个.为了取代实施,需要两个步骤:

  1. 定义一个DerivedSomeManagerClass类,它继承了SomeManagerClass [plugin]
  2. 创建新类(DerivedSomeManagerClass)而不是默认(SomeManagerClass)[application]

我想我需要某种对象工厂,但它应该相当简单,因为总是只有一种类型要创建(默认实现或用户实现).

有关如何设计像我刚刚描述的简单工厂的想法吗?考虑到将来可能会有更多类的事实,因此应该很容易扩展.

[*]我不在乎它是否不止一次发生.

编辑:请注意,TheManager中包含两个以上的对象.

c++ factory

12
推荐指数
2
解决办法
2万
查看次数

我可以在同一个进程中使用同一DLL的两个不兼容版本吗?

我正在使用由同一供应商生产的两个商业库,名为VendorLibA和VendorLibB.这些库分布了许多依赖于编译器版本的DLL(例如VC7,VC8).两个库都依赖于另一个库,由该供应商生成,名为VendorLibUtils并包含在一个DLL中.

问题:VendorLibA使用与VendorLibB不同的VendorLibUtils版本.这两个版本不是二进制兼容的,即使它们是使用错误的版本也是一个坏主意.

有什么方法可以在同一个过程中使用这两个库吗?

注意: LoadLibrary无法解决此问题,因为我的进程不是导入VendorLibUtils的进程.

编辑:忘了提到显而易见的,我没有任何商业图书馆的源代码,可能我永远不会(感叹).

编辑:替代btw,是这样做:如何在Windows中组合GUI应用程序

c++ windows dll winapi

11
推荐指数
3
解决办法
3474
查看次数

是否有用于捕获和回放修改后的UDP数据包的Windows工具?

我正在寻找一个可以执行以下操作的Windows工具(或一组工具):

  1. 将UDP数据包从特定网络接口捕获到文件.
  2. 通过网络接口播放文件中的数据包流.
  3. 除了2:将原始数据包重放到与原始数据包不同的主机.

我已经有1和2,但我找不到工具3.

为了捕获我可以使用Wireshark,用于回放Colaso​​ft Packet Player,但我找不到改变数据包发送到的主机的方法.

该工具应适用于Windows XP SP2/3.

windows udp packet-capture packet

8
推荐指数
1
解决办法
2万
查看次数

如何为线程安全编写自动化测试

我有一个非线程安全的类:

class Foo { 
    /* Abstract base class, code which is not thread safe */ 
};
Run Code Online (Sandbox Code Playgroud)

此外,如果你有foo1和foo2对象,你不能调用foo1-> someFunc()直到foo2-> anotherFunc()返回(这可能发生在两个线程).这是情况,它无法更改(Foo子类实际上是python脚本的包装器).

为了防止不必要的电话,我创建了以下内容 -

class FooWrapper {
public:
    FooWrapper(Foo* foo, FooWrappersMutex* mutex);
    /* Wrapped functions from Foo */
};
Run Code Online (Sandbox Code Playgroud)

在内部,FooWrapper使用共享互斥锁包装对Foo函数的调用.

我想测试FooWrapper的线程安全性.我最大的问题是线程是由操作系统管理的,这意味着我对执行的控制较少.我想测试的是以下场景:

  • 线程1在函数内部调用fooWrapper1-> someFunc()并阻塞
  • 线程2调用fooWrapper2-> anotherFunc()并立即返回(因为someFunc()仍在执行)
  • 线程1完成执行

什么是最简单的自动测试这样的场景?

我在Win32上使用QT,虽然我更喜欢QT至少是跨平台的解决方案.

c++ testing multithreading unit-testing

8
推荐指数
2
解决办法
4839
查看次数

具有多个视频卡的Windows XP中的OpenGL渲染

我正在为Windows XP开发OpenGL应用程序.目标机器有2块NVIDIA GeForce 9800GT显卡,这是需要的,因为应用程序需要输出2个模拟视频流.

应用程序本身有两个OpenGL窗口,每个视频卡一个.每个视频卡都连接到一台显示器.至于代码,它基于一个最小的OpenGL示例.

如何知道应用程序是否同时使用两个视频卡进行渲染?

目前,我不关心应用程序是仅在Windows XP上运行还是仅在NVIDIA显卡上运行,我只需要知道这两种应用程序是如何运行的.

windows opengl rendering nvidia

8
推荐指数
1
解决办法
3296
查看次数

输出重定向不适用于某个程序

在Linux上,我正在尝试将stdout从控制台应用程序重定向到文件而不是控制台.我没有源代码.我尝试了几种方法,但都导致了一个空文件.没有输出重定向一切正常(我看到控制台消息).

我试过,例如:

progname > out.txt
progname > out.txt 2&>1
Run Code Online (Sandbox Code Playgroud)

并没有出现在out.txt和控制台中.

我试着用strace运行应用程序.当我不使用重定向时,我看到如下的行 -

write(1, "bla bla", 8)
Run Code Online (Sandbox Code Playgroud)

当我引入输出重定向时,根本就没有写入调用,这使我认为应用程序在编写消息之前正在测试某些内容.应用程序在寻找什么?我怎么能绕过它呢?

我正在使用CentOS 5.5和Bash.

linux bash redirect stdout output-redirect

8
推荐指数
2
解决办法
6272
查看次数