一个有些类似APIHOOK的问题,捆饶小弟一段时间了,请高手帮忙看看 ( 积分: 200 )

  • 主题发起人 主题发起人 精灵猪
  • 开始时间 开始时间

精灵猪

Unregistered / Unconfirmed
GUEST, unregistred user!
function&nbsp;TrueFunctionAddress(func:&nbsp;Pointer):&nbsp;Pointer;<br>var<br>&nbsp;&nbsp;Code:&nbsp;PlmportCode;<br>begin<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;func;<br>&nbsp;&nbsp;if&nbsp;func&nbsp;=&nbsp;nil&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;Code&nbsp;:=&nbsp;func;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Code.jumplnstruction&nbsp;=&nbsp;$25FF)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;Code.AddressOfPointer_ToFunction^;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;end;<br>end;<br><br><br>procedure&nbsp;doit;<br>begin<br>messagebox(0,'执行动作','',mb_ok);<br>end;<br><br>用TrueFunctionAddress(@doit);可以得到doit的地址比如我要修改&nbsp;$00404200&nbsp;这个地方改为指向doit的jmp应该如何做&nbsp;有点类似API钩子的那种方法&nbsp;可是钩的不是API是段代码而已<br>================================================<br>我的目的是&nbsp;让程序执行到00404200这个位置的时候跳到我指定的函数上执行完再跳回去&nbsp;不知道这种办法成不成&nbsp;研究了好长时间没解决&nbsp;求高手指点一下&nbsp;或者有更好的方法给小弟介绍一下&nbsp;小弟感激不禁
 
问题解决了&nbsp;不过遇到了个汇编方面的问题&nbsp;程序执行到指定位置调用了我所指定的函数&nbsp;可是我想把esi所指的字符串传递到str里&nbsp;请问应该如何做?我用mov&nbsp;str,esi不成功,另外如果不用汇编写的话&nbsp;有可能读到esi的字符串吗?&nbsp;前提是当EDX=0的时候读&nbsp;ESI&nbsp;的字符串&nbsp;希望高手帮忙解答
 
后退
顶部