汇编中的Loadlibrary方法发生错误。为什么?

VincentSailing 2008-05-16 12:36:39
我的操作系统是win2003 sp2
根据一个教程上做的修改,修改之后发生一个0x77b70000不能read的错误

可是为什么呢?
这个0x77b70000明明就是那个Loadlibrary 的地址啊……

而且我在周围同事的机器上(xp、2000也同样做了测试,同样作了修改,可是还是出现这个错误[错误的地址根据不同的操作系统Loadlibrary的地址不同而不同])
源码:

#include <windows.h>
#include <winbase.h>

typedef void (*MYPROC)(LPTSTR); //定义函数指针

int main()
{
HINSTANCE LibHandle;
MYPROC ProcAdd;
LibHandle = LoadLibrary(“msvcrt.dll”);
ProcAdd = (MYPROC) GetProcAddress(LibHandle, "system"); //查找system函数地址
(ProcAdd) ("command.com"); //其实就是执行system(“command.com”)

return 0;
}


修改后

#include<windows.h>

void main()
{
__asm
{
//首先要LoadLibrary("msvcrt.dll");
push ebp
mov ebp,esp
xor eax,eax
push eax
push eax
push eax
mov byte ptr[ebp-0Ch],4Dh
mov byte ptr[ebp-0Bh],53h
mov byte ptr[ebp-0Ah],56h
mov byte ptr[ebp-09h],43h
mov byte ptr[ebp-08h],52h
mov byte ptr[ebp-07h],54h
mov byte ptr[ebp-06h],2Eh
mov byte ptr[ebp-05h],44h
mov byte ptr[ebp-04h],4Ch
mov byte ptr[ebp-03h],4Ch
lea eax,[ebp-0Ch]
push eax
mov edx,0x77b70000//win2003 sp2
call edx
//然后是开一个dos窗口:
push ebp
mov ebp, esp
sub esp, 0x2C
mov eax, 0x6D6D6F63
mov dword ptr [ebp-0x0C], eax
mov eax, 0x2E646E61
mov dword ptr [ebp-0x8], eax
mov eax, 0x226D6F63
mov dword ptr [ebp-0x4], eax
xor edx, edx
mov byte ptr [ebp-0x1], dl
lea eax, dword ptr [ebp-0xC]
push eax
mov eax, 0x77b8a083//win2003 sp2
call eax
}
exit(0);

}


...全文
149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhwz_8882 2008-05-17
  • 打赏
  • 举报
回复
windows 2003 的LoadLibrary地址是0x77E1850D
zara 2008-05-16
  • 打赏
  • 举报
回复
具体哪行出现的错误? 上面的代码, 有个明显的问题, 就是没有将 00 字节写入到 "msvcrt.dll" 的末尾, 即应该有 mov byte ptr[ebp-02h], 00 这么一行. 下面的 "command.com" 也有类似的问题吧

21,459

社区成员

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

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