例如,DLL中的每个导出都指向函数在内存中存储的RVA(相对虚拟偏移量),我已经编写了一个将这些RVA转换为物理文件偏移量的函数。
问题是,这些是否真的是操作码,还是其他东西?
函数在文件中的存储方式是否取决于编译器/链接器,还是它们是一两个字节的X86操作码?
例如,Windows 7 DLL 'BWContextHandler.dll' 包含四个函数,这些函数会被加载到内存中,使它们可以在系统中使用。第一个导出函数是'DllCanUnloadNow',位于文件偏移量0x245D处。该数据的前四个字节为:0xA1 0x5C 0xF1 0xF2 那么这些是一或两个字节的操作码,还是完全不同的东西?
如果有人能提供有关如何检查这些内容的任何信息,将不胜感激。
谢谢!
经过进一步阅读,并运行文件通过IDA的演示版,我认为我的判断是正确的,即第一个字节0xA1是一个单字节操作码,意思是mov eax。我从这里得到了这个信息:http://ref.x86asm.net/geek32.html#xA1,并暂时认为它是正确的。
但是,我有点困惑后面的字节如何组成指令。根据我所知道的x86汇编器,移动指令需要两个参数:目标和源,因此指令是将(某些东西)移入eax寄存器,我假设这些内容在接下来的字节中。但是我还不知道如何读取这些信息 :)