sub_123434 proc near
mov esi, [ebp-1Ch]
sub_123434 endp
proc在附近是什么意思?有人可以解释整个功能吗?
#1 楼
就proc
和endp
而言,从此处开始。可以从本文档中找到有关near
的很好的解释,其说明如下:如果Procedure与调用程序位于同一代码段中,则属性为NEAR;否则,该属性为NEAR。或FAR(如果位于不同的代码段中)。
代码的本质是这样的:
mov esi,[ebp-1Ch]
这部分代码正在将值从堆栈移至
esi
寄存器。根据所使用的编译器和上下文的不同,您可能希望从寄存器约定中收集其他信息,这些约定涉及将值移入esi
寄存器。更具体地说,请考虑一下本文中可接受的答案。此外,
ebp-
(与ebp+
相对)是已传递给函数的参数的典型标志-这些值驻留在函数上只要存在特定的堆栈帧,就可以在内存地址中引用堆栈。关于
[ebp-1Ch]
,这是一个指针。在这种情况下,ebp
寄存器包含一个内存地址(或更具体地说,ebp
中的值被视为对内存地址的引用,而不是文字值),并且-1Ch
是该内存地址的偏移量。小写字母“ h”只是一个肺炎的意思,表示“十六进制”,为此,有时您可能还会看到以0x开头的偏移量和/或基于十六进制的值,例如:[ebp-0x1C]
。请记住,您真的可以将其视为[ebp-1C]
。请注意,
ebp
和[ebp]
是不同的东西。 [ebp]
意味着ebp
内部的值被视为对存储器地址的引用。假设ebp
中包含0xD34DC0DE
。现在考虑以下内容:mov esi,ebp
mov esi,[ebp]
mov esi,[ebp-1C]
每个结果将如下:
mov esi,ebp
// esi现在包含文字值0xD34DC0DE mov esi,[ebp]
// esi现在包含内存地址0xD34DC0DE内部的所有内容mov esi,[ebp-1C]
// esi现在包含内存地址0xD34DC0C2内部的所有内容(即0xD34DC0DE-1C)总体,看起来该子例程除了将数据从堆栈移到寄存器外什么也不做。作为一个完全盲目的假设,如果我们假设传递给其各自函数的每个参数为4字节宽,则
[ebp-1C]
引用传递给该子例程的父例程的第8个参数。在这种情况下,其他感兴趣的值可能存在于[ebp]
,[ebp-04]
,[ebp-08]
,[ebp-0C]
,[ebp-10]
,[ebp-14]
和/或[ebp-18]
中。最终,我们在这里缺乏上下文来收集目的您提供的此功能的特点是-尽管同样,上述约定的组合可能会告诉您很多有关mov指令可能包含的内容。查看调用约定以进一步明确。您应该能够根据此处的信息推断和研究其余信息。
评论
@Yoonisj:请发布有关此问题的新问题并提供相关代码段
–伊戈尔·斯科钦斯基♦
17年7月26日在9:00
调用ds:RegOpenKyEx调用ds:RegEnumKey mov edi,ds:RegCloseKey如果这三个功能相互低于,则此恶意软件在此功能中的作用
– Yunisj
17年7月26日在9:01