﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-未命名-随笔分类-逆向工程</title><link>http://www.cppblog.com/Tim/category/16366.html</link><description>灵活的思考，严谨的实现&lt;br&gt;
什么是未定义的行为：你的计算机可能崩溃、地球可以停止自转、你可能飞到云上，也可能掉到了地狱里...</description><language>zh-cn</language><lastBuildDate>Wed, 04 Jul 2012 03:55:56 GMT</lastBuildDate><pubDate>Wed, 04 Jul 2012 03:55:56 GMT</pubDate><ttl>60</ttl><item><title>线程本地存储TLS(Thread Local Storage)的原理和实现——实现探究</title><link>http://www.cppblog.com/Tim/archive/2012/07/04/181122.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 04 Jul 2012 00:57:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/07/04/181122.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/181122.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/07/04/181122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/181122.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/181122.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文为线程本地存储TLS系列之实现探究。<br>我们在上一篇线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理中曾经说过TLS可以分为两类：静态TLS和动态TLS。然后又分别说明了两者在程序实现时的用法，并且还说明了windows对这两类TLS的实现原理，我们本文的目的是从底层实现的角度深入探究，深刻理解原理。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/07/04/181122.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/181122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-07-04 08:57 <a href="http://www.cppblog.com/Tim/archive/2012/07/04/181122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理</title><link>http://www.cppblog.com/Tim/archive/2012/07/04/181018.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 04 Jul 2012 00:57:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/07/04/181018.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/181018.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/07/04/181018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/181018.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/181018.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们知道在一个进程中，所有线程是共享同一个地址空间的。所以，如果一个变量是全局的或者是静态的，那么所有线程访问的是同一份，如果某一个线程对其进行了修改，也就会影响到其他所有的线程。不过我们可能并不希望这样，所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据，因为基于堆栈的变量总是和特定的线程相联系的。<br><br>不过如果某些时候（比如可能是特定设计的dll），我们就是需要依赖全局变量或者静态变量，那有没有办法保证在多线程程序中能访问而不互相影响呢？答案是有的。操作系统帮我们提供了这个功能——TLS线程本地存储。TLS的作用是能将数据和执行的特定的线程联系起来。<br><br>实现TLS有两种方法：静态TLS和动态TLS。以下我们将分别说明这两类TLS。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/07/04/181018.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/181018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-07-04 08:57 <a href="http://www.cppblog.com/Tim/archive/2012/07/04/181018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】pe/elf 文件加壳时的处理</title><link>http://www.cppblog.com/Tim/archive/2012/06/27/180503.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 27 Jun 2012 09:21:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/06/27/180503.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/180503.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/06/27/180503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/180503.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/180503.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  -------------------------------------------------------<br>    slm        x86 win32 r3 pe packer<br>    mimisys    x86 win32 r0 pe packer<br>    elfp       x86 linux r3 elf packer<br>    -------------------------------------------------------&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/06/27/180503.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/180503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-06-27 17:21 <a href="http://www.cppblog.com/Tim/archive/2012/06/27/180503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]TLS callback科普小知识</title><link>http://www.cppblog.com/Tim/archive/2012/06/27/180502.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 27 Jun 2012 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/06/27/180502.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/180502.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/06/27/180502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/180502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/180502.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 每个线程拥有自己的线程局部存储，互补干扰。系统中线程局部存储是存放在线程的TEB中，每个线程都有自己的TEB因此互相独立。见下面的TEB结构中的ThreadLocalStoragePointer、TlsSlots、TlsLinksTlsExpansionSlots域。对TLS的访问通过 TlsAlloc、TlsSetValue和TlsGetValue以及TlsFree几个API进行。这些API也是对TEB中Tls相关域的访问。跟踪Tls*等API函数发现，系统通过PEB中的TlsBitmap来保存Tls的使用记录，并据此分配Tls索引，另外PEB还有 TlsExpansionCounter和TlsBitmapBits来跟踪Tls的使用情况。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/06/27/180502.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/180502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-06-27 17:20 <a href="http://www.cppblog.com/Tim/archive/2012/06/27/180502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>format of object files[from internet]</title><link>http://www.cppblog.com/Tim/archive/2010/02/05/107222.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 05 Feb 2010 01:35:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2010/02/05/107222.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/107222.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2010/02/05/107222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/107222.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/107222.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: the format of object files&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2010/02/05/107222.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/107222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2010-02-05 09:35 <a href="http://www.cppblog.com/Tim/archive/2010/02/05/107222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>