<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ProgrammingRing的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ProgrammingRing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ProgrammingRing]]></copyright><item><title><![CDATA[debian默认中文输入法不可用，配置方法如下]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/50611002</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/50611002</guid><author>ProgrammingRing</author><pubDate>Sat, 30 Jan 2016 13:18:20 +0800</pubDate><description><![CDATA[转自：http://tieba.baidu.com/p/4219409566#

今天装了个debian系统，开始输入法问题折腾了好久，总算折腾出来了。
1配置源
# vim /etc/apt/source.list
最后增加中国科学技术大学的源(其他的应该也可以)：
deb 
http://mirrors.ustc.edu.cn/debian stable main contrib]]></description><category></category></item><item><title><![CDATA[Delphi逆向]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/43417793</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/43417793</guid><author>ProgrammingRing</author><pubDate>Mon, 02 Feb 2015 22:01:10 +0800</pubDate><description><![CDATA[﻿﻿
Delphi反汇编内部字符串处理函数/过程不完全列表
名称
参数
返回值
作用
等价形式 / 备注
 
_PStrCat
EAX ：目标字符串
EDX ：源字符串
EAX
连接两个 Pascal 字符串
s:=copy(s+s1,1,255)
 
_PStrNCat
EAX ：目标字符串
EDX ：源字符串
CL ：结果字符串最大长度
EAX
连接两个]]></description><category></category></item><item><title><![CDATA[Win7中的页目录]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40483633</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40483633</guid><author>ProgrammingRing</author><pubDate>Sun, 26 Oct 2014 22:47:31 +0800</pubDate><description><![CDATA[转自:http://user.qzone.qq.com/31731705/blog/1324046552




文章 PAE下的虚拟内存映射 分析 ( http://user.qzone.qq.com/31731705/blog/1323414733 ) 和 PAE下的虚拟内存映射
 实践 (http://user.qzone.qq.com/31731705/blog/1323426]]></description><category></category></item><item><title><![CDATA[PAE下的虚拟内存映射 实践]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40483031</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40483031</guid><author>ProgrammingRing</author><pubDate>Sun, 26 Oct 2014 22:31:53 +0800</pubDate><description><![CDATA[转自:http://user.qzone.qq.com/31731705/blog/1323426728]]></description><category></category></item><item><title><![CDATA[PAE下的虚拟内存映射 分析]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40482983</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40482983</guid><author>ProgrammingRing</author><pubDate>Sun, 26 Oct 2014 22:29:33 +0800</pubDate><description><![CDATA[转自:http://user.qzone.qq.com/31731705/blog/1323414733




PAE 即为物理地址扩展(Physical Address Extension)，详细的内容请Google。 ﻿

我的电脑是Win7，CPU是双核处理器，信息如下，
0: kd> !sysinfo cpuinfo 
[CPU Information]
~MHz =]]></description><category></category></item><item><title><![CDATA[PAE ( Physical Address Extension )]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40481799</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40481799</guid><author>ProgrammingRing</author><pubDate>Sun, 26 Oct 2014 22:06:38 +0800</pubDate><description><![CDATA[首先，内存访问和管理是一个跨越应用程序，操作系统，硬件平台的一个复杂过程，不能单纯的讲32bit系统就支持4G内存，从而认为这个过程只是OS和内存两者之间的关系

 

理论上：
32位系统，32bit的地址总线位数，寻址空间2^32B=4GB。 64位系统，寻址空间2^64。
至于在实际应用环境中，对于有4G物理内存而OS最多只能识别3G的情况，主要是主板的问题，丢掉的内存被PCI设]]></description><category></category></item><item><title><![CDATA[Windows下的分页模式- 页目录和页表从物理内存到虚拟映射求值]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40481711</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/40481711</guid><author>ProgrammingRing</author><pubDate>Sun, 26 Oct 2014 22:05:49 +0800</pubDate><description><![CDATA[标 题: 【原创】Windows下的分页模式-
 页目录和页表从物理内存到虚拟映射求值
作 者: hrpirip
时 间: 2012-12-06,12:45:36
链 接: http://bbs.pediy.com/showthread.php?t=159554

昨天在网上看到一段代码令大为不解，大家都知道一个虚拟地址到物理地址的转换伪公式为：
*(*(*PD[(VirtualAd]]></description><category></category></item><item><title><![CDATA[[经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38704211</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38704211</guid><author>ProgrammingRing</author><pubDate>Wed, 20 Aug 2014 12:05:26 +0800</pubDate><description><![CDATA[转自:



原文题目: >
原文地址: 
http://www.microsoft.com/msj/0197/Exception/Exception.aspx 
原作者: Matt Pietrek
  
在Win32的核心, 结构化异常处理(Structured Exception Handling)(SEH) 是操作系统提供的一种服务. 你能找到的所有关于SEH的文档都会描述]]></description><category></category></item><item><title><![CDATA[关于句柄表的一些文章]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38462707</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38462707</guid><author>ProgrammingRing</author><pubDate>Sat, 09 Aug 2014 23:51:57 +0800</pubDate><description><![CDATA[wrk1.2中
ExpLookupHandleTableEntry的内部流程
1) 取 Handle(EXHANDLE类型) 值为tHandle,并将TagBit(低两位)置0
2) 取 HandleTable->NextHandleNeedingPool为MaxHandle ,
   如果 tHandle大于等于MaxHandle,则返回NULL,查询失败
   (由此可见, Next]]></description><category></category></item><item><title><![CDATA[VB程序逆向反汇编常见的函数]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38374715</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38374715</guid><author>ProgrammingRing</author><pubDate>Mon, 04 Aug 2014 20:44:32 +0800</pubDate><description><![CDATA[转自: http://www.cnblogs.com/bbdxf/p/3780187.html]]></description><category></category></item><item><title><![CDATA[页表项(PTE)地址计算公式的解释]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38175823</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38175823</guid><author>ProgrammingRing</author><pubDate>Sun, 27 Jul 2014 19:19:43 +0800</pubDate><description><![CDATA[转自: 



在《JIURL玩玩Win2k内存篇 分页机制 (三)》中提到计算虚拟地址对应PTE地址的公式，如下：


代码:
PTE_Addr = (VirtualAddr >> 12) * 4 + 0xC0000000


从虚拟地址转换到物理地址的过程来看，计算PTE需要虚拟地址的高10位做页目录索引，还需要第12 - 21位做页表索引，上面的公式晃眼看起来，貌似是错的]]></description><category></category></item><item><title><![CDATA[静态分析nt!KiFastCallEntry]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38140763</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/38140763</guid><author>ProgrammingRing</author><pubDate>Sat, 26 Jul 2014 10:19:32 +0800</pubDate><description><![CDATA[转载: http://bbs.pediy.com/showthread.php?t=89407



在XP系统中， 系统服务在内核的入口是KiFastCallEntry，我们从该入口开始，分析这一段代码都做了什么工作。
 
由于水平有限和背景知识不够，本人没有完全读懂它们，作为抛砖引玉，我先将我所看懂的和大家分享，希望大家多多指教! 
 
 
 

KiFastCallEn]]></description><category></category></item><item><title><![CDATA[AVL树(一)之 图文解析 和 C语言的实现]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/37969745</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/37969745</guid><author>ProgrammingRing</author><pubDate>Sat, 19 Jul 2014 22:09:41 +0800</pubDate><description><![CDATA[概要
本章介绍AVL树。和前面介绍"二叉查找树"的流程一样，本章先对AVL树的理论知识进行简单介绍，然后给出C语言的实现。本篇实现的二叉查找树是C语言版的，后面章节再分别给出C++和Java版本的实现。
建议：若您对"二叉查找树"不熟悉，建议先学完"二叉查找树"再来学习AVL树。
目录
1. AVL树的介绍
2. AVL树的C实现
3. AVL树的C实现(完整源码)
4. AVL树的]]></description><category></category></item><item><title><![CDATA[伸展树(一)之 图文解析 和 C语言的实现]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/37969617</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/37969617</guid><author>ProgrammingRing</author><pubDate>Sat, 19 Jul 2014 22:02:08 +0800</pubDate><description><![CDATA[概要
本章介绍伸展树。它和"二叉查找树"和"AVL树"一样，都是特殊的二叉树。在了解了"二叉查找树"和"AVL树"之后，学习伸展树是一件相当容易的事情。和以往一样，本文会先对伸展树的理论知识进行简单介绍，然后给出C语言的实现。后序再分别给出C++和Java版本的实现；这3种实现方式的原理都一样，选择其中之一进行了解即可。若文章有错误或不足的地方，希望您能不吝指出！

目录
1. 伸展树的介]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码（完结篇）]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464363</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464363</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:54:17 +0800</pubDate><description><![CDATA[（转载于breaksoftware的csdn博客）

之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因。本文将总结以前文章的结论，并介绍些DllMain中还有哪些操作会导致死锁等问题。
        DllMain的相关特性
        首先列出《DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析》中论证的1]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464167</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464167</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:51:55 +0800</pubDate><description><![CDATA[（转载于breaksoftware的csdn博客）

之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得，我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说，可能发现这个位置有点麻烦。那么本文就介绍几个例子，它们会在线程明显的位置死锁掉。
        DLL中的代码依旧简单。它获取叫EVENT的命名事件，然后等待这个事件被激活。激]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464045</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21464045</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:50:38 +0800</pubDate><description><![CDATA[（转载于breaksoftware的csdn博客）

我们回顾下之前举得例子


[cpp] 
view plaincopy


case DLL_PROCESS_ATTACH: {            printf("DLL DllWithoutDisableThreadLibraryCalls_A:\tProcess attach (tid = %d)\n", tid); ]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21463699</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21463699</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:47:13 +0800</pubDate><description><![CDATA[（转载于breaksoftware的csdn博客）

前几篇文章一直没有在源码级证明：DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区。这个论证非常重要，因为它是使其他线程不能进入临界区从而导致死锁的关键。我构造了在DLL被映射到进程地址空间的场景，请看死锁时加载DLL的线程的堆栈


        如果仔细看过《DllMai]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析--DisableThreadLibraryCalls对DllMain中死锁的影响]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21463207</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21463207</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:38:58 +0800</pubDate><description><![CDATA[（转载于breaksoftware的csdn博客）

《windows核心编程》作者在讨论DllMain执行序列化的时候，曾说过一个他的故事：他试图通过调用DisableThreadLibraryCalls以使得新线程不在调用DllMain从而解决死锁问题。但是该方案最后失败了。思考作者的思路，他可能一开始认为：因为线程要调用DllMain而加锁，于是windows在发现DllMain不用调用]]></description><category></category></item><item><title><![CDATA[DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2]]></title><link>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21462647</link><guid>https://blog.youkuaiyun.com/ProgrammingRing/article/details/21462647</guid><author>ProgrammingRing</author><pubDate>Tue, 18 Mar 2014 15:31:53 +0800</pubDate><description><![CDATA[本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论，调试对象是文中刚开始那个例子。（转载请指明出于breaksoftware的csdn博客）
        1 g 让程序运行起来
        2 ctrl+break 中断程序
        3 ~ 查看线程数


        其实该程序自己运行起来]]></description><category></category></item></channel></rss>