我正在用 32 位 x86 汇编器编写,我不太确定如何处理始终与代码具有相同关系的数据。我必须使用EIP来计算绝对地址,还是有更好的方法?
问问题
2562 次
2 回答
1
您可以使用与位置无关的代码:
call @f
dd 42 ; data
@@:
pop eax ; eax contains offset of data
mov eax, cs:[eax]
或将其与 delta-offsets 一起使用
call base
base:
pop ebp
sub ebp, base ; to use small offsets, -128 to +127, and smaller instruction size
;....
mov eax, cs:[ebp+dataN-base] ; dataN-base is called "delta-offset"
;....
data1:
dd 100
;....
dataN:
dd 200
于 2010-09-16T05:28:31.553 回答
0
取决于操作系统。通常有段寄存器DS(数据段)和CS(代码段)不同的值。所以你可以使用cs前缀,如:
mov edx, cs:[eax]
在这种情况下,默认前缀是 ds 段寄存器。
于 2010-09-13T15:17:42.057 回答