回 帖 发 新 帖 刷新版面

主题:求教dll调用的问题

刚刚学习delphi dll远程注入,有些东西不太明白,来请教老师.
我写了个dll远程注入到宿主程序,通过HOOK内置窗体调用dll的函数一切正常,但如果通过应用程序调用嵌入汇编的函数就有问题了,主要是访问地址违规,请好心人指点:
1.如果是这样就没问题
Function addHp():boolean;stdcall;// var
begin
  showMessage('开始外部调用dll');
  asm
  mov edx,$00d947e4
    mov eax,$00d91f74
  end;
  showMessage('调用结束');
end;
2.如果是这样就有问题了
Function addHp():boolean;stdcall;// var
begin
  showMessage('开始外部调用dll');
  asm
  mov edx,[$00d947e4]
    mov eax,[$00d91f74]
  end;
  showMessage('调用结束');
end;

3.这样也有问题
Function addHp():boolean;stdcall;// var
begin
  showMessage('开始外部调用dll');
  asm
  mov edx,$00d947e4
    mov eax,$00d91f74
  mov ecx,$00453014
  call ecx
  end;
  showMessage('调用结束');
end;
总结了下,就是使用寄存器没问题,但访问内存地址就不行,使用CALL指令也不行,求大虾指点了!

回复列表 (共4个回复)

沙发

用絕對地址?你確定那個地址有你需要的東西?

板凳


是的,那是一个小程序,我已经测试正确了的,就是外部调用不行

3 楼

Dll與EXE有一個根本性的不同就是運行環境的不同。當你函數是在DLL導出時,那它的環境是依賴于宿主程序的,所以注入時用DLL居多。
而當你是EXE導出時,則需要人為的修改EXE文件頭,否則你訪問的地址將是未定義的~~~~
因為EXE當DLL載入時,它有很多東西都不會被初始化,比如全局變量、靜態變量等等。

相類似的問題還有EXE導出的函數往往無法當成DLL函數調用。

4 楼

谢谢3楼的指点!
你能不能再讲讲如何才能通过EXE调用dll,使dll能读取被注入的宿主程序的内存呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册