自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (29)
  • 收藏
  • 关注

空空如也

ipwndfu-master.zip

ipwndfu-master.zip

2021-11-07

600句金玉良言,让你彻悟人生.txt

600句金玉良言,让你彻悟人生.txt

2021-11-07

智慧千言.pdf

智慧千言.pdf

2021-11-07

智慧千言 27.txt

智慧千言 27.txt

2021-11-07

Ant Renamer 2.12.zip

Ant Renamer 2.12.zip

2021-11-07

看雪论坛精华21.txt

看雪论坛精华21.txt

2021-11-07

wp手机助手电脑版.zip

wp手机助手电脑版.zip

2021-11-07

AppDataManageTool_2.2.0.0_ARM.zip

AppDataManageTool_2.2.0.0_ARM.zip

2021-11-07

mek MRP引导程序

mek MRP引导程序 mek MRP引导程序 mek MRP引导程序 mek MRP引导程序 mek MRP引导程序

2010-10-26

shell设计入门.TXT shell设计入门

shell设计入门 shell设计入门 shell设计入门 shell设计入门

2010-07-09

shell经典教程 .TXT shell经典教程

shell经典教程 shell经典教程 shell经典教程 shell经典教程 shell经典教程

2010-07-09

Perl语言入门(第四版).TXT Perl语言入门(第四版)

Perl语言入门(第四版) Perl语言入门(第四版) Perl语言入门(第四版)Perl语言入门(第四版)

2010-07-09

Linux网络编程 Linux网络编程.TXT

Linux网络编程 Linux网络编程 Linux网络编程

2010-07-09

Linux进程编程介绍 Linux进程编程介绍.TXT

Linux进程编程介绍 Linux进程编程介绍 Linux进程编程介绍

2010-07-09

Linux操作系统下C语言编程入门.TXT

Linux操作系统下C语言编程入门 Linux操作系统下C语言编程入门 Linux操作系统下C语言编程入门

2010-07-09

linux_shell_编程.TXT

linux_shell_编程 linux_shell_编程 linux_shell_编程

2010-07-09

Linux_C编程一站式学习_最新版.TXT

Linux_C编程一站式学习_最新版 Linux_C编程一站式学习_最新版 Linux_C编程一站式学习_最新版

2010-07-09

AWK命令详解 sed命令详解

AWK命令详解 sed命令详解 AWK命令详解 sed命令详 AWK命令详解 sed命令详解解

2010-06-19

NetBSD文档计划中文版

NetBSD文档计划中文版 NetBSD文档计划中文版 NetBSD文档计划中文版

2010-06-19

NetBSD文档计划

NetBSD文档计划 NetBSD文档计划 NetBSD文档计划

2010-06-19

Linux中文HOWTO

Linux中文HOWTO Linux中文HOWTO Linux中文HOWTO

2010-06-19

Linux From Scratch中文技术文档

Linux From Scratch中文技术文档 Linux From Scratch中文技术文档 Linux From Scratch中文技术文档

2010-06-19

FREEBSD使用者手册简介

FREEBSD使用者手册简介 FREEBSD使用者手册简介 FREEBSD使用者手册简介

2010-06-19

ARM汇编语言教程 ARM汇编语言教程 ARM汇编语言教程 ARM汇编语言教程

ARM汇编语言教程ARM汇编语言教程ARARM汇编语言教程M汇编语言教程ARM汇编语言教程ARM汇编语言教程

2010-03-11

UNIX高级编程 计算机科学丛书

