能力值:
( LV8,RANK:130 )
|
-
-
2 楼
我对这个不是很了解
只是查了下API手册上的定义
MessageBoxA和MessageBox区别是在于是否支持 UNICODE
它的压栈是先进后出的
第一个 PUSH 是压入行为,正如你上所Style = MB_OK|MB_APPLMODAL
第二个 PUSH 是压入标题,如你的0043A370,0043A370是标题的地址
第三个 PUSH 是压入对话框的内容,正如你的那个,先装入地址到EAX,然后压入。
第四个 PUSH 是压入HWND表识,NULL代表无宿主窗口
然后一个CALL调用就出来了。
这是一般的汇编编程,至于那个USER32是个库。MessageBox在那有定义
另一种调用方法是罗书上讲的
invoke MessageBox,null,offset text,offset caption,0
这在汇编的书,WIN32汇编上有详细的介绍。你可以去罗云彬的论坛上看下
我也是很菜的,所以讲不清楚的地方还望见谅
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢楼上的兄弟
汇编很有趣啊,以前没好好学啊,悔
关键的是上面那个CALL格式没见过
不知道和 call 004049A0 的区别是什么
各位哥哥再帮忙解答下,谢谢
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
第一个是API函数调用
那个call 004049A0 可能是普通函数调用或者是过程调用
我不是很清楚。大概意思是这样的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢了
我用peid查看破解文件的相关进程,发现user32是windows\systme32里面的一个文件,可能是相关的函数库吧。我大胆猜测一下可能是调用MessageBoxA的库?
但是这种CALL的格式在书里没发现。。
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
那个USER32不是操作系统的
而是MASM32中INCLUDE里面的UER32.INC
一般W32ASN都要加上inluce user32.inc
MessageBoxExA在里面有定义
MessageBoxExA的定义如下:
MessageBoxExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
|
能力值:
( LV9,RANK:1250 )
|
-
-
7 楼
呵呵,楼上的兄弟,那个USER32不是操作系统的?
对于windows来说,USER32一定是操作系统的(我不知道Unix或者Linux有没有这个库,所以用了“对Windows来说”)。
MessageBox有两种版本:MessageBoxA和MessageBoxW。其中MessageBoxA对应ANSI版本,MessageBoxW对应Unicode版本(也就是Wide版本,主要是为了适应东方字体的双字节而设计的)。至于两者最终的关系,你在看雪的FAQ中找一找,我不会告诉你太多,那样会使你变得懒惰,你得自己查资料并自己思考。顺便告诉你这些知识点在《Windows程序设计》第二章中也可以找到相关信息,那可真是一本不错的书。
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
最初由 happytown 发布 呵呵,楼上的兄弟,那个USER32不是操作系统的? 对于windows来说,USER32一定是操作系统的(我不知道Unix或者Linux有没有这个库,所以用了“对Windows来说”)。
谢谢楼上的
我不是说了吗?我不是很清楚,我很菜的,谢谢你的提醒。看来要好好学习了。以前做的那些只是凭感觉和运气加了点谨严和耐心,就是缺乏必要的知识。
呵呵
做cracker的五个必要条件是: 1. 知识 2. 经验 3. 感觉 4. 耐心 5. 运气 。
|
能力值:
( LV9,RANK:530 )
|
-
-
9 楼
最初由 snheart 发布 谢谢楼上的兄弟 汇编很有趣啊,以前没好好学啊,悔 关键的是上面那个CALL格式没见过 不知道和 call 004049A0 的区别是什么 各位哥哥再帮忙解答下,谢谢
1.) E8 xx xx xx xx (5 字节)
E8 + <4字节的数:offset>, call 的地址就是下一条指令的地址 + offset, 对本例而言, 就是:
00401E5F E8 3C2B0000 call 004049A0
00401E64 ...
004049A0 = 00401E64 + 00002B3C
2.) FF15 yy yy yy yy (6 字节)
FF15 + <4字节的数:地址>, call 的地址就是[yyyyyyy]中的值, 对本例而言, 就是:
00401E5F |. FF15 74954300 call [<&USER32.MessageBoxA>]
在 00439574 中放着 MessageBoxA 的地址.
在我的机器上, MessageBoxA的地址是77E33327. 那么结果就应该是:
00439574: 22 33 E3 77
|
|
|