第十章 内存管理部分 2.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 内存管理部分 2

标 题: 【原创】windows下32位汇编语言学习笔记 第十章 内存管理部分 2 作 者: jasonnbfan 时 间: 2009-05-23,01:24:25 链 接: /showthread.php?t=89608 windows下32位汇编语言学习笔记?第十章?内存管理部分?2 这两天通过写汇编程序,越来越发现汇编很有意思。自己规划每一个寄存器的使用,设计每一个跳转和分支,这不同于使用其他高级语言,所有资源对于编程者都是透明的,让我有一种尽在掌握的感觉,而且每写一个程序都很有成就感,这是我用别的语言写程序所没有的感觉。 不管学习什么东西,实践是最重要的,计算机程序设计这种实践性很强的科目更是如此。有的东西看似简单,实际动起手来可就不那么容易了,所以必须要告诫大家,学习计算机程序设计,必须要勤动手,不能懒惰。如果你能够把?windows程序设计,windows核心编程,windows32位汇编语言,这3本书的所有例子自己用汇编写一遍,我可以很负责的告诉你,你已经是高手了。 言归正传,笔记继续 汇编的跳转,分支,循环指令 在继续程序之前,我觉得有必要把汇编的跳转,分支,循环指令总结一下,有一点必须要清楚,我们现在的目的是学习汇编,为将来的更深入的学习逆向打下良好的基础。这两天在写程序的过程中,我发现我背离了我的初衷,看看以前我的代码例子,完全是用C程序的思路换成汇编语法,包括罗云彬这本书里的例子程序也是如此。大量的条件判断使用masm伪指令,比如.if,虽然使用这种伪指令的汇编程序更利于阅读,结构更加清晰,但是,我感觉根本没有学到汇编的精髓,或者说没有立即汇编的真谛。 标号: 标号的定义是,代码中的某个具体位置。 在我们的源代码中,标号就好比书签,让我们设计分支,循环语句时引导程序的运行流程。在编译器中,标号的意义在于标志处跳转指令和目的地址的范围,用以计算这段范围内的字节数,用于生成机器码。 为什么我这么理解,用jmp指令举个例子,先看看下面的代码,这是一个典型的Dialog窗口回调函数。 _DlgProc?proc?hwndDlg,uMsg,wParam,lParam ??mov?eax,uMsg ??cmp?eax,WM_COMMAND ??jne?_init ??invoke?_DlgCmd,hwndDlg,wParam,lParam ??jmp?_ret _init:????????????????;标记处理init消息?????????????? ??cmp?eax,WM_INITDIALOG ??jne?_close ??invoke?LoadIcon,hInstance,IDI_VMALLOC ??invoke?SendMessage,hwndDlg,WM_SETICON,ICON_BIG,eax ??jmp?_initret _close:??????????????;标记处理close消息 ??cmp?eax,WM_CLOSE ??jne?_ret ??invoke?EndDialog,hwndDlg,0 ??jmp?_ret _initret:??????????????;对于WM_INITDIALOG消息,处理完成后必须返回1 ??mov?eax,TRUE _ret:????????????????;标记返回?????????????? ??mov?eax,FALSE ??ret _DlgProc?endp 这是一个正真的(指不用伪指令)汇编语言程序,里面用到得其他转移以后再说,现在先看jmp指令,刚才我说了,在我们的源代码里,标号就好比书签的作用,通过标号,我们指定程序的运行流程。 再看看这段程序反汇编以后的内容,先只关注里面的jmp指令. ?/.??55????????????PUSH????EBP?|.??8BEC??????????MOV?????EBP,?ESP 0040148A??|.??8B45?0C???????MOV?????EAX,?DWORD?PTR?SS:[EBP+C] 0040148D??|.??3D??CMP?????EAX,?111?????????牋牋牋牋牋牋牋牋;牋Switch?cases?0..111)|.牋75?0牋牋牋牋燡NZ牋牋燬HORT燤yVMAllo.004014A4|.牋FF75?4牋牋牋燩USH牋牋DWORD燩TR燬S:[EBP+14]牋牋牋牋牋牋;?Arg3;燙ase?11?WM_COMMAND)爋f爏witch?040148D|.牋FF75?0牋牋牋燩USH牋?

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档