存档

2011年1月 的存档

C语言union(联合体 共用体)

2011年1月13日 8 条评论

一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。

  1. union中可以定义多个成员,union的大小由最大的成员的大小决定。
  2. union成员共享同一块大小的内存,一次只能使用其中的一个成员。
  3. 对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存)

下面看一个简单的代码:

1
2
3[……]

继续阅读

分类: C语言 标签: , ,

你很烫吗?我很烫

2011年1月6日 8 条评论

相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释一下吧,有错误的地方请指正:
在上一篇文章中,我们逆向了Debug模式下的一个C程序,发现栈区开辟的存储空间都是使用0CCCCCCCCh来填充4字节单位的,也就是说,栈区开辟的存取局部变量的空间的每一个字节都被0xCC填充了。(为什么用0xCC,这个是int 3h的机器码,下断点用的)两个0xCC合[……]

继续阅读

分类: 逆向调试 标签: , , , ,

C语言反汇编入门实例

2011年1月6日 5 条评论

看《天书夜读》第一章,感觉很亲切,于是自己动手操起VS,建立一个默认的Win32 Console Application,在一个空空的main函数里面F9下一个断点之后,按下F5进入调试,然后Alt+8进入反汇编查看窗口,代码如下,自己给他加了点注释,还是很浅显的东西。这里的是Debug模式的反汇编代码:(博客对ASM代码注释的显示颜色不好看,大家将就一下)陌生的指令可能是stos,大家可以自己去Google查一下加深了解;通过仔细阅读这个例子,相信读者们当初学习汇编的场景已经跃然眼前了。

1[……]

继续阅读

事件 互斥对象 信号量

2011年1月2日 5 条评论

看《Windows驱动开发技术详解》,第八章了,看到用户态同步处理。照抄了几段代码,关于事件、互斥对象、信号量。
以前写过入门级别的多线程,差不多忘了一干二净了。
还有,如果代码有编译错误请参考上一篇文章予以解决。
O(∩_∩)O~代码仅供娱乐之用。接下来该看内核模式下的同步处理了。
占 位 专 用 [……]

继续阅读

error C2065: ‘_beginthreadex’ : undeclared identifier

2011年1月2日 没有评论

使用_beginthreadex照着MSDN的Demo写了一个程序,编译错误?明明包含了process.h头文件啊!!仔细一看,MSDN说“compile with: /MT”。所以需要自己手动修改工程的设置。
网上的方法是这么介绍的:
Project -> Settings… 中,选C/C++ 的页,然后在Category中选Code Generation,然在它下面的Use run-time libaray中选Multithreaded(或Multithreader DLL[……]

继续阅读

DbgPrint/KdPrint输出格式控制

2011年1月1日 2 条评论

在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉。这些输出信息可以通过DebugView对内核的监控来看到。
KdPrint is identical to the DbgPrint routine in code that is compiled in a checked build environment. This routine has no[……]

继续阅读

分类: Windows驱动开发 标签: , ,

ObReferenceObjectByName蓝屏问题

2011年1月1日 1 条评论

在拖了几天,调了快一天之后,问题终于在新年的第一天解决,庆贺一下O(∩_∩)O~
在“北极星2003”的CSDN博客上看到说用ObReferenceObjectByName来输出驱动程序的基本信息,结果我去测试的时候无情的蓝屏了。找了好久,终于发现了原因所在。因为博客上的代码是C++,而ObReferenceObjectByName是NativeAPI,所以需要做一个声明,C++用了extern “C”,而我的是C语言,用了ifdef宏定义,忘了加extern了,结果导致[……]

继续阅读