请教如何得到当前指令地址EIP的值?
我可能用如下方法获得EAX的值
var
N:Integer;
begin
asm
Mov N,EAX
end;
ShowMessage('EAX='+IntToStr(N));
end;
但这个方法不适用EIP,因为EIP没定义,记得8086汇编中$就相当于当前指令的址,可以通过Mov AX,$
当前指令的地址,不知在Delphi下有没有类似的方法得到当前的指令地址??
问题点数:20、回复次数:5Top
1 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-03 17:48:20 得分 0
Function GetEIP : DWORD;
asm
POP EAX;
PUSH EAX
end;
在其他地方调用一下就行了。Top
2 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-03 17:49:17 得分 0
更正
应该是
Function GetEIP : DWORD;stdcall;
忘记加规范了,SorryTop
3 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-03 18:01:04 得分 10
再想了想,觉得刚才那样还是不安逸,
以下方法可以得到@Label处的地址
var
n : integer;
begin
asm
@Label:
LEA EAX , @Label;//这样子写,也就是得到运行到此处时的EIP
MOV n , EAX;
end;
ShowMessage(Inttohex(n,8));
end;
Top
4 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2004-12-03 21:33:07 得分 10
哈哈
给一个我最拿手的方法,病毒或PE壳最最经典的方法:
ASM
CALL @Delta
@Delta:
POP EAX // get current EIP
SUB EAX, OFFSET @Delta // calculate and adjust offset (current EIP)
END;
http://lysoft.7u7.net
Top
5 楼ChenJIM1981(ChenJIM1981)回复于 2004-12-04 13:09:48 得分 0
我还以为没有办法的呢,原来有这么多方法,太奇妙了Top




