11 河边一支柳

尚未进行身份认证

游泳,桌球,篮球,骑士+詹姆斯球迷 || dota,炉石传说 || 乐观,爱交朋友 ||

等级
TA的排名 8k+

Windbg调试----多线程控制调试

在调试程序的时候,可能经常会有这样的需求,让一个线程在特定的时候才让其开始执行或者暂停执行。比如复杂的多线程导致死锁的问题,又或者多线程中的Race Condition 导致程序执行异常等。很多时候,我们可以借助编写调试代码来达到多线程的调试,可是有些情况下调试的执行粒度是指令级别的,那么这个时候我们得借助调试利器Windbg了。本文我们将以《C/C++编程教训—-函数内静态类对象初始化非线程安全(

2017-09-03 18:29:36

C/C++编程教训----函数内静态类对象初始化非线程安全(C++11之前)

不少程序员在编写程序的时候,会使用函数内静态(static)变量,既能满足函数内这个变量可以持久的记录某些信息,又使其访问范围的控制局限于函数内。但函数内静态类对象初始化是非线程安全的。问题背景在我们产品中对log4cxx做了一些简单的封装 (采用VS2005编译),其中会调用到getWarn这个接口。由于这个函数存在非线程安全的问题,导致程序Crash。为了更好的描述问题,博主后面采用一个简单的例

2017-09-03 16:57:59

CPU百分百问题的研究

在对代码进行测试的时候,发现进程占用了100%的单核CPU资源。并且发现在另一个环境,这个进程占用了50%的CPU资源,因为在这个环境中是2核的CPU。而此时这个进程还并没有处理任何的数据,也就是说会有一个线程一个只占用一个CPU核的资源。对于这个问题研究的方法主要用到了两个工具:Process Explorer和Windbg。使用Process Exporer查找占用CPU资源的线程博主采用了一个

2017-05-28 09:54:58

C/C++编程教训----数据结构的类型别名和memset

问题描述学习微软,我们经常会这样定义数据结构, 并且定义了数据结构别名StructTest,和数据结构指针别名LPStructTest, 这样定义也许让程序的类型更加简洁。typedef _StructTest{ int iVal; char csStr[100];}StructTest, *LPStructTest;数据结构变量定义一般使用StructTest sTest这种形

2017-05-14 16:52:55

Windows中实现不依赖账户登录的开机启动程序

在Windows中很多的任务,我们希望能够在Windows启动之后自动运行。举个例子,公司有个订饭系统,基本每天都需要登录去订饭,于是写一个脚本实现自动订饭。可是你的电脑每天要关机,当然不希望开机后还需要手动运行这个订饭脚本了。于是此时我们要将其这种脚本实现为开机自动启动脚本。但要注意本文要讲的开机启动的程序,是在用户还没有登录的情况下实现启动的。换句话说,本文描述的开机启动的程序运行在Ses

2017-05-12 14:23:00

C/C++编程教训----'=='判断条件

程序质量保证个人谈一谈项目代码质量保证主要来源于以下几个方面:程序员的经验,防御性的避免一些错误/坑。单元测试: 单元测试应该是测试中最细粒度的测试,这个测试一般来说贯穿了整个开发以及后期维护;它能够保证到每一个函数/功能的健壮性,从而提高代码的整体质量。测试自动化: 测试自动化,应该来说至少应该包括了单元测试和功能测试自动化。 在开发或者维护过程中,在修改代码后,能够迅速的使用自动化测试进行

2017-04-22 16:47:32

Windbg无法捕获strcpy_s crash时的函数调用栈的研究

问题描述在一年前,发现产品的windows service总是崩溃,但每次用windbg attach或者adplus产生dump,总是不能捕获到程序出错时候的栈,而且crash的时候只能看到少数甚至只剩一个线程。后来用windbg单步调试终于找到的罪魁祸首,原来是出错在strcpy_s这个函数。但是为什么直接用windbg attach或者adplus没法获取第一现场呢?当程序比较简单的时候

2017-01-22 09:46:31

用户模式程序Dump收集

发布给客户的程序,出现问题后,通过Debug Log经常很难分析出原因。比如说程序崩溃,程序死锁,内存泄漏等,这个时候从客户那里收集程序Dump,本文主要描述了几种收集dump的工具。adplus收集Dumpadplus是windows 调试工具集中的一个工具,安装了WDK或者Windbg后在安装目录都有。现在很多的OS 都是64位了,但有时候Crash的程序是32位,有时候Crash的程序是64位

2017-01-12 15:14:10

Windbg局部变量显示不正确

Windbg中局部变量显示不正确

2016-08-17 13:25:53

存储型跨站脚本攻击

XSS跨站脚本攻击(CrossSiteScript,XSS),是最常见的Web应用应用程序安全漏洞之一,也是OWASP2013Top10之一。XSS通常来说就是在网页中嵌入恶意代码,通常来说是Javascript,当用户访问网页的时候,恶意脚本在浏览器上执行。存储型XSSXSS主要分为三种类型:反射型XSS,存储型XSS和DOM型XSS。本文主要阐述的是存储型XSS,简单来说明一下

2016-08-10 22:06:18

OWASP Mutillidae的安装

OWASPMutillidae介绍OWASP(OpenWebApplicationSecurityProject)是一个开源的、非盈利性的全球性安全组织。由全球的会员共同推动安全标准、安全测试工具、安全指导手册等应用安全技术的发展。OWASP也有中国的官方网站,在这里你也可以关注到OWASP在中国的培训与活动等相关信息。OWASPMutillidae是一个开源的、免费的漏洞演习系

2016-08-08 13:51:30

Windbg调试----Windbg入门

Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对CoreDump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。相关资料本人也是在维护和开发产品的过程中使用过Windbg,但并未对Windbg进行过系统和深入的学习,也通过这一系列的博客来完善自己对Windbg以及周边知识的理解与使用。我也列出自己正在或者即将阅读的书/资料与

2016-08-05 13:26:41

Visual Studio的工程依赖

今天在查看Visual Studio中A工程的时候,发现在VS链接页面的Command链接了B.lib静态库,可是我找遍了配置选项,也没找到配置的地方啊!!!经过探索发现,原来是工程依赖隐含了这个条件。 也就是说工程依赖至少实现了一下两个功能:      (1) 定义了工程编译的顺序,比如A工程依赖B工程,则编译A工程的时候回去先编译B工程      (2) 隐含了静态链接Lib文件,比如

2015-10-09 16:23:11

从图看Linux问题分析的工具

Brendan是Joyent的首席性能分析工程师,在2013年初发了一个关于Linux性能分析和工具详解的书,或者称其为文档吧。无论在性能分析,还是在Linux中其他问题分析,也许都会用到下图所标识的工具。 比如网络分析时会用到tcpdump, traceroute, netstat等工具;I/O分析的时候会用到iostat,iotop等工具;内存分析的时候会用到free,vmstat等工具;进程

2015-09-14 14:35:33

GDB读取动态库中定义的全局变量错误

最近看了一篇getopt使用的文章,为了追踪其执行的逻辑,于是采用GDB挂载调试的方式进行查看。但却出现了GDB打印全局变量optind的时候出现错误。问题发现和描述      首先optind是使用getopt时候的全局变量,表示使用getopt时候的下一个argv的指针索引。在应用程序调试的时候设置了多个参数,但是随着多次调用getopt,全局变量optind通过gdb打印出来的值却总

2015-09-04 13:23:03

Windows文件换行符转Linux换行符

前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。操作系统文件换行符   首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和LF(编码为10),在编程中我们一般称其分别为'\r'和'\n'。他们被用来作为换行标

2015-08-21 18:06:16

程序RPC 1726错误问题的追踪

最近在客户环境中碰到了一个头疼的问题,一个节点通过RPC连接到另一个节点成功,但是在发送RPC报文的时候,却返回了1726错误。错误信息      先来看看MSDN的解释,"这个远程调用失败了",这句话信息含量真是太少了啊,出现错误我肯定知道是远程调用失败了啊。RPC_S_CALL_FAILED1726 (0x6BE)The remote procedure call failed

2015-08-21 11:08:19

<<程序员的自我修养>>第二章读书读书笔记----静态链接

最近搞了一个Linux爱好者的微信订阅号,以Linux平台为主,定期也会分享一些网友的博文,和技术经验。因为网络文章,不和博主沟通,没法随意转发分享,如果您方便让您的经验一起分享,请您留下博客地址~~~以下是微信的订阅号,欢迎关注和讨论:         对一个不善写作的人来说,写一篇博客着实痛苦,但还是逼着自己去写,让所学的东西加深。本篇博客将对第二章内容进行回顾,理解,当然还要加上

2015-08-03 13:20:33

<<程序员的自我修养>>第一章读书读书笔记----从hello world说起

在读《程序员自我修养》这本书之前,是准备写读书笔记的,一来加深自己对本书的理解,而来可以和看到笔记的网友们互相讨论。当读到第三章的时候,心理暗暗偷懒,不想写博客了,要将自己的所读所理解的整理为一篇文章,确实会花费不少时间和精力,可又想了想了当初的目标和想法,还是决定写下去。 C语言Hello World程序你了解多少?第一章作者就抛出了一个问题,从一个简单的C程序的HelloWorld

2015-07-10 15:36:10

Loader Lock引起的一个Bug

在Windows中,让程序模块化实现的一种方式,就是让其实现为动态链接库。然后在主程序启动的时候隐式或者显示的去加载动态链接库。但是如果不恰当的编写动态链接库的DllMain函数,将会引起意想不到的Bug哦,比如典型的LoaderLock死锁问题。这不,我们产品中就碰到了一个由于LoaderLock而引起的Bug....1.背景介绍   当主程序在启动的时候,隐式或者显

2014-10-13 15:29:34

查看更多

勋章 我的勋章
    暂无奖章