`
chinamming
  • 浏览: 140690 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
文章列表
1. Socket相关背景   Socket,中文译为“套接字”,最早在UNIX中引入并得到广泛应用,后来微软在设计Windows时引入了UNIX中的这个概念和相应的设计理念,并针对Windows的特性略作调整,形成了Windows平台上的Socket,简称为“WinSoc ...
序: 在中国有很多人都认为IT行业是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有8年的时间了,在这里在下想凭借自己的亲身经历,与大家一起探讨 ...
我们在应用层调用一个Win32 API, 系统内部究竟是如何执行的, 它是如何从用户态进入到内核态的呢 ?对于每层一些概念的解释,这里不详述了,具体可以参考理解Windows内核模式与用户模式.以Kernel32里的CreateProcess 为例, 内部会调用ntdll.dll里导出的NtCreateProcess,ntdll.dll通过一个中断请求int 2Eh(Sysenter)进入内核态, 在内核的Executive Service Routines 层, 内部保存着一张表“SSDT”(System Service Descriptor Table,系统服务描述符表), 通过该表找到 ...
作为一个传统的Win32开发程序员,感觉这些年技术变化可真快,总结一下主要体现在以下几方面: (1)互联网应用的重新崛起 从Google到阿里巴巴,再到Facebook, 从以前的博客到现在的微博,Web正在影响越来越多人的生活。越来越多的开发人员参与到Web开发中,从前端的Web2.0/Web3.0,HTML5, 到后台的云计算,云存储,云框架,各种新技术层出不穷。 (2)移动应用的兴起 从Symbian到iPhone,再到Andriod和Windows Phone, 从iPad到Win8平板,各种移动开发平台不断涌现,开发语言也各有差异(C++,Objective ...
作为一名Windows平台上的C/C++开发人员,我们有N个学习WinDbg的理由: 有些Bug只有在客户和QA的机器上才能重现,我们不可能在他们的机器上装一个VC吧 WinDbg可以让我们方便的保存和分析Dump文件 WinDbg的调试功能比VC强大的多,比如它有强大的API断点和条件断点 调试内核和驱动,我们只能用WinDbg 用WinDbg可以让你更深入的理解系统,理解计算机,用VC你看到的是自己的代码,用WinDbg你看到的是整个进程 ...... 最重要的,微软用WinDbg开发和调试Windows操作系统,它是Windows平台上最重要的调试工具. 要用好WinDbg ...
我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的。但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水。下面我们主要分析一下ATL中的一些汇编代码。ATL中出现汇编代码主要是2处,一处是通过Thunk技术来调用类成员函数处理消息;还有一处是通过打开_ATL_DEBUG_INTERFACES宏来跟踪接口的引用计数。通过Thunk技术来调用类成员函数我 ...
(1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。 比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件: typedefvoid(__stdcall*DownloadCallback)(constchar*pURL,boolbOK);voidDownloadFile(constchar*pURL,DownloadCallbackcallback) { cout<<"downloading:"<<pUR ...
以前只是知道可变参数怎么用,但是一直对它的原理是似懂非懂,现在对计算机有了比较深刻的认识之后,回头再看,豁然开朗。 要理解可变参数,首先要理解函数调用约定, 为什么只有__cdecl的调用约定支持可变参数,而__stdcall就不支持? 实际上__cdecl和__stdcall函数参数都是从右到左入栈,它们的区别在于由谁来清栈,__cdecl由外部调用函数清栈,而__stdcall由被调用函数本身清栈, 显然对于可变参数的函数,函数本身没法知道外部函数调用它时传了多少参数,所以没法支持被调用函数本身清栈(__stdcall), 所以可变参数只能用__cdecll. 另外还要理解函数参数 ...
内存对很多人来说感觉是个很熟悉的东西,因为我们在用VC调试程序时,很多时候都会察看内存中变量的值。但是,很多时候我们的思维也就因此局限在有源码的模块,当遇到一些跨模块或是没有源代码的Bug,我们还是无从下手。因此,很有必要我们要对整个程序内存有个比较全局性的认识,这样遇到任何问题,你都能从容面对。 我这里以32位的程序为例,我们知道32位程序总共有4G内存空间,其中低2G是用户地址空间,高2G是内核地址空间,下面我们借助WinDbg工具来分析低2G用户地址空间的内存分布。 因为所有程序的内存分布都大同小异,我这里用WinDbg分析任务管理器进程的内存分布。打开任务管理器,然后用WinDb ...
今天, 同事问我会不会Python, 我犹豫了一下:不会。 实际上我曾经学习过这个语言,当时还用它写了些小工具, 可现在我对这个语言的印象只剩下它那特殊的缩进格式了。 由此思考怎样才算会一门语言?我想每个程序员都接触过多门语言 , 那么究竟怎样才算会这门语言了呢? 会一门语言, 当需要它时, 应该能很快用该语言解决某个问题, 这个是最基本的。
最近看公司的一些新产品和框架 , 发现清一色的“COM思想架构 ”, 这里说的“COM思想架构”是指不完全是标准COM组件的方式,而是指在设计上用到了COM思想。 COM组件技术大概在1993年产生, 20年了, 为什么还有这么多人使 ...
看到很多Windows开发人员,尤其是C++程序员思维还是停留在XP操作系统,当然根据工作是否需要新知识 ,这本身没有错。但是实际上Vista之后的Win7, 再之后的Win8 ,Windows已经发生了很大的变化,我们程序员也该了解和适应这些 ...
内核层次架构windows程序运行分为内核模式和用户模式,内核模式可以访问所有的内存地址空间, 并且可以访问所有的CPU指令。一般程序运行在用户模式, 通过系统调用切换到内核模式执行系统功能,Windows系统通过这种方式来确保系统的安全和稳定。下面是内核的层次划分:硬件抽象层(Hardware Abstraction Layer) (HAL) (hal.dll)最底层隔离硬件的, 底层的第三方驱动程序就运行在这层。内核 (Kernel)实现操作系统的一些底层服务,比如线程调度, 多处理器的同步,中断/异常处理等。执行体 (Executive)实现基本的操作系统服务,比如基本的线程进程管理, ...
目标: 以创建一个简单的对话框程序为例搭建环境,目标是用到最少的资源,这样我们能够知道一个程序的来龙去脉。 实现: 从Visual Studio 安装环境中拷贝 ML宏汇编器和LINK链接器;拷贝部分.h头文件和.lib链接库文件。 分析: [工具]C和C++的编译器为CL.EXE,汇编语言的编译器为ML.EXE,这两个程序都能生成COFF格式的目标文件OBJ;然后用通用的LINK.EXE链接器将OBJ文件链接为EXE文件。编译和链接工具准备完毕。 [lib库]Windows系统是基于DLL的,PE文件会记录他引用的所有DLL和这些DLL中的API,链接器LIN ...
来源:https://www.xfocus.net/bbs/index.php?act=ST&f=2&t=58182 内存与进程管理器 ========================== But I fear tomorrow I'll be crying, Yes I fear tomorrow I'll be crying. King Crimson'69 -Epitaph 关于Windows NT内存管理器的高层次信息已经够多的了,所 ...
Global site tag (gtag.js) - Google Analytics