前言 引言 本书说明Unix系统的程序设计界面—系统调用界面和标准C提供的很多函数。这些对编写在Unix系统中运行的程序是非常有帮助的。 与大多数操作系统一样,Unix对程序运行提供了大量的服务—打开文件、读文件、启动一道新程序、分配存储区以及获得当前时间等。这些被称之为系统调用界面(system call interface)。另外,标准C库提供了大量C程序广泛使用的函数(格式化输入变量的值、比较两个字符串等)。 系统调用和库函数系统上由Unix程序员手册中的第2,3部分说明。本书不是这些内容的重复。该手册没有给出实例,也不说明这些界面和函数设计的合理性,而这些则正是本书所要弥补的。 Unix标准 在八十年代出现的大量Unix版本的基础上,八十年代后期开始制定了几个国际标准,包括:C程序设计语言的ANSI标准、IEEE POSIX标准族(还在继续制定)、X/open可移植性指南。 本书也说明这些标准,但是并不只是说明这些标准本身,而是着重说明它们与广泛受到重视的一些实现之间的关系,这些实现主要是系统V版本4,以及将发布的4.4BSD。这样也就提供了一种对现实世界的说明,而这正是标准本身及描述符的文献所缺少的。 本书的组织   本书分成6个部分: 1. 对Unix程序设计概念和术语的概要描述(第一章),以及对各种Unix标准化工作和Unix实现的讨论(第二章)。 2. 不带缓存的I/O(第三章)、文件和目录(第四章、标准I/O库(第五章)以及系统数据文件(第六章)。 3. 进程—Unix进程的环境(第七章)、进程控制(第八章)、进程之间的关系(第九章)以及信号(第十章)。 4. 终端I/O(第十一章)、高级I/O(第十二章)以及精灵进程(第十三章) 5. IPC——进程间通信(第十四、十五章)。 6. 实例—一个数据库的函数库(第十六章)、与Postscrip打印机的通信(第十七章)、调制解调器拨号程序(第十八章)以及使用伪终端(第十九章)。 如果对C语言较熟悉并具有某些应用Unix的经验,那么对阅读本书是非常有益的,但是并不要求读者具有Unix的程序设计经验。本书面向的主要读者是:熟悉Unix的程序员,熟悉某个其它操作系统的程序员,他们希望了解大多数Unix系统提供的各种服务的详细情况。 本书中的实例 本书包含大量实例—大约10000行源代码。所有实例都用ANSL C语言编写。在阅读本书时,你应当有一本你所使用的UNIX系统的Unix程序员手册,关于实施的细节等有时需参考该手册。 对于几乎每一个函数和系统调用,本书都用一个小的完整的程序进行演示。这可以让我们清楚地了解它们的用法,包括参数、返回值等。有些小程序还不是以说明库函数和系统调用的复杂功能和应用技巧,所以本书中也包含了一些较大的实例(第十六、十七、十八和十九章)。 所有实例的源代码文件都可经Internet用匿名ftp取到,其主机站点是ftjp.uu.net,文件名是published/books/stevens.advprog.tar.Z。在你的机器上可对这些源代码进行修改并运行它们。 用于测试实例的系统 不幸的是所有操作系统都在不断变更,Unix也不例外。下图示出了系统V和4.XBSD的最近进展情况。 4.XBSD是由加州大学贝克莱分校计算机系统研究组开发的。该研究组也发布BSD NET1和BSD NET2版,它们包含了4.XBSD系统公众可用源代码。SVRX是AT& T的系统V的简称。XPG3是X/Open可移植性指南的第三次发行本的简称。ANSI C是C程序设计语言的ANSI标准。POSIX.1是Unix类系统界面的IEEE和ISD标准。2.2和2.3节将对这些标准和版本之间的差别作更多说明。 在本书中,用4.3+BSD表示BSD NET2和4.4BSD之间的Unix系统。 在本书写作时,4.4BSD尚未发行,所以不能称一个系统为4.4BSD。尽管为此, 需要一个简单的名字以引用此种系统,在全书中我们用4.3+BSD。 本书中的大多数实例曾在4种Unix系统上运行过,它们是: 1. U.H公司(UHC)的Unix System V/386 Release4.0 Version 2.0。该系统在Intel 80386处理机上运行。 2. 加州大学贝克莱分校计算机科学系(Computer Science Division)计算机系统研究组的4.3+BSD,该系统在一台HP工作站上运行。 3. 贝克莱软件设计公司的BSD/386(是BSD Net2的导出版),该系统在一台Intel 80386处理机系统上运行。该系统几乎与我们称之为4.3+BSD的相同。 4. Sun Microsystems的Sun OS4.1.1和4.1.2(该系统与贝克莱系统有很深的渊源团系,但也包含了很多系统V的特征),这些系统在SPARC工作站SLC上运行。 本书提供了与测试有关的许多时间信息,也说明了用于测试的系统实际系统。 目录 译者序 前言 第1章 UNIX基础知识 1.1 引言 1.2 登录 1.2.1 登录名 1.2.2 shell 1.3 文件和目录 1.3.1文件系统 1.3.2 文件名 1.3.3路径名 1.3.4工作目录 1.3.5起始目录 1.4输入和输出 1.4.1文件描述符 1.4.2标准输入、标准输出和标准出错 1.4.3不用缓存的I/O 1.4.4标准I/O 1.5程序和进程 1.5.1程序 1.5.2进程和进程ID 1.5.3进程控制 1.6 ANSI C 1.6.1 函数原型 1.6.2类属指针 1.6.3原始系统数据类型 1.7 出错处理 1.8 用户标识 1.8.1 用户ID 1.8.2 组ID 1.8.3 添加组ID 1.9 信号 1.10 UNIX时间值 1.11 系统调用和库函数 1.12 小结 习题 第2章 UNIX标准化及实现 2.1 引言 2.2 UNIX标准化 2.2.1 ANSI C 2.2.2 IEEE POSIX 2.2.3 X/Open XPG3 2.2.4 FIPS 2.3 UNIX实现 2.3.1 SVR4 2.3.2 4.3+BSD 2.4 标准和实现的关系 2.5 限制 2.5.1 ANSI C限制 2.5.2 POSIX限制 2.5.3 XPG3限制 2.5.4 sysconf、pathconf和 fpathconf函数 2.5.5 FIPS 151-1要求 2.5.6 限制总结 2.5.7 未确定的运行时间限制 2.6 功能测试宏 2.7 基本系统数据类型 2.8 标准之间的冲突 2.9 小结 习题 第3章 文件I/O 3.1 引言 3.2 文件描述符 3.3 open函数 3.4 creat函数 3.5 close函数 3.6 lseek函数 3.7 read函数 3.8 write函数 3.9 I/O的效率 3.10 文件共享 3.11 原子操作 3.11.1 添加至一个文件 3.11.2 创建一个文件 3.12 dup和dup2函数 3.13 fcntl函数 3.14 ioctl函数 3.15 /dev/fd 3.16 小结 习题 第4章 文件和目录 4.1 引言 4.2 stat,fstat和lstat函数 4.3 文件类型 4.4 设置-用户-ID和设置-组-ID 4.5 文件存取许可权 4.6 新文件和目录的所有权 4.7 access函数 4.8 umask函数 4.9 chmod 和fchomod函数 4.10 粘住位 4.11 chown, fchown和 lchown函数 4.12 文件长度 4.13 文件截短 4.14 文件系统 4.15 link, unlink, remove和 rename 函数 4.16 符号连接 4.17 symlink 和readlink函数 4.18 文件的时间 4.19 utime函数 4.20 mkdir和 rmdir函数 4.21 读目录 4.22 chdir, fchdir和 getcwd函数 4.23 特殊设备文件 4.24 sync和 fsync函数 4.25 文件存取许可权位小结 4.26 小结 习题 第5章 标准I/O库 5.1 引言 5.2 流和FILE对象 5.3 标准输入、标准输出和标准出错 5.4 缓存 5.5 打开流 5.6 读和写流 5.7 每次一行I/O 5.8 标准I/O的效率 5.9 二进制I/O 5.10 定位流 5.11 格式化I/O 5.12 实现细节 5.13 临时文件 5.14 标准I/O的替代软件 5.15 小结 习题 第6章 系统数据文件和信息 6.1 引言 6.2 口令文件 6.3 阴影口令 6.4 组文件 6.5 添加组ID 6.6 其他数据文件 6.7 登录会计 6.8 系统标识 6.9 时间和日期例程 6.10 小结 习题 第7章 UNIX进程的环境 7.1 引言 7.2 main 函数 7.3 进程终止 7.3.1 exit和_exit函数 7.3.2 atexit函数 7.4 命令行参数 7.5 环境表 7.6 C程序的存储空间布局 7.7 共享库 7.8 存储器分配 7.9 环境变量 7.10 setjmp 和longjmp函数 7.10.1 自动, 寄存器和易失变量 7.10.2 自动变量的潜在问题 7.11 getrlimit 和setrlimit函数 7.12 小结 习题 第8章 进程控制 8.1 引言 8.2 进程标识 8.3 fork函数 8.4 vfork 函数 8.5 exit函数 8.6 wait和waitpid函数 8.7 wait3和 wait4函数 8.8 竞态条件 8.9 exec函数 8.10 更改用户ID 和组ID 8.10.1 setreuid 和setregid函数 8.10.2 seteuid和 setegid函数 8.10.3 组ID 8.11 解释器文件 8.12 system函数 8.13 进程会计 8.14 用户标识 8.15 进程时间 8.16 小结 习题 第9章 进程关系 9.1 引言 9.2 终端登录 9.2.1 4.3+BSD终端登录 9.2.2 SVR4终端登录 9.3 网络登录 9.3.1 4.3+BSD网络登录 9.3.2 SVR4网络登录 9.4 进程组 9.5 对话期 9.6 终端控制 9.7 tcgetpgrp 和tcsetpgrp函数 9.8 作业控制 9.9 shell执行程序 9.10 孤儿进程组 9.11 4.3+BSD实现 9.12 小结 习题 第10章 信号 10.1 引言 10.2 信号的概念 10.3 signal函数 10.3.1 程序起动 10.3.2 进程创建 10.4 不可靠的信号 10.5 中断的系统调用 10.6 可再入函数 10.7 SIGCLD语义 10.8 可靠信号术语和语义 10.9 kill 和raise函数 10.10 alarm和 pause函数 10.11 信号集 10.12 sigprocmask 函数 10.13 sigpending函数 10.14 sigaction函数 10.15 sigsetjmp 和siglongjmp函数 10.16 sigsuspend函数 10.17 abort函数 10.18 system 函数 10.19 sleep函数 10.20 作业控制信号 10.21 其他特征 10.21.1 信号名字 10.21.2 SVR4信号处理程序的附加参数 10.21.3 4.3+BSD信号处理程序的附加参数 10.22 小结 习题 第11章 终端I/O 11.1 引言 11.2 综述 11.3 特殊输入字符 11.4 获得和设置终端属性 11.5 终端选择标志 11.6 stty命令 11.7 波特率函数 11.8 行控制函数 11.9 终端标识 11.10 规范方式 11.11 非规范方式 11.12 终端的窗口大小 11.13 termcap, terminfo和 curses 11.14 小结 习题 第12章 高级I/O 12.1 引言 12.2 非阻塞I/O 12.3 记录锁 12.3.1 历史 12.3.2 fcntl记录锁 12.3.3 锁的隐含继承和释放 12.3.4 4.3+BSD的实现 12.3.5 建议性锁和强制性锁 12.4 流 12.4.1 流消息 12.4.2 putmsg和 putpmsg函数 12.4.3 流ioct1操作 12.4.4 write至流设备 12.4.5 写方式 12.4.6 getmsg和 getpmsg函数 12.4.7 读方式 12.5 I/O多路转接 12.5.1 select函数 12.5.2 poll函数 12.6 异步I/O 12.6.1 SVR4 12.6.2 4.3+BSD 12.7 readv和writev函数 12.8 readn和 writen函数 12.9 存储映射I/O 12.10 小结 习题 第13章 精灵进程 13.1 引言 13.2 精灵进程的特征 13.3 编程规则 13.4 出错记录 13.4.1 SVR4流log驱动程序 13.4.2 4.3+BSD syslog设施 13.5 客户机-服务器模型 13.6 小结 习题 第14章 进程间通信 14.1 引言 14.2 管道 14.3 popen和 pclose函数 14.4 协同进程 14.5 FIFO 14.6 系统V IPC 14.6.1 标识符和关键字 14.6.2 许可权结构 14.6.3 结构限制 14.6.4 优点和缺点 14.7 消息队列 14.8 信号量 14.9 共享存储 14.10 客户机-服务器属性 14.11 小结 习题 第15章 高级进程间通信 15.1 引言 15.2 流管道 15.3 传送文件描述符 15.3.1 SVR4 15.3.2 4.3BSD 15.3.3 4.3+BSD 15.4 open服务器第1版 15.5 客户机-服务器连接函数 15.5.1 SVR4 15.5.2 4.3+BSD 15.6 open服务器第2版 15.7 小结 习题 第16章 数据库函数库 16.1 引言 16.2 历史 16.3 函数库 16.4 实现概述 16.5 集中式或非集中式 16.6 并发 16.6.1 粗锁 16.6.2 细锁 16.7 源码 16.8 性能 16.8.1 单进程的结果 16.8.2 多进程的结果 16.9 小结 习题 第17章 与PostScript打印机通信 17.1 引言 17.2 PostScript通信机制 17.3 假脱机打印 17.4 源码 17.5 小结 习题 第18章 调制解调器拨号器 18.1 引言 18.2 历史 18.3 程序设计 18.4 数据文件 18.5 服务器设计 18.6 服务器源码 18.7 客户机设计 18.7.1 终端行规程 18.7.2 一个进程还是两个进程 18.8 客户机源码 18.9 小结 习题 第19章 伪终端 19.1 引言 19.2 概述 19.2.1 网络登录服务器 19.2.2 script程序 19.2.3 expect程序 19.2.4 运行协同程序 19.2.5 观看长时间运行程序的输出 19.3 打开伪终端设备 19.3.1 SVR4 19.3.2 4.3+BSD 19.4 pty_fork函数 19.5 pty程序 19.6 使用pty程序 19.6.1 utmp文件 19.6.2 作业控制交互 19.6.3 检查长时间运行程序的输出 19.6.4 script程序 19.6.5 运行协同进程 19.6.6 用交互模式驱动交互式程序 19.7 其他特性 19.7.1 打包模式 19.7.2 远程模式 19.7.3 窗口大小变化 19.7.4 信号发生 19.8 小结 习题 附录A 函数原型 附录B 其他源代码 附录C 习题答案 参考书目

2010-01-27

软件本地化与汉化 帮助用户提高英文阅读能力; 制作中文版软件。

看不懂命令、看不懂帮助——因为,一切都是英文的。现在,大部分软件用户的英语水平不高,使用英语软件有不同程度的困难。我们常见到这样的朋友,听说某软件功能很强大,千方百计搜寻了来,安装后一看复杂的英语界面,根本就不会用,只有自叹英语太差。 解决办法至少有两种: 帮助用户提高英文阅读能力; 制作中文版软件。 短时间提高英文阅读能力,希望所有用户都精通英文是不现实的。事实上,也并非只有英文水平较低的用户才喜欢使用中文界面的软件。绝大多数人使用自己的母语进行交流最为自如。即使外语水平很高的用户,使用外语进行工作的效率也往往比用母语低。 制作中文版软件,软件的开发商和经销商为了扩大潜在客户群、减少培训与支持费用、提高用户对产品的信心、增强产品竞争力等原因,也会推出本地化版本的软件。满足用户的需求,战胜竞争产品赢得客户。 并非所有的软件都有进行本地化,最终的决定性因素是本地化投资是否能带来相应的收益。这就是我们看到许多软件有日文版甚至繁体版,却没有简体版的原因。 为了推动我国计算机使用的普及,国内汉化人,不记报酬,付出无偿的艰苦劳动,把许许多多软件界面汉化成中文。为更多的朋友学习计算机,使用计算机提供方便之门。对普及计算机应用、加快我国信息技术发展都是起到了重大的贡献。 汉化小知识: 本 地 化(localization):对软件进行加工,使之满足特定市场上的用户对语言和功能的特殊要求。可能涉及文字的翻译、用户界面布局调整、本地特性开发、联机文档和印刷手册的制作,以及保证本地化版本能正常工作的软件质量保证活动。localisation也是本地化的意思,较少用。 国 际 化(Internationalization):在开发程序内核的过程中,功能和代码设计均不局限于某种特定语言,使创建不同语言版本的过程得以简化的软件工程方法。国际化面向编程和设计,而本地化更接近一种“转换”。也叫“全 球 化(Globalization)” 汉 化(hanzify):“本地化”的中国本地化。较之“本地化”,它更为通俗易懂,不过由于专指从其他语言到中文的转换,随着国际交流的增加,业内人士似乎已渐渐倾向于使用“本地化”。国内业余汉化人倾向使用“汉化”,主要指对软件的用户界面从其他语言到中文的转换。 资 源(Resource):Microsoft资源文件 (.RC) 包含的字符串、对话框、菜单、快捷键、图标、位图等。在本地化过程中通常指软件中需要翻译的内容,即 localizable resource,包括delphi资源文件dfm包含的字符串和一些非标准的资源形式(ASCII)。 本地化简介: 本地化是商业软件出于营销策略考虑,满足特定市场上的用户对语言和功能的特殊要求,而对软件进行加工。一般包括以下五项工作: 1. 翻译包装和宣传材料 翻译包装是本地化的最基本层次,所需投入最小,但所能带来的收益也最小。 2. 支持当地语言 只有支持当地语言才可能真正进行本地化。这部分工作涉及源代码修改,通常由产品开发人员完成。如果在开发过程中已经实施了国际化策略,就很少有额外的代码工作。完成这一层次的工作后,软件用户界面仍然是英文的,从外表上看与英文软件完全相同,区别主要是: 可运行于本地语言的操作系统上 可接受本地语言输入并用本地语言输出 3. 转换用户界面和文档 在此基础上进行用户界面和文档的转换才有实际意义,也就是传统意义上的“本地化”。也有人考虑在软件能用当地语言输入输出之前就翻译文档,这似乎可以改善产品的易用性,但既然用户还是必须用英文工作,这看起来有点本末倒置。 出于费用、时间和技术等方面的考虑,转换用户界面和文档的工作大多由专业本地化服务提供商进行。委托方通常会根据预算和项目周期的限制按照下列顺序决定本地化的范围: 用户界面 -> 联机帮助 -> 手册 -> README -> 样例 -> 演示和教程 -> 其他 对一些规模较大、专业性较强的软件,可以考虑先转换部分手册,待时机成熟后再进行全面的本地化。 4. 支持本地硬件和软件 由于各个国家和地区流行的硬件和软件可能会有所不同,产品的兼容性可能会成为障碍。在欧美一切正常的软件到中国后“水土不服”不足为奇。以支持本地硬件和软件为目标的本地化,有时并不困难,只要有产品开发人员的支持即可,有时却会遇到技术难度大、风险高的难题。 5. 提供本地化功能 针对当地用户的特殊需求修改功能特性或直接进行开发。例如, 提供汉字竖排和从右至左布局的功能 提供符合中国国家标准的土建工程图纸标注功能 我们看看台湾一家专业本地化服务提供商的中文化流程、计划管理流程和使用的工具。 1.中文化流程 3.使用的工具: 客户所提供的用户端工具程式 TRADOS - 此工具可确保一致性 TargeTek Glossary Finder - 可以简单快速找到词汇。 SC-TC 文件转换程式 - 可简单将文件作简、繁之间转换,让两岸不再有文件的困扰

2010-01-20

WIN32 汇编本帮助文件由yyc个人整理后出版,内容全摘自网络。版权归实际作者所有

WIN32 汇编 本帮助文件由yyc个人整理后出版,内容全摘自网络。版权归实际作者所有。 为了让网友们能更好的学习Win32汇编编程,于是我为大家将网上的资料整理成一个帮助文件。 本帮助文件包括:Iczelion的Win32汇编教程、Iczelion 的 ODBC 教程、Iczelion 的 VxD 教程共三部分 第一课 基本概念 -------------------------------------------------------------------------------- 我们先假设您已知道了如何使用MASM。如果您还不知道的话,请下载 win32asm.exe ,并请仔细研读其中所附带的文档资料。好,如果您已准备就绪,我们这就开始吧! 理论: WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。而今 80286 已成为了历史。所以我们将只把精力集中于 80386 及后续的X86 系列 CPU。Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址。操作系统将会在应用程序运行时完成 4GB 的虚拟地址和物理内存地址间的转换。这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。而过去的 Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。 和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的 4GB 的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器寻址任意的地址空间,这对于程序员来说是非常方便的,这也使得用32位汇编语言和用C语言一样方便。 在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。 内容: 下面的程序段是一个框架, 若您现在还不知道这些指令的确切意义的话,没关系, 随后我就会给大家详细解释。 .386 .MODEL Flat, STDCALL .DATA <Your initialized data> ...... .DATA? <Your uninitialized data> ...... .CONST <Your constants> ...... .CODE <label> <Your code> ..... end <label> 框架就这么简单,好,我现在就给您解释: .386 这是一个汇编语言伪指令,他告诉编译器我们的程序是使用80386指令集编写的。您还可以使用 .486、.586, 但最安全的还是使用.386。对于每一种CPU有两套几乎功能相同伪指令: .386/.386P、 486/.486P、 586/.586P。 带P的指令标明您的程序中可以用特权级指令。特权级指令是保留给操作系统的,如虚拟设备驱动程序。在大多数时间,您的程序都无须运行在RING0层,故用不带后缀P的伪指令已足够了。 .MODEL FLAT,STDCALL .MODEL 是用来指定内存模式的伪指令,在Win32下,只有一种内存模型,那就是FLAT。 STDCALL 告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C 和 PASCAL。C 约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。 例如:为调用函数 foo ( int first_param, int second_param, int third_param ); 按C约定的汇编代码应该是这样的: push [third_param] push [second_param] push [first_param] call foo add esp, 3 * 4 ;调用者自己恢复堆栈指针 PASCAL约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。Win16采用了PASCAL约定, 因为PASCAL约定产生的代码量要小。当不知道参数的个数时,C约定特别有用。如在函数wsprintf () 中, wsprintf预先并不知道要传递几个参数,所以它不知道如何恢复堆栈。STDCALL是C约定和PASCAL约定的混合体,它规定参数的传递是从右到左,恢复堆栈的工作交由被调用者。Win32只用STDCALL约定,但除了一个特例,即:wsprintf。 .DATA .DATA? .CONST .CODE 上面的四个伪指令是"分段"(SECTION)伪指令。我们上面刚讲过Win32下没有"段"(SEGMENT)的概念,但是您可以把您的程序分成不同的"分段", 一个"分段"的开始即是上一个"分段"的结束。WIN32中只有两种性质的"分段":DATA和CODE。 其中DATA"分段"又分为三种: .DATA 其中包括已初始化的数据。 .DATA? 其中包括未初始化的数据。比如有时您仅想预先分配一些内存但并不想指定初始值。使用未初始化的数据的优点是它不占据可执行文件的大小,如:若您要在 .DATA? 段中分配10,000字节的空间,您的可执行文件的大小无须增加10,000字节,而仅仅是要告诉编译器在装载可执行文件时分配所需字节。 .CONST 其中包括常量定义。这些常量在程序运行过程中是不能更改的。 应用程序并不需要以上所有的三个"分段", 可以根据需要进行定义。 .CODE 这是代码"分段"。 <译者注:实际上,分段并不是象在 Dos 下一样,为不同的段分别指出不同的段寄存器,因为 Windows 下只有一个 4GB 的段,Windows 程序中的分段表现在当程序装载时,赋予不同的分段不同的属性,比如说当你的程序加载时,对于 Ring3 程序来说,.code 段是不可写的,而 .data 段是可写的,如果你尝试象在 Dos 下一样写自己的代码部分,你会得到一个蓝屏错误> <label> end <label> 是用来唯一标识您的代码范围的标签, 两个标签必须相同,应用程序的所有可执行代码必修在两个标签之间。 --------------------------------------------------------------------------------

2010-01-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除