是什么导致磁盘上的驱动程序和映射到内存的驱动程序之间的差异?

时间:2010-10-21 21:49:24

标签: windows kernel drivers wdk

嘿 今天我尝试对NDIS.sys进行二进制区分,我注意到一些奇怪的东西。 我采取了一个功能,并开始区分它。磁盘上的前30个字节(使用IDA)和内存(使用WinDbg)相同。然后,事情发生了变化。我看到类似“jmp _ imp _XXXXX”的内容。 JMP字节是相同的,但地址不同。

我的问题是 - 有什么区别?我认为这与重新安置有关。尽管跳转是在同一模块中进行寻址,但它是一个长跳转,这使得它相对于模块基址。如果发生重定位,它也需要重新定位此地址,而不是在同一模块上。

我是对还是完全错了? :-) 感谢。

1 个答案:

答案 0 :(得分:2)

是的,当模块没有加载到内存中的首选基地址时,重定位期间会重新写入跳转目标。实际上,建议开发人员为他们的模块提供非默认的基地址以避免重定位成本,但许多人从不这样做,所以一些模块总是会重新定位,加载器必须重新编写跳转目标。