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

VincentSailing VincentSailing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的操作系统是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);

}


...全文
评论 2
收藏 已收藏
分享
返回顶部
VincentSailing
汇编语言 21,500 成员 41,619 内容