代码如下
procedure test;
var
i:Byte;
begin
i:=0; 我在此处下断点
i:=not i;
end;断点执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.69: I:=0;
00520654 C645FF00 mov byte ptr [ebp-$01],$00 ------ i的地址是[ebp-$01]堆栈为
0018F534 44 00 4A 97
0018F530 C8 77 08 69单步执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.70: i:=not i;
00520658 F655FF not byte ptr [ebp-$01]堆栈为
0018F534 44 00 4A 97
0018F530 C8 77 08 69
单步执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.72: end;
0052065B 59 pop ecx堆栈为
0018F534 44 FF 4A 97 问题在这 44后面的位置 那个位置应该是[ebp+01],而实际i的地址是[ebp-$01]
0018F530 C8 77 08 69可能我表达的有问题
其实就是想知道内存区域的变化
我以前是学win32汇编的 来搞搞delphi 呵呵
procedure test;
var
i:Byte;
begin
i:=0; 我在此处下断点
i:=not i;
end;断点执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.69: I:=0;
00520654 C645FF00 mov byte ptr [ebp-$01],$00 ------ i的地址是[ebp-$01]堆栈为
0018F534 44 00 4A 97
0018F530 C8 77 08 69单步执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.70: i:=not i;
00520658 F655FF not byte ptr [ebp-$01]堆栈为
0018F534 44 00 4A 97
0018F530 C8 77 08 69
单步执行后 反汇编
此时ebp 为 0018F534
Unit1.pas.72: end;
0052065B 59 pop ecx堆栈为
0018F534 44 FF 4A 97 问题在这 44后面的位置 那个位置应该是[ebp+01],而实际i的地址是[ebp-$01]
0018F530 C8 77 08 69可能我表达的有问题
其实就是想知道内存区域的变化
我以前是学win32汇编的 来搞搞delphi 呵呵
解决方案 »
- 哪位大哥有《Delphi 5.x 分布式多层应用电子商务篇》的光盘,能否发一份到我的邮箱
- 【估计这一帖又要打水漂了】关于多人语音聊天的技术!
- 可使PC SPEAKER播放WAV的控件,关注!
- 《与技术总监和Borland产品专家面对面》之庆祝一周年活动
- 顶者有分 哪有 通用查询模块 用程序自己定制查询条件 提供者单独给高分
- 弱智问题
- 对如何实现第二光标感兴趣的朋友请进来:
- 在toolbar上放一个BitBtn,如何让它是flat型的呢?
- 请教关于数据库的问题?
- 怎么送30分都没人关心哟?
- 请教高手:如何判断目标光标停留在哪个控件里面?
- delphi7中自带的TWebBrowser控件调用的IE内核是本机的吗?
i:=0; 这一句是:分配内存,并把这4字节的内存赋值为0;
i:= not i; 这一句是:把i内存处的值放到寄存器,然后进行反运算,最后把运算后的值放到i所处的内存处
就是反运算的
i的地址是ebp-1,即0018F533啊!!!那个ebp+1的地方变成ff是在执行pop ecx之后啊,而在pop ecx之前,ebp-1的地方就变为ff了!!!