2009年2月16日星期一

2008年的其他牢骚

偶然间看了看MFC2005的代码,感觉它的风格和Vista DDK里东西很象,看过之后都有想吐的
感觉。还是看看微软在做什么吧,这个东西下载了,可惜没装上,没代码也不想装了。http://blogs.msdn.com/vcblog/archive/2007/11/09/
quick-tour-of-new-mfc-functionality.aspx
不过更邪恶的是Vista 64,连驱动都不让搞了。不过总是有人要起来反抗的。
http://www.linchpinlabs.com/resources/atsiv/usage-design.htm
Subverting Vista kernel 是很酷的。

ZwXxxFile会把调用模式设置为KernelMode,这样便可以绕过用户态内存检查代码。尽管这种检查没有Linux做的完备。在Linux中直接调用file->f_op->read或file->f_op->aio_read就可
以了。
最近想看点新书了,就找了找,找了一本《windows via c/c++》。比较前四版来看,第五版
变化不大。
《Windows® Internals: Including Windows Server 2008 and Windows Vista》要明年才能看到,等吧。
天天蓝的同学应该看看这个:
http://www.dumpanalysis.org/

"Many kernel developers have long demanded an in-kernel debugger. Unfortunately, Linus does not want a debugger in his tree. He believes that debuggers lead to bad fixes by misinformed developers. No one can argue with his logica fix derived from real understanding of the code is certainly more likely to be correct. Nonetheless, plenty of kernel developers want an official in-kernel debugger. Because it is unlikely to happen anytime soon, a number of patches have arisen that add kernel-debugging support to the standard Linux kernel. Despite being external unofficial patches, these tools are quite well featured and powerful. Before you delve into these solutions, however, it's a good idea to look at how much help the standard Linux debugger, gdb, will give you." --Robert Love

Linux kernel 2.6.26出来了,带着kdb一起出来的。
http://oslab.info/index.php/Misc/KGDB
公司老大一声令下给我又弄一台机器,瞬间结束了我调虚拟机的生涯。
http://www.wd-3.com/archive/RemoteDbg.htm

不过,Linux还是要扔进虚拟机里的,嘿嘿。。。。。。。。。


IoRegisterDriverReinitialization很恶心,尤其是在DDK里的对它介绍,看了半天还是不大
确定它到底是做什么用的。但事后一想,还是很佩服它的设计者。WDM有AddDevice,那非WDM
总也得有个对应的东西吧?没错,它就是做这个的。在调用DriverEntry的时候,也就是在
IopLoadUnloadDriver里,调用DriverEntry之后,就是调用在全局列队里的重新初始化函数。
但这里有个细节,它是边移除边调用。这样一来,在DriverEntry里使用
IoRegisterDriverReinitialization并在注册的重新初始化里再次无条件的调用IoRegisterDriverReinitialization,那么死循环就是一定的了。因此,是在一定条件下再次
调用。不过,再DriverEntry之外调用就没那么麻烦了,这样做可以得到其它驱动的初始化结果。
现在流行复古,所以PsGetVersion和IoReadPartitionTable之流就是不可避免的了,还好
MmGetSystemRoutineAddress一直不错,它不仅仅可以搞定ntos就连hall它也不放过。

google是用GET方法处理URL的,可能是CGI吧,提高效率。ACPI是一个后门,虚拟光驱类软件
经常利用它。
老婆的同学出嫁了。婚礼很浪漫。
回到家乡,家乡人还是那么淳朴。
容易得到的术,难得的道。


http://blogs.msdn.com/winfs/default.aspx
http://www.openrce.org/articles/
http://www.microsoft.com/presspass/exec/de/default.mspx
http://www.microsoft.com/presspass/exec/techfellow/default.mspx
http://blogs.msdn.com/peterwie/
http://blogs.msdn.com/greg_schechter/archive/2006/03/25/561167.aspx
http://blogs.msdn.com/spatdsg/
http://www.alex-ionescu.com/


CString s;
printf("%s", s);
看看CString,也不用看太多,
#define MAX_LINE_LEN 2048
#define MAX_TAGS 63
#define MAX_SUBTOKENS 8
class CString
{
char szString [ MAX_LINE_LEN+1 ];
public:
CString() { szString [ 0 ] = '\0'; }
.....................
AllocSysString和SysAllocString得到的是BSTR,它前四个字节是长度。
所以长度为*((long *)x-1)。
_bstr_t居然是class,在comdef.h里。
很邪恶吧?
更邪恶的是有符号和无符号数比较,
UINT u;
INT i;
if (u > i)
.......................
有符号数会被当做很大的无符号数,前提是它真是的负数。
至于64位windows编程倒不用担心,就是指针位数变了。
微软的编译器使用了LLP64的方式,可能它是觉得32位为计算之用已经足够。
另外一个比较诡异的事是2K和它之后的操作系统对Boot Start Driver的处理
并不一致。
说点细节吧,netflt start 1 no group tcpip start 1 group pnp_tdi。
我原来的理解是无论tcpip start是0还是1,只要我的netflt为1,无组,那么就
应该可以挂在tcpip上。
可事实是2K上它们的顺序是反的。我看了IoInitSystem的代码,认为只有
一种可能会发生这种情况,就是它们Root树的位置不同。当然修改start为2,
也可以解决问题。
Linux里的KVM值得关注
学习完全虚拟化技术的好资料,vmware我就不用了。
而文件系统方面的好书是《File System Forensic Analysis》。
对于高级文件系统XFS、reiserfs就只好去看代码了。

没有评论:

发表评论