求解下面这三行汇编代码的意思
mov dword ptr [ebp-0Ch],eax
lea eax,[ebp-0Ch]
mov dword ptr [ebp-8],eax
第一句的意思是不是把eax的值放入起始地址[ebp-0ch]的双字中
第二句的就不懂了
第三名的意思和第一句差不多吗?
[解决办法]
可以用C语言代码的方式来解释
mov dword ptr [ebp-0Ch],eax
ebp-0ch 对应1个指针类型的局部变量
这句相当于给指针变量赋值
lea eax,[ebp-0Ch]
这句相当于取变量的地址
mov dword ptr [ebp-8],eax
相当于给指针对应的内容赋值
下面写代码验证
在VC2008 中建立 console 程序
主要内容如下
#include "stdafx.h"
void func1(char **p1, char *p2)
{
char *temp = malloc(sizeof(char)*32);
p1 = &temp; // 在这设断点,在反汇编窗口中查看
*p2 = *temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
char buf[8];
char *str1 = buf;
char *str2 = buf;
func1(&str1, str2);
return 0;
}
// 下面是反汇编的内容
void func1(char **p1, char *p2)
{
002213B0 push ebp
002213B1 mov ebp,esp
002213B3 sub esp,0CCh
002213B9 push ebx
002213BA push esi
002213BB push edi
002213BC lea edi,[ebp+FFFFFF34h]
002213C2 mov ecx,33h
002213C7 mov eax,0CCCCCCCCh
002213CC rep stos dword ptr es:[edi]
char *temp = malloc(sizeof(char)*32);
002213CE push 20h
002213D0 call 002210AF
002213D5 add esp,4
002213D8 mov dword ptr [ebp-8],eax // 注意*****************
// mov dword ptr [temp],eax
// 默认如上,右键,不勾选 显示符号名 即可
p1 = &temp;
002213DB lea eax,[ebp-8] // 注意***************
002213DE mov dword ptr [ebp+8],eax // 注意***************
*p2 = *temp;
002213E1 mov eax,dword ptr [ebp+0Ch]
002213E4 mov ecx,dword ptr [ebp-8]
002213E7 mov dl,byte ptr [ecx]
002213E9 mov byte ptr [eax],dl
}