能力值:
( LV2,RANK:10 )
|
-
-
2 楼
typedef HMODULE (WINAPI *Type_LoadLibraryW)(__in LPCTSTR lpLibFileName);
Type_LoadLibraryW DetourLoadLibraryW=NULL;
DetourLoadLibraryW =(Type_LoadLibraryW)GetProcAddress(hKernel,"LoadLibraryW");
Type_LoadLibraryW original=LoadLibraryW;
结果:
DetourLoadLibraryW 0x7707ef42
original 0x7707ef42
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
不可能的,你LoadLibrary的地址跟加载器加载的地址都一样了,怎么可能得到的地址不一样呢?
;;;;;;; a.DLL
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.code
DllEntry proc a:DWORD,reason:DWORD,cdd:DWORD
mov eax,1
ret
DllEntry endp
iAdd proc a:DWORD,b:DWORD
mov eax,a
add eax,b
ret
iAdd endp
end DllEntry
;;;;;;;;;;;;;;;;;;;;;;;call.asm
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include Strings.mac
includelib user32.lib
includelib kernel32.lib
includelib a.lib
iAdd PROTO a:DWORD,b:DWORD
.code
testfunadd proc hmodle:DWORD
lea eax,[iAdd+2] ; 跳过 jmp 指令 FF25 得到保存iAdd的地址
mov eax,[eax] ;导入表中的地址
mov eax,[eax] ;获取iAdd地址
push eax
invoke GetProcAddress, hmodle, $CTA0("iAdd")
pop ebx
.if eax != ebx
invoke MessageBoxA, NULL, $CTA0("iAdd 函数地址不一致"), $CTA0("error"), NULL
.elseif
invoke MessageBoxA, NULL, $CTA0("iAdd 函数地址是一致滴"), $CTA0("right"), NULL
.endif
ret
testfunadd endp
start:
invoke GetModuleHandleA, $CTA0("a.dll")
push eax
invoke LoadLibraryA, $CTA0("a.dll")
mov ebx,[esp]
.if eax != ebx
invoke MessageBoxA, NULL, $CTA0("基址不同"), $CTA0("error"), NULL
.endif
pop eax
invoke testfunadd, eax
invoke ExitProcess,NULL
end start
取出来地址相同的好吧
|
能力值:
( LV13,RANK:400 )
|
-
-
4 楼
同学,要打好基础。
首先#pragma comment(lib,"a.dll")这个是肯定编译不过的
因为这种写法只是告诉编译器要使用静态库,你写的是a.dll,如果a.dll不再你的默认库路径下,编译器会提示打不开a.dll,就算你把a.dll放在了你的默认库路径下,编译到后面也会提示你无法解析的符号。
另外,你说的方法是可行的,先静态连接一个库,然后再去显示加载那个DLL,编译出来目标程序后a.exe,当你运行a.exe的时候,Windows会先去找a.exe的倒入表,发现你静态链接了那个a.dll就会把a.dll加载进来,然后你又显示的加载了那个DLL,但是LoadLibrary并不会再把a.dll加载进来,因为已经被加载过了,所以直接返回已经存在的模块句柄,你所说的获取同一个函数的地址不同,是不可能的。
好好打基础。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
哦,知道了 你说的非常对,一定会努力打基础的。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
太厉害的纯汇编写的,非常感谢你。我现在还在测试,不知道究竟在什么时候会发生那种情况。
|