首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求解下面这三行汇编代码的意思,该怎么处理

2012-05-28 
求解下面这三行汇编代码的意思movdword ptr [ebp-0Ch],eaxleaeax,[ebp-0Ch]movdword ptr [ebp-8],eax第一

求解下面这三行汇编代码的意思
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 
}

热点排行