ASM:如何找到这个asm函数(通过偏移量)?

时间:2011-07-25 22:19:58

标签: assembly reverse-engineering offset disassembly

在C ++函数中,我有以下代码:

    #if defined(WIN64)
        const int offset   = 0xd1;
    #else
        const int offset   = 0x77;
    #endif

    unsigned char* p = &(((unsigned char*)pNetChannel)[offset+3]);

这样我可以通过调用pNetChannel的非公共函数从结构(pNetChannel(在其他dll中初始化))中检索值(此处为:IpAddress)。从反汇编的DLL收集(不是我)偏移量。我的问题是,如何找到具有此地址“offset + 3”的函数(反汇编dll中的asm函数)。我想在asm代码中找到返回Ip的函数!我可以在哪个地址找到它?

1 个答案:

答案 0 :(得分:0)

首先,我没有在该代码中看到任何实际的函数,所以我假设它除了函数之外。要在程序集中跟踪其地址,您需要一个反汇编程序和调试程序,如ollydbg或windbg。那么你要么需要追踪对它的调用(直接或间接地,取决于你的过程模型),要么寻找使函数唯一的东西,在这种情况下,(offset + 3) * sizeof(unsigned char)的值,将被使用查找ip。当您找到该函数时,您需要从调试器告诉您的地址中减去其所在的dll的基本加载地址以获取您的RVA(相对虚拟地址),然后转换RVA +基本加载地址为您提供虚拟化地址,这将正确调整它以重新定位dll