sub_123434 proc near
mov esi, [ebp-1Ch]
sub_123434 endp
proc 附近是什么意思?有人可以解释整个功能吗?
sub_123434 proc near
mov esi, [ebp-1Ch]
sub_123434 endp
proc 附近是什么意思?有人可以解释整个功能吗?
至于proc和endp,从这里开始。near可以从这个文档中找到一个很好的解释,它说明如下:
如果过程与调用程序在同一代码段中,则属性为 NEAR;或 FAR 如果在不同的代码段中。
代码的内容是这样的:
mov esi,[ebp-1Ch]
这段代码正在将一个值从堆栈移动到esi寄存器中。根据所使用的编译器和上下文,您可能会从寄存器约定中收集其他信息,其中涉及将值移入esi寄存器。更具体地说,请考虑这篇文章中已接受的答案。
此外,ebp-(与 相对ebp+)是已传递给函数的参数的典型标志——这些值驻留在堆栈中的内存地址中,只要该特定堆栈帧存在,就可以引用这些值。
关于[ebp-1Ch],这是一个指针。在这种情况下,ebp寄存器包含一个内存地址(或者,更具体地说,in 中的值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 指令可能是什么的一部分。查看调用约定以获得额外的清晰度。您应该能够根据此处的信息推断和研究其余部分。