#include <WINDOWS.H>
#include <WINBASE.H>
void main()
{
__asm
{
push ebp;
mov ebp,esp;
sub esp,0x0c;
mov eax,0x6376736d;
mov [ebp-0x0c],eax;
mov eax,0x642e7472;
mov [ebp-0x08],eax;
mov eax,0x6c6c;
mov [ebp-0x04],eax;
xor edx,edx;
mov [ebp-0x02],dl;
lea eax,byte ptr [ebp-0x0c];
push eax;
mov ecx,0x77BE0000;
call ecx;
push ebp;
mov ebp,esp;
sub esp,0x0c;
mov eax,0x6d6d6f63
mov dword ptr [ebp-0x0c],eax
mov eax,0x2e646e61
mov dword ptr [ebp-0x08],eax
mov eax,0x6d6f63
mov dword ptr [ebp-0x04],eax
xor edx,edx
mov byte ptr [ebp-0x1],dl
lea eax,byte ptr [ebp-0x0c]
push eax
mov eax,0x77BF93C7;
call eax;
}
exit(0);
}
代码如上所示,xp sp2+vc6.0
call ecx时就报错......0xC0000005: Access Violation,,用的代码libHandle=LoadLibrary("msvcrt.dll")获得它的地址为0x77BE0000,是不是这里地址就已经错了?调试的时候发现这个地址的机器码都是??????.如果错了,那应该修改成什么.求高手,求大牛,求真相.
------解决方案--------------------------------------------------------
先输出测试下:
HANDLE libHandle=LoadLibrary("msvcrt.dll");
printf("0x%p\n" , libHandle );
printf("LoadLibrary:0x%p\n",LoadLibrary);
看代码的话,可以知道HANDLE libHandle=LoadLibrary("msvcrt.dll"); 拿到的是一个具体的句柄。
而不带参数则有点不同。具体也没仔细研究过。
楼主可以先参考下MSDN:http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx
这是相关的参数问题:http://topic.csdn.net/u/20100723/16/1df65206-74d3-4150-83a3-ee4ef2f89d9f
------解决方案--------------------------------------------------------
你找到的地址不对,一些系统使用的是函数地址跳转表机制,所以你要找到真的那个地址而不是
跳转表里的地址的地址。