请问一下子,这5句代码是什么意思?

rabo 2003-08-26 03:21:04
hModule=LoadLibrary("user32.dll");
pfMessageBoxA=GetProcAddress(hModule,"MessageBoxA");
BYTE MessageBoxACode[5]
_asm
{
lea edi,MessageBoxACode
mov esi,pfMessageBoxA
cld
movsd
movsb
}

return CWinApp::InitInstance();
}




...全文
35 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuanyuanhaobo 2003-08-27
  • 打赏
  • 举报
回复
这是一段好代码~

这段程序是不是想用回调机制啊~~

spbabyba 2003-08-27
  • 打赏
  • 举报
回复
xuanyuanhaobo(轩辕浩波)
请教: 回调机制怎么用,谢谢!
spbabyba 2003-08-27
  • 打赏
  • 举报
回复
W32API(李诚) ( ) 信誉:100
请教: 回调函数有必要用上面的方法保存API代码吗?
mov wndClass.lpfnWndProc, offset ProcWinmain
我们在注册窗口的时候只把回调函数指针给系统就行了.
Yashmak 2003-08-27
  • 打赏
  • 举报
回复
错了,我指得是
BYTE MessageBoxACode[5] 的长度为五个字节
Yashmak 2003-08-27
  • 打赏
  • 举报
回复
BYTE的长度是五个字节,即
1db+1byte
所以先用movsd传送1db,
再用movsb传送1byte

这样作的好处是:
X86处理32位数时,最快,从而比单纯的五次movsb效率高
rabo 2003-08-27
  • 打赏
  • 举报
回复
厉害!!Yashmak(双层面纱) 的话解除了我心中的疑惑...

也就是说这代码是没有问题的了哦!就是保存MessageBoxA的前5个字节哦!对吧!
W32API 2003-08-27
  • 打赏
  • 举报
回复
唉,你可以自己设置一个 Timer,
并使一个 CALLBACK(Calling convention for callback functions.)类型的函数与之关联,在该 Timer 生效的时候,操作系统会调用这个函数

CALLBACK 定义来源于 Platform SDK: Windows API 之 Windows Data Types
spbabyba 2003-08-26
  • 打赏
  • 举报
回复
hModule=LoadLibrary("user32.dll");
//调用动态链接库.
pfMessageBoxA=GetProcAddress(hModule,"MessageBoxA");
//得到MessageBoxA的指针.
BYTE MessageBoxACode[5]
//定义数组.
_asm
{
//内嵌汇编
lea edi,MessageBoxACode
mov esi,pfMessageBoxA
//分别调置,源目的地址寄存器.(这里好你有错)
cld (方向标志清零)
movsd
movsb
//传送数据串.
}
//pfMessageBoxA 是函数指针,不是数据指针,这里好像用错了

return CWinApp::InitInstance();
}
W32API 2003-08-26
  • 打赏
  • 举报
回复
hModule=LoadLibrary("user32.dll"); load user32.dll
pfMessageBoxA=GetProcAddress(hModule,"MessageBoxA"); get MessageBoxA function point, here deal with struture pfMessageBoxA.
BYTE MessageBoxACode[5]
_asm
{
lea edi,MessageBoxACode ; get destination address
mov esi,pfMessageBoxA ; get source address
cld
movsd ; move 32-bit data
movsb ; move 8-bit data
}

return CWinApp::InitInstance();
}
sjf331 2003-08-26
  • 打赏
  • 举报
回复
lea edi,MessageBoxACode ;取地址
mov esi,pfMessageBoxA
cld ;DF=0
movsd
movsb ;字符串拷贝,源串偏址在SI中,目的串偏址在DI中.
ajn_sailing 2003-08-26
  • 打赏
  • 举报
回复
不是有movsd吗?为什么还要movsb?
rabo 2003-08-26
  • 打赏
  • 举报
回复
应该没有错吧,
好像是把CALL MessageBoxA的机器码或者MessageBoxA的地址保存在MessageBoxACode[5]里面

21,459

社区成员

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

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