windows平台如何给系统函数加一个wraper,让我的应用里面对这个函数的调用都是这个wraper,不是系统函数。

gaodeng 发布于 2014年03月13日
无人欣赏。

注(只能接触我的应用里面部分代码)

共10条回复
tinyfool 回复于 2014年03月13日

完全看不懂你的问题,你就做呗,做wraper就做啊

gaodeng 回复于 2014年03月13日

1楼 @tinyfool 用了一个第三方的库A(没有源码无法改动),那个库调用了一个系统函数B,那个系统函数B有问题。需要运行时的把那个系统函数B换下来。类似于Mac OSX下面的mach_override 库做的事情,想问问windows下面有没有类似的东西。

玉楼 回复于 2014年03月13日
  1. 如果你只是想自己调用,而且希望函数名不变,你可以使用宏定义来改变具体的调用函数。
  2. 如果你想让别人以为自己调用的是系统函数B,可实际调用的是你的函数,那你有可能是在干坏事!
  3. 如果你实在需要改变系统函数B的调用结果,建议你去搜搜hook相关的文章。但要注意:hook后,所有程序调用这个系统函数B都会变成调用你的函数。
tinyfool 回复于 2014年03月13日

2楼 @gaodeng 还是不会问问题,首贴就没说清楚

现在你就不能直接说函数B是什么么。。。

这可能涉及到怎么具体解决问题的

gaodeng 回复于 2014年03月13日

4楼 @tinyfool 问题在于还不知道那个第三方的库到底调用了系统的哪一个具体函数。现在需要先找到运行时替换系统函数的方式,去替换,观察,然后才知道。

gaodeng 回复于 2014年03月13日

3楼 @玉楼 对的,就是你第三点说的。Mac OSX下面已经用mach_override 实现了。现在不知道windows下面如何搞。

tinyfool 回复于 2014年03月13日

6楼 @gaodeng 好吧,具体到了什么函数还有很多问题,比如用的是windows的runtime可能只能靠hook之类的,但是如果是c语言的runtime,有一些其他的机制,这就是要等你具体逮到了具体分析了。再或者用了某个开源库的API,那你自己编译一个出来,也可以嘛

vczh 回复于 2014年03月13日

用我M$R出品的detour来hook他们啊,这样还能在不改变exe的情况下做你要的wrapper

duizzt 回复于 2014年03月13日

detour

RolandXu 回复于 2014年03月13日

敢情啥分析都没做就来没头没尾的问问题,连这个函数是静态链接进去的还是动态链接的都没弄清楚。

  • 如果是动态链接的dll,那就hook它
  • 如果是静态链接的lib,自己写一个一模一样的。当然,这样会在link阶段报错,然后利用/FORCE:MULTIPLE 强制忽略这个错误。理论上可行,但没具体试过。
登录 或者 注册