能力值:
(RANK:210 )
|
-
-
2 楼
rep stos dword ptr [edi]
就是把eax的值 写入到以[edi]开头的地址中,每次写入一个双字,循环ecx次
dword ptr [edi] 就是定义[edi]开始的内存变量为dword属性
byte ptr [edi]就是定义[edi]开始的内存变量为byte属性
word ptr ................
mov dword ptr [i],0,就是把[i]地址开始的第一个双字变成0
mov byte ptr [i],0 就是把[i]地址开始的第一个字节变成0
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=bithaha;340048]
mov dword ptr [i],0,就是把[i]地址开始的第一个双字变成0
[/QUOTE]
不好意思,如果翻成 C 语言的话,会是长怎样呢?
DWORD *i;
...
*i = 0;
类似这样吗?
感谢
|
能力值:
(RANK:210 )
|
-
-
4 楼
你可以自己找个简单的程序试试,三两行程序就能收获很多东西:
程序1:
定义了两个int :
int a=5,b=6;
反汇编会出现:
004010A8 mov dword ptr [ebp-4],5
004010AF mov dword ptr [ebp-8],6
程序2:
这样定义一个指针
int *i;
*i=0
反汇编是这样的:
004010A8 mov eax,dword ptr [ebp-4];先保存地址
004010AB mov dword ptr [eax],0;再给地址赋值,注意,这里会有错误,指针没有初始化,ebp-4中保存的数字不是一个真实的地址或者该地址不能访问,向一个无效的地址放东西,当然会出现错误.但是编译时是通过的.
程序3;
这样定义一个指针
int *i;
i=0;
反汇编是这样的:
004010A8 mov dword ptr [ebp-4],0;指针不指向任何地方
注意第三个程序必须是i=0而不能i=5或者其它数字.
i=0是初始化指针为一个null指针,通过三个小程序也能看出指针保存的都是地址,而一般变量保存的数据.哈哈,这样学习比老师在课堂上讲好理解多了.
|
|
|