sub_123434 proc near 
mov esi, [ebp-1Ch] 
sub_123434 endp


proc在附近是什么意思?有人可以解释整个功能吗?

#1 楼

procendp而言,从此处开始。可以从本文档中找到有关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