首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

LoadLibrary("msvcrt.dll")在汇编中的表示,该如何处理

2012-03-25 
LoadLibrary(msvcrt.dll)在汇编中的表示#include WINDOWS.H#include WINBASE.Hvoid main(){__asm{pu

LoadLibrary("msvcrt.dll")在汇编中的表示
#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.html
[解决办法]
你找到的地址不对,一些系统使用的是函数地址跳转表机制,所以你要找到真的那个地址而不是

跳转表里的地址的地址。

热点排行