var
byte_0_462DE1:pointer;
asm
movzx ecx,byte ptr [byte_0_462DE1]
end;ECX的值怎么会是byte_0_462DE1本身的地址? 而不是byte_0_462DE1所指向地址的值呢???郁闷!!
byte_0_462DE1:pointer;
asm
movzx ecx,byte ptr [byte_0_462DE1]
end;ECX的值怎么会是byte_0_462DE1本身的地址? 而不是byte_0_462DE1所指向地址的值呢???郁闷!!
解决方案 »
- 用delphi做的程序怎么能够嵌入到web中去,急,马上给分
- 菜鸟问题!!!!!!!
- 简单的问题:如何修改记录中某个字段的值?
- 如何用程序实现启动/停止局域网内其它机器上的SQL Server 服务器?
- 一个小问题
- 救命啊!!webbrowser1.ExecWB(OLECMDID_SAVEAS,OLECMDEXECOPT_DODEFAULT);
- 有關DBGrid!很急!在線!
- 如何动态的创建N个TEdit控件,并将它们整齐排列的显示在窗口上
- 这个星期才考完期末考试,大学生活时间不多了。好久没有来论坛灌水,送分了各位。
- delphi5在win2000上能用吗?
- indy发信,为什么不成功
- 我在做一个自定义组件,到处是错误?
var
byte_0_462DE1:pointer;
begin
byte_0_462DE1:=pointer($462DE1); //byte_0_462DE1本身的地址为$12f5b8,它指向$462DE1
asm
movzx ecx,byte ptr [byte_0_462DE1] //结果ecx为$E1
end;
lea ecx, [byte_0_462DE1]
完整代码片段如下
const
byte_0_462DE0: array[0..55] of Byte = (
$38, $30, $28, $20, $18, $10, $08, $00, $39, $31, $29, $21, $19, $11, $09, $01,
$3A, $32, $2A, $22, $1A, $12, $0A, $02, $3B, $33, $2B, $23, $3E, $36, $2E, $26,
$1E, $16, $0E, $06, $3D, $35, $2D, $25, $1D, $15, $0D, $05, $3C, $34, $2C, $24,
$1C, $14, $0C, $04, $1B, $13, $0B, $03);var
byte_0_462DE1: Pointer = @byte_0_462DE0[1];asm
xor eax,eax
movzx ecx,byte ptr [eax+byte_0_462DE1]
end;我在监视窗口输入 pbyte(byte_0_462DE1)^的值是正常的,但是ECX的值就是等于byte_0_462DE1本身的地址没看出哪里有错误望高手指点。。
byte_0_462DE1和byte_0_462DE0的内存地址并不是连续的,而在DELPHI的监视窗口里看见他们的内存地址是连续的。。晕 照理说byte_0_462DE1和byte_0_462DE0的内存地址应该是连续的。 这是怎么回事???
movzx ecx,byte ptr [eax+byte_0_462DE1]
byte_0_462DE1的确得到的是自己的地址,以前研究过,有一个简单的方法,现在想不起来了,但要实现你的功能,也简单
1.根本不要用byte_0_462DE1,而直接用
movzx ecx,byte ptr [eax+ byte_0_462DE0+1] //这样没问题
2.多加一条:
mov ecx,byte_0_462DE1
movzx ecx,byte ptr [eax+ ecx] //这样也可以