首页
社区
课程
招聘
[求助]对程序运行时的一些疑问 忘前辈们指点迷津
发表于: 2017-12-8 15:37 3945

[求助]对程序运行时的一些疑问 忘前辈们指点迷津

2017-12-8 15:37
3945
今天闲来无事  打算设计一个线程 远程用来获取自己想要的api地址
push	ebp
mov	ebp,esp
sub      esp,0ch
mov	dword ptr [ebp],0000006ch
mov	dword ptr [ebp-4],6c642e69h
mov	dword ptr [ebp-8],70617370h    ;psapi.dll
lea		eax,[ebp-8]
push	eax
call LoadLibraryA
sub      esp,18h
mov	dword ptr [ebp],00006573h
mov	dword ptr [ebp-4],6c75646fh
mov	dword ptr [ebp-8],4d737365h
mov	dword ptr [ebp-0ch],636f7250h
mov	dword ptr [ebp-10h],6d756e45h   ;EnumProcessModules
push	eax
lea		ecx,[ebp-10h]
push	ecx
call GetProcAddress
mov	dword ptr [ebp-14h],eax
目的就是先加载包含函数的api   然后用获取到的api句柄  用GetProcAddress  获取想要用到api的地址

但我把这段代码贴到一个exe中  运行时却出现了问题   用GetProcAddress时却返回了0 

我记得以前在论坛看到过  说是用一个pai  必须输入表包含此api

然后我查看了下输入表   发现这个exe  确实没有 GetProcAddress    但同时也没有LoadLibraryA   为什么  LoadLibraryA   成功获取到了api的模块句柄   但 GetProcAddress 却无法使用?     望前辈们指点迷津 

本人学历不高  没学过英语  也看不懂外国人的代码  都是一点一点啃来的.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
2
你要知道一点,你的这段代码编译的时候,系统调用和数据访问编译器会帮你以机器码组织好,载入内存执行的时候加载器会做重定位。保证你调用系统调用时跳转到对应的地址。你现在把你的代码随便贴到其他代码里要保证一点你的代码不能包含外部数据访问和外部系统调用。如果有需要你自己做重定位。
这块如果不太懂,希望你多看看编译连接方面的知识。现在学习氛围太差了,希望你多努力
2017-12-8 16:22
0
雪    币: 24
活跃值: (576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好的    知道了    前几天生病了    没来的及回复
2017-12-15 08:45
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
用调试器看看堆栈情况,已经被弄得一团糟。代码可以写得再漂亮点
	pushad  
	mov     ebp, esp
	sub     esp, 20h 
	
	mov     dword ptr [esp+8],'l'
	mov     dword ptr [esp+4],'ld.i'
	mov     dword ptr [esp],'pasp'    ; psapi.dll
	push    esp
	call    LoadLibraryA
	
	mov    dword ptr [esp+10h],'se'
	mov    dword ptr [esp+0ch],'ludo'
	mov    dword ptr [esp+8],'Msse'
	mov    dword ptr [esp+4],'corP'
	mov    dword ptr [esp],'munE'    ; EnumProcessModules
	push    esp
	push    eax
	call    GetProcAddress
	mov     edi,eax

       ;  add  esp, 20h 
	mov    esp, ebp
	popad
	ret
2017-12-15 09:53
0
游客
登录 | 注册 方可回帖
返回
//