【问题标题】:What does this code imply: ss:dword_410CC5[ebp]?这段代码意味着什么:ss:dword_410CC5[ebp]?
【发布时间】:2017-12-31 06:07:16
【问题描述】:

使用 IDA Pro 分析文件,我遇到了一些我不太明白的代码:

mov eax, ss:dword_410CC5[ebp] ;
call eax; Indirect Call Near Proc

转到这个地址 - 410CC5 - 我看到了:

 ile.........Clos
 eHandle.........

我假设在 EAX 的第一个代码 sn-p 中存储了库函数的名称,然后由

call eax; Indirect Call Near Proc

但问题是地址 410CC5 与此名称不完全对应(见附件)。在这个地址实际上只是零。

这是否意味着在

call eax; Indirect Call Near Proc

我们调用 CloseHandle?如果是这样,那么为什么没有将正确的地址传递给 EAX?

【问题讨论】:

  • dword_410CC5[ebp]不是绝对地址410CC5,应该加上ebp的值。这只是[ebp+410CC5] 的愚蠢语法。此外,call eax 不会按名称调用函数。
  • 当然,在第一行代码中,缺少MOV 指令?
  • 是的,很抱歉。已更正
  • 您正在查看模块的 IAT(导入地址表)。虽然 EBP 通常寻址堆栈帧,但它确实在高度优化的代码中用作通用寄存器。有可能它只是调用一个导入的函数。还告诉您,您将很难到达某个地方,优化的代码很难进行逆向工程。

标签: assembly x86 reverse-engineering ida


【解决方案1】:

当反汇编中出现call指令时,表示此时调用了另一个例程/函数。

如果例程具有绝对地址,则指令将显示为call 0xaabbccdd

如果被调用函数的地址是一个动态地址(这种地址在操作系统加载可执行文件时被解析),它通过一个注册值被调用。

但是,这条指令用于调用例程——仅此而已。

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多