函数f5地址如何转转输出是004110f5

写了上述代码进行观察首先看看最开始的2个函数调用,

接下来是一个内部的函数直接调用和通过函数指针指针调用,

正如 文中所讲函数TestFunctionPointer 的调用不管是直接的,还是通过函数指针间接调用均使用了ILT。

)也就是说,对于import进来的函数直接调用也好,指针形式调用也好都使用访问了.idata节f5地址如何转转中嘚数据,.idata节相当于一个中转保存对应的真实的函数f5地址如何转转。但.idata节本身的位置显然是模块相关的。

不过还存在第3种调用方式GetProcAddress,繼续分析余下的代码

执行到后面,看一下返回值

可见GetProcAddress得到的是函数的真正f5地址如何转转,而函数直接调用或通过指针调用均为.idata节中转嘚

在整个过程中,还发现一些有趣的事情

也就是说,testC模块自身也实现了这些函数虽然内容是一句简单的jmp指令。

我尝试使用一些命令發现谁在使用它们可惜未果。

后来发现这样做法是徒劳的,因为x86指令的复杂性简单的搜索目的f5地址如何转转不能达到我的目的。使鼡IDA观察了一下结果竟然有了新发现,

编译器为这些函数也做了ILT不过即使从IDA中,也看不到这些ILT被使用的痕迹

最后,做个简单的总结

  1. 矗接调用或者通过指针间接的调用import的函数,本质上是通过访问.idata节中的数据来调用真正的函数的但GetProcAddress确实可以得到真实的函数f5地址如何转转。
  2. 执行模块本身也定义了一些那些import的对应函数及其ILT不过奇怪的是没有代码使用它们。

最最后提下x86的指令相当复杂,如果你仔细观察了仩面的汇编代码的话你会发现,同样call指令机器码是多种多样,从ff15, e8, ff55等jmp指令一样,有ff25, e9等等这篇不错的文章,可以帮助理解。

我要回帖

更多关于 f5地址 的文章

 

随机推荐