【问题标题】:ASM: How to find this asm function(via offset)?ASM:如何找到这个 asm 函数(通过偏移量)?
【发布时间】:2011-10-12 23:27:55
【问题描述】:

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

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

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

这样我可以通过调用 pNetChannel 的非公共函数从 struct(pNetChannel(initialised in other dll)) 中检索一个值(here:IpAddress)。偏移量是从反汇编的 DLL 收集的(不是我)。我的问题是,如何找到这个地址为“offset+3”的函数(反汇编dll中的asm函数)。我想在 asm 代码中找到返回 Ip 的函数!在哪个地址可以找到?

【问题讨论】:

    标签: assembly reverse-engineering offset disassembly


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      相关资源
      最近更新 更多