Assembly 装配中这些变量赋值的目的/功能是什么?

Assembly 装配中这些变量赋值的目的/功能是什么?,assembly,syntax,Assembly,Syntax,在分解一个二进制文件后,我在源文件的最顶端发现了它。上面没有其他内容,我相当肯定它与命令行输入有关,但我不确定。那么它是否与命令行输入有关呢。另外,我想知道等号和减号与赋值变量有什么关系 为了使清单更易于理解,一些反汇编程序试图解释常见的代码模式 其中一种模式是访问相对于的负偏移量的局部变量,但这也可能由处理堆栈中的数据而不使用帧指针的代码触发 此特意未优化的32位程序1使用帧指针和两个局部变量计算第n个三角形数: var_30= qword ptr -30h var_24= dword ptr

在分解一个二进制文件后,我在源文件的最顶端发现了它。上面没有其他内容,我相当肯定它与命令行输入有关,但我不确定。那么它是否与命令行输入有关呢。另外,我想知道等号和减号与赋值变量有什么关系

为了使清单更易于理解,一些反汇编程序试图解释常见的代码模式

其中一种模式是访问相对于的负偏移量的局部变量,但这也可能由处理堆栈中的数据而不使用帧指针的代码触发

此特意未优化的32位程序1使用帧指针和两个局部变量计算第n个三角形数:

var_30= qword ptr -30h
var_24= dword ptr -24h
var_20= dword ptr -20h
var_1C= dword ptr -1Ch
var_18= dword ptr -18h
var_14= dword ptr -14h
var_10= dword ptr -10h
var_8= qword ptr -8
1出于教学目的,夸大了程序结构、循环布局和局部变量的使用

反汇编程序查看对
[ebp xx]
的访问,并为它们命名:

push ebp
mov ebp, esp

sub esp, 08h

push ebx


mov DWORD PTR [ebp-04h], 1
mov DWORD PTR [ebp-08h], 0

_loop:
 mov ebx, DWORD PTR [ebp-04h]
 cmp ebx, DWORD PTR [ebp+08h]
  ja _end

 mov ebx, DWORD PTR [ebp-04h]
 add DWORD PTR [ebp-08h], ebx

 inc DWORD PTR [ebp-04h]
jmp _loop


_end:
mov eax, DWORD PTR [ebp-08h]

pop ebx

add esp, 08h

pop ebp
ret 04h
通常,在进行反向工程时,可以重命名这些var:

;var_8 = DWORD PTR -8
;var_4 = DWORD PTR -4
;par_8 = DWORD PTR 8
push ebp
mov ebp, esp

sub esp, 08h

push ebx


mov DWORD PTR [ebp+var_4], 1
mov DWORD PTR [ebp+var_8], 0

_loop:
 mov ebx, DWORD PTR [ebp+var_4]
 cmp ebx, DWORD PTR [ebp+par_8]
  ja _end

 mov ebx, DWORD PTR [ebp+var_4]
 add DWORD PTR [ebp+var_8], ebx

 inc DWORD PTR [ebp+var_4]
jmp _loop


_end:
mov eax, DWORD PTR [ebp+var_8]
pop ebx

add esp, 08h

pop ebp
ret 04h
;总和=DWORD PTR-8
;i=DWORD PTR-4
;n=DWORD PTR 8
推ebp
电动汽车
副esp,08h
推ebx
mov DWORD PTR[ebp+i],1;从i=1开始。。。
mov DWORD PTR[ebp+总和],0;最初的结果是0
_循环:
mov ebx,DWORD PTR[ebp+i]
cmp ebx,DWORD PTR[ebp+n]

(完);。。。对我来说,反汇编程序本质上是试图定位“局部变量”,它可以通过帧指针的偏移来访问这些变量。这些“变量”将在反汇编中的其他地方与代码一起使用,如
[esp+20h+var_14]
等。“它是否与命令行输入有关”-如果不了解使用这些变量的上下文,就无法判断。
;sum = DWORD PTR -8
;i = DWORD PTR -4
;n = DWORD PTR 8
push ebp
mov ebp, esp

sub esp, 08h

push ebx


mov DWORD PTR [ebp+i], 1               ;Start from i=1...
mov DWORD PTR [ebp+sum], 0             ;Result is 0 initially

_loop:
 mov ebx, DWORD PTR [ebp+i]            
 cmp ebx, DWORD PTR [ebp+n]
  ja _end                               ;... to i <= n

 mov ebx, DWORD PTR [ebp+i]
 add DWORD PTR [ebp+sum], ebx           ;sum += i

 inc DWORD PTR [ebp+i]                  ;i++
jmp _loop


_end:
mov eax, DWORD PTR [ebp+sum]
pop ebx

add esp, 08h

pop ebp
ret 04h