当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 在经典的汇编语言教程中,函数调用时堆栈的使用都是着重讲解的问题。
 

 

 ·注册activex控件的几种方法    »显示摘要«
    摘要:  文/黄昱   使用activex控件可快速实现小型的组件重用、代码共享,从而提高编程效率,降低开发成本。但是activex控件对于最终用户并不能直接使用,因为activex控件必须先在windows中注册。注册activex控件一般来说有六种途径,它们有各自的优点,运用范围也不同。   regsvr32.exe注册   regsvr32.exe位于windows目录的system子目......
 ·串行通信与重叠i/o    »显示摘要«
    摘要:win 32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用api函数createfile来打开或创建的。该函数的声明为: handle createfile( lpctstr lpfilename, // 文件名 dword dwdesiredaccess, // 访问模式 dword dwsharemode, // 共享模式 lp......


Win32程序函数调用时堆栈变化情况分析
    在经典的汇编语言教程中,函数调用时堆栈的使用都是着重讲解的问题.如今随着高级语言的越来越完善,单纯使用汇编开发的程序已经不多了.但对函数调用时堆栈动向的了解仍有助于我们明晰程序的执行流程,从而在程序编写与调试的过程中有一个清晰的思路.

【程序编程相关:Windows2000的“隐形”武器…

【推荐阅读:Windows2000的“隐形”武器…

一.调用约定 【扩展信息:Win2000中文版防范输入法漏…

在win32中,有关函数的调用主要有两种约定.

1._stdcall

        以__stdcall方式调用的函数有以下特征:

    •  参数由右至左压栈

    • 调用返回时,堆栈由被调函数调整

2.__cdecl

__cdecl约定是c/c++函数的默认调用约定.它有以下特征:

    • 参数由右至左压栈

    • 调用返回时,堆栈由调用者调整

二.win32函数调用过程

1.    压入参数

这里依据以上的调用方式将调用者给出的参数一一压入堆栈.

2.    压入断点

当程序执行到call指令的时候,当前语句的地址作为断点地址压入堆栈.

3.    跳转

eip的值被重新设置为被调函数的起始地址.

4.    mov ebp, esp

这里ebp被用来在堆栈中寻找调用者压入的参数,同时作为调用者堆栈指针的一个备份.在此前还应该执行一条:

push ebp

把ebp中原来的数值保存.

5.    sub esp,n

这里n是函数内局部变量的总字节数加上一个整数,一般为40.此后esp即为被调函数的堆栈指针了.

6.    初始化esp ~ esp-n之间的n字节空间

这是对堆栈中已分配给局部变量使用的内存空间的初始化,一般全部设置为0xcc.


...   下一页
    摘要:信息产业部电子第二十二研究所青岛分所 郎锐 一、引言 我们可以在应用程序中毫不费力的捕获在本程序窗口上所进行的键盘操作,但如果我们想要将此程序作成一个监控程序,捕获在windows平台下任意窗口上的键盘操作,就需要借助于全局钩子来实现了。 二、系统钩子和dll 钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE