演示环境分为DELPHI和VC两种环境。
先看看DELPHI
============================================================
编译器版本信息如下:
dcc (Borland Delphi for Windows) 15.0
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
============================================================
原程序
var
o:double;
begin
o := 0.022;
writeln(o);
end;
从程序角度看第一行声明变量,DELPHI怎么处理的呢?DELPHI并没在汇编中声明这个地址,关键的地方在下面的o := 0.022,
我使用的是IDA 5.2.0.908反汇编这行代码如下。
CODE:00408A23 mov dword ptr ds:dbl_40A79C, 20C49BAh
CODE:00408A2D mov dword ptr ds:dbl_40A79C+4, 3F96872Bh
ds:dbl_40A79C 应该是存储变量的地址。
40A79C应该是一个地址。 查看一下0040A79C
BSS:0040A79C dbl_40A79C dq ? ; DATA XREF: initialization_5+4Bw
BSS:0040A79C ; initialization_5+75r ...
结果如上。