1

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

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

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

4

1 回答 1

2

Yes, jump targets get re-written during relocation when a module is not loaded at it's preferred base address in memory. Actually, developers are advised to provide a non-default base address for their modules to avoid relocation cost, but many never do, so some modules will always get relocated and the loader has to re-write jump targets.

于 2010-10-21T21:54:07.713 回答