[求助]关于获取Kernel32的基地址遇到的问题~~~
[求助]关于获取Kernel32的基地址遇到的问题~~~
在找这个DLL基地址时遇到一个问题~
网上说的是因为WINDOWS为了让该程序退出时调用ExitProcess所以把ExitProcess的地址首先就压入堆栈.然后程序结束后ret到该地址.由于ExitProcess位于Kernel32里.所以倒着找就能够找到该DLL的基地址.
于是我试着按照这个思路找了下.但是出现了个问题.下面是我写的代码(VC++6.0)
#include<iostream.h>
#include<conio.h>
void main()
{
int tes=0;
_asm
{
mov eax,esp
mov eax,DWORD ptr ds:[eax]
beg:
cmp word ptr ds:[eax],'ZM'
jnz neql
cmp word ptr ds:[eax+240],'EP'
jz a
neql:
dec eax
cmp eax,0x70000000
jb over
jmp beg
over:
mov eax,0
a:
mov tes,eax
}
cout<<tes<<endl;
getch();
}
这样并不能获得程序刚运行的首个ESP
我直接用VC反汇编后是如下代码
3: void main()
4: {
00401240 push ebp ;这个才是我需要的
00401241 mov ebp,esp
00401243 sub esp,44h ;;但是这里esp就已经变了
00401246 push ebx
00401247 push esi
00401248 push edi
00401249 lea edi,[ebp-44h]
0040124C mov ecx,11h
00401251 mov eax,0CCCCCCCCh
00401256 rep stos dword ptr [edi]
5:
6: int tes=0;
00401258 mov dword ptr [ebp-4],0
..........这下面才是我写的_asm的代码
看来是没有在程序刚运行时捕捉esp.请高人提示下小弟该怎么做~~~???
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!