LoadLibrary("msvcrt.dll")在汇编中的表示

zccJsCsdn 2012-01-11 05:44:37
#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,是不是这里地址就已经错了?调试的时候发现这个地址的机器码都是??????.如果错了,那应该修改成什么.求高手,求大牛,求真相.
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanxiqiao 2012-01-12
  • 打赏
  • 举报
回复
楼主这是反汇编了一个程序,然后把一个函数的代码直接拷进去运行的吧,会有问题的。
大熊猫侯佩 2012-01-12
  • 打赏
  • 举报
回复
你找到的地址不对,一些系统使用的是函数地址跳转表机制,所以你要找到真的那个地址而不是

跳转表里的地址的地址。
tanxiqiao 2012-01-12
  • 打赏
  • 举报
回复
invoke LoadLibrary,offset szModuleName
晓敬 2012-01-12
  • 打赏
  • 举报
回复
直接参数进入寄存器,然后call不行吗?
AT&T格式是可以的不知道Intel格式行不行
hili210 2012-01-11
  • 打赏
  • 举报
回复
先输出测试下:
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
zccJsCsdn 2012-01-11
  • 打赏
  • 举报
回复
额.找到地址了.但是不知道为什么用libHandle=LoadLibrary("msvcrt.dll");得到的地址并不是需要的,直接用printf("LoadLibrary:0x%p\n",LoadLibrary);却能得到xp2的msvcrt.dll地址.先不结贴

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