| Weily's profileWeily的BlogBlogListsNetwork | Help |
|
|
August 31 解决DNS劫持的方法上次转贴了一长篇关于DNS劫持的东东,用ADSL或者FTTB之类的电信宽带的,很多都遇到过那个114劫持了,下面是最近在网上看到的2种解决方案:
1. 用OpenDNS,这个么,我现在在用,用下来还不错,至少没出现114了,而且从opendns的网站上来看,也不错。其实原理简单啊,他们就提供了dns地址,设置一下么就搞定了。地址么,google一下吧。
2. 去:http://www9.chinatelecom.com.cn/netcomplain1.jsp
这个地址投诉,互联星空,把你的情况描述清楚,记得留真实的姓名和电话,电信一般会在3个工作日,主动联系你,把你的宽带帐号从他们的PUSH list 中去除. 然后,问题,解决! 这招今天在KDS上碰巧看到,呵呵,貌似应该是一劳永逸的方法了,不过我还没试验过,大家可以试试看。
July 30 Vista? Office 2007? WGA...这个周末尝试了一下Vista和Office2007...
其实满早已前就已经申请了测试的cd-key,down好了镜像文件,刻了盘,可是一直没有时间装……正好这个周末在家,而且家里的系统也需要重装一下了。
这台机器么,配置不算高,但感觉跑Vista应该还勉强可以的:
C4 2.0
1G
FX5200(64M)
......
这些么,就显存未达标,其他还过得去...
于是兴冲冲地装了上去。装好了发现开机的那个进度条上面怎么是黑的?难道Beta版还没有设计好开机的那个Windows Vista的标志?奇怪……开机启动之后,的确看到了很多不同……而且也的确感到了我机器的“牛”(此为蜗牛……) 不过基本上还算能接受的速度,而且也看到了传说中的那个Flip 3D的效果,的的确确感受到了Vista的各种改变……
好,接下去装Office 2007 beta,hoho~~~的确不错,新界面我还是蛮喜欢的……cool~~
然后该装其他我需要用的了……结果这时候出意外了…… 装MultiICE2.2的时候,居然报了个错,貌似说什么并口服务未启动……可是我没找到这项服务啊……
于是开始第二遍安装过程…… 装阿装,终于差不多都装完了…… 想想在实验室机器上借助网上的补丁和WinDbg,把最新的media player 11 beta和IE7 beta都装上了。何不在装一次?接下去就一步步来……先去ms download center down安装文件,嘿嘿,自然首先无法通过WGA,然后google一下WGA破解补丁,找到一个,弄好,嗯,可以down了。就一个个down下来,解压,然后祭起俺的windbg,开始了破解之旅…… 过程么,这里不一一记录了(其实是忘了记录下来了,反正就是借助ms的public symbol上关于legitlib和legitlibm的symbol,然后在相关函数上设置断点,等验证失败,在退出的时候,把作为返回值的eax改掉,于是程序就认为我成功了……另外么,IE7的还比较麻烦一点,除了一开始主程序要验证,快结束的时候会创建一个update.exe的进程,那里面还会验证一次,所以必须利用windbg监视子进程的能力,把那个也要截获一下……)
说了那么一大段,可是现实往往会违背人的意愿……貌似media player11的安装程序改过了…… 我明明已经调试通过了那个验证,可是…… 还是题是无法安装成功…… 而且都不知道原因,windbg也没抓到任何exception(要知道当时能够找到legitlib的秘密,也是因为那个验证不成功会出AV……)。尝试几次后,遂放弃……好在IE7还是给我装上了…… 可是………………………………以外又发生了……貌似IE7和我机器上的某个软件有冲突(貌似某个IE插件之类的),IE7每次启动就崩溃……windbg挂上去抓不到exception,IE7自己抓掉了…… 在IE选项里把列出来的插件都disable掉……还是不行……完了,这年头没IE基本没法活,而且貌似除了重装,也没办法恢复到IE6啊……怎一个惨字了得…… 又没时间好好研究,算了,趁睡觉前,赶紧再装一次吧……
嗯,这次安装到算是顺利。就在我想再装media player的时候,居然发现这次我用得CD-Key能够pass WGA…… 这年头居然能让我找到这种CD-Key?嘿嘿,赶紧保留下来…… 不过这次学乖了,不敢装IE7了…… June 25 Live Messenger Support周五上午一来实验室,就发现一直正常的Live Messenger登录不上了。而且这个问题是很多人碰到过的了,可是貌似就没啥解决方案啊…… 还好,今天一大早,还是借助了Google的帮忙,解决了这个问题。在此留个记录,顺便也质疑一下MSN的support,真不知道是谁在做这个Messenger的support,不解决问题那还做什么support呢……
症状:
点击“Sign in”后,稍等一会儿,就弹出“80004005”的错误提示,然后使用其自动的Troubleshooter,扫了一下有可能引起connection问题的几个component,一切正常,但是就是有这个错误。
第一反应:
试用Windows Messenger,发现可以登录,排除帐号问题。然后到MSN官方网站上提交了问题,过了几分钟,就收到了自动回复的support邮件,内容如下:
Title: SRX1000079440ID - MSN Messenger:I need something fixed:Sign-in/Connection:Error: 80004005
Content:
Thank you for contacting Messenger Technical Support. We would like to help you resolve your question as fast as possible. Below you will find an instant answer from our automated system based on the most common solutions for the type of issue that you selected when submitting your question. Since this is an automated answer to provide you with a fast response, you may have already attempted these steps or they may not address additional details that you provided when submitting the issue. If this instant answer does not resolve or apply to the issue that you have submitted then please reply to this email so that we can have a support agent further assist you with your issue.
SYMPTOMS When you try to sign in to Messenger, you receive the following error message: - Sorry, we were unable to sign you in to the Messenger service at this time. Please try again later. 80004005 MSN subscription customers only: The Details section of the Status and Support page may display the following error message: - 80004005: Sorry, we were unable to sign you in to the Messenger service at this time. Please try again later. PROBABLE CAUSE This error message is a common error message that represents various connection problems in Messenger. TROUBLESHOOTING STEPS 1. Follow these steps to uninstall the existing version of Messenger: a. If Messenger is running, right-click the Messenger icon in the notification area, and then click "Exit." b. Click "Start," click "Run," type the following command, and then click "OK": control appwiz.cpl c. In the Add/Remove Programs window, click "Windows Live Messenger" or "MSN Messenger," and then click "Remove." 2. Uninstall any third-party add-ons to Messenger, such as Messenger Plus or Smiley Central. 3. Follow these steps to delete the Messenger registry keys. Important: This article contains information about modifying the registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, visit the following Microsoft Web site: http://support.microsoft.com/kb/256986 Warning: If you use Registry Editor incorrectly, you may cause serious problems that may require you to reinstall your operating system. Microsoft cannot guarantee that you can solve problems that result from using Registry Editor incorrectly. Use Registry Editor at your own risk. a. Click "Start," click "Run," type "regedit," and then click "OK." b. If all users of the computer cannot sign in to Messenger, locate the following subkey: HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\MSNMessenger c. If only one user account cannot sign in to Messenger, locate the following subkey: HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\MSNMessenger\PerPassportSettings\> d. On the "Edit" menu, click "Delete" to delete the registry entries. e. Locate the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSNMessenger f. On the "Edit" menu, click "Delete" to delete the registry entries associated with the installation of Messenger. g. Exit Registry Editor. 4. Delete the Listcache.dat file for all accounts that sign in to Messenger on the computer: a. On a Microsoft Windows 2000-based or Windows XP-based computer, click "Start," click "Run," type "CMD", and then click "OK." Note: On a Windows 98-based or Windows Millennium Edition-based computer, instead type "command". b. At the command prompt, type the following commands. After each command line, press ENTER: cd\ cd %appdata%\microsoft cd "msn messenger" del /s listcache.dat 5. If you are using Windows Live Messenger or MSN Messenger version 7.5, follow these steps: a. Delete files that may be causing a conflict. Click "Start," click "Run," type "cmd," and then click "OK." b. At the command prompt, type the following commands. Press ENTER after each command line: cd %allusersprofile%\application data\microsoft\identitycrl\*.* del *.dll cd %appdata%\microsoft\identitycrl\*.* del *.dll Note: If any files are in the folder, you will be prompted to confirm. Press Y to confirm. c. Follow these steps to delete some user-specific registry entries. i. Click "Start," click "Run," type "Regedit," and then click "OK." ii. Locate the following subkey: HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\IdentityCRL\Creds iii. You will see keys for every user account that signed in from this computer. Select the user account that cannot sign in, and then click "Delete" on the "Edit" menu. iv. Close Registry Editor. 6. Make sure that you are using the latest version of Messenger. To download and install the latest version, follow these steps: a. Start Internet Explorer, and then visit the following Web site: - For Windows Live Messenger: http://ideas.live.com - For MSN Messenger: http://messenger.msn.com/download b. Under "Registered User," click "Go." The download automatically starts, and a download progress indicator appears. c. Follow the instructions in the MSN Messenger Setup wizard to complete the installation. d. Click "Finish." 7. Try to sign in to Messenger again. If this instant answer does not resolve or apply to the issue that you have submitted then please reply to this email for additional help with this issue or visit http://messenger.msn.com/Help/ for answers to frequently asked questions. Thank you for contacting Messenger Technical Support. 尝试解决方案:
貌似邮件里很详细的列举了针对错误80004005的一种解决方案,即彻底卸载Live Messenger,然后重新安装。而且邮件里的步骤看上去的确够详细的了,包括删除注册表里的部分信息。可是当俺屁颠屁颠地照着这个步骤做完,发现还是登录不了啊…… 于是看到了邮件倒数第二段的那句:“If this instant answer does not resolve or apply to the issue that you have submitted then please reply to this email for additional help with this issue”,恩,好,我就再继续向官方的support求救吧。
可是:
一等就是2天,从周五到今天,一直没有进一步的回复了,俺还拜托困猫帮我去查了一下这个case id,结果没查到这个case…… 咋就这样把俺给忽略了呢?算了,求人不如求己,还是自己来吧。
尝试进一步解决方案:
前面邮件里的删除貌似还不算彻底,于是我就更进一步的把看上去和Live Messenger相关的都删了,重装一遍,还是不行……
开始Google:
Google一下,头一条就是我需要的:http://www.thehotfix.net/forums/index.php?s=d7506cdeacceb2a50d6a3b890b0ba9bb&showtopic=1968&pid=13809&st=0&#entry13809
这个解决方案简单很多,就是在你的Local Settings下面找到Windows Live Contacts文件夹,把里面清空,即可。
结论:
这招果然有效。其实刚才写blog的时候,又掉了一次线,再登录的时候又出现80004005了,于是再去把Live Contacts文件夹给删了,又好了。貌似这是个Bug啊…… 最后还是靠Google解决了MS的问题,而不是MS的support,寒…… April 30 与电信斗?!在选择这篇博的类别的时候,特地选择了"Tech",因为要在这里讨论一下技术上的对策,可恶的电信……
住中江并且开通FTTB+LAN的同学可能都知道这件事情了,电信现在限制每个帐号最多只能有4个连接(也就是一个账号最多4个人可以用),而且带宽也比原来小了。
原本我们是8个人用的(可能还>8个……),这样每人每个月的网费还好,相对于它的那种质量来说(速度、拨号的时间等),还算将就。可现在这么一搞,只能4人用,岂不是网费就要上涨了。而且,据这几天用下来的普遍反应,质量没有提高阿,照样拨号要拨好多次才能上去,照样打开网页慢慢慢……
电信这招太恶心了,借用一下某人的名言:“电信你表逼我噢,当心我发飙噢!”。咱本就是搞IT的,又是学网络的,我们得和电信斗一斗~~
现有下面几种方式来解决这个问题,可以实现大家共享上网的目的:
1. 采购宽带路由器一个,搞定共享。可是,这种方式的缺点就是大家平分带宽,本身电信已经把带宽又压缩了,这么一搞的话,大家估计都觉得不爽。可是现有的(或者说我们买得起的)那些设备,都只能拨一个号呀,都没有提供合并多个连接的功能,唉……
2. 开发一套东东,实现局域网内最多4台机器拨号上网,其他机器使用已拨上的作为网关,访问Internet,并且要能够网络负载平衡,也就是平均每台机器仅承载2台机器上网。
这个方案是好,而且是可行的,但是做起来需要一番功夫的。目前不知道Windows是否开放NAT和路由功能的接口(考虑大家的系统都是xp,所以无法利用server的功能,最多只能用xp自带的ICS)。
如果使用ICS,貌似有n多限制,比如网段必须是192.168.0.0,最多只能有一台作为网关……
而如果不用ICS,从目前来看,要实现驱动层的东西了,包括PPPOE,包括网络负载平衡,包括路由和NAT的功能,我的妈呀,这些东西都做好,完全可以作为毕业论文了,工作量不小啊。可大家都没空啊……
唉,归根结底就是电信可恶,大家来集思广益吧,给我们提供可行方案吧,或者谁有空来做一套这个东西吧,呵呵。
April 21 C扫盲1. 数组/结构的初始化
数组/结构可以在定义的同时进行初始化,比如:
int array[2] = {1, 2};
那么下面这个会怎么样呢?
int array2[5] = {1, 2};
答案是,前两个被初始化为1和2,后面的,全部被初始化为0。
这个在C/C++的标准中有明确定义。
2. 宏的定义
定义宏的时候,往往都会考虑到副作用的问题,所以会把参数都用()包起来。可是,如果你的宏里面有多条语句呢?
先看看有问题的例子:
#define MultiLineM() \
{ \
cout << "Line1." << endl; \
cout << "Line2." << endl; \
}
调用的时候,一般这样:
MultiLineM();
恩,看上去一切都是OK的。
那么如果放到if-else里面呢?
if(multi)
MultiLineM();
else
cout << "Single Line." << endl;
从表面上看,貌似没什么问题。但是如果把宏展开,就发现:
if(multi)
{
cout << "Line1." << endl;
cout << "Line2." << endl;
}; else
cout << "Single Line." << endl;
看到上面的那个“;”没?嘿嘿,出错啦,else被孤立拉。这个简单的例子会编译不通过,那么还好找错,但是如果是if-else嵌套的情况,那就麻烦了……
所以有时候会看到下面这种定义宏的方式,这才是王道:
#define MultiLineM() \
do { \
cout << "Line1." << endl; \
cout << "Line2." << endl; \
} while(0) March 21 Avalon is amazing...Avalon实在太BT了……
以后Windows平台(比如vista)的图形界面(无论是Win form还是Web form)都靠这个了……
2种方式来做界面,要么直接写XAML的标记,要么用interactive designer来做。基本上这年头连网页也没什么人直接写html code了,最多改改。所以基本肯定用后者了。
后者作为MS的三剑客(别问我是哪三个,你知道一个就够了……
而对于程序员来说,在不考虑直接调底层(比如DirectX之类的)的情况下,想要做出很“炫”的界面效果么,会比较头大,毕竟咱不是学设计的…… 不过即便没有很“炫”的效果,基本的UI也够漂亮了。
感觉这个对行业的划分有蛮大影响的。例如现在的Windows下,想要做出漂亮的界面效果(最好还带上一些动画效果),那么还是需要程序员来支持的,没有程序员的“高深”技巧,美工人员即便再强,也难做出漂亮的UI。而Avalon么,就把这个改了,美工人员不需要懂coding,不需要知道那些GDI的API,就完全可以作出炫目的效果啊……
话说回来,这个也将导致机器的升级,显卡、内存、CPU都得跟上啊……不小的cost……
好在vista也没那么快发布正式版,更没那么快普及起来,所以等着等着,钱就够了,价格也便宜了,hoho…… February 14 The power of Administrator1. Take-ownership;
2. Close & reopen it;
3. Write-DACL -> Change DACL to get Full Control;
4. So Powerful. February 09 xp中的用户帐号高级设置在Windows XP中单击“开始→运行”
January 31 MSN登陆错误之80048820问题原因:系统日期时间不对。
解决方法:修改系统时间为正确时间,或者通过Internet时间服务器进行同步,即可解决。
这个小问题刚刚碰到,刚刚解决,剩下的机器的大问题都还没解决……
等全部弄好,再来做记录。
补充:80072efd
问题原因:ip地址为广播地址。
解决方法:重新获得非广播地址。 January 21 公告鉴于这边贴技术贴不大方便,而且这个地方也不大适合贴技术贴,所以,打算新建一个技术blog,把相关东西搬过去,以后,也将把技术类帖子都贴到那里去。
技术blog的地址:
p.s.搬家比较累唉…… 一点点来吧…… January 09 System CallIA-32 before PentiumII —— 没有SYSENTER和SYSEXIT指令的年代 系统调用需要通过Exception Handler来Dispatch。对于Windows NT/2000而言,利用int 0x2e来实现。而 在系统调用的时候,需要进行栈切换的工作。由于Interrupt/Exception Handler的调用都是通过 call/trap/task这一类的gate来实现的,这种方式会进行栈切换,并且系统栈的地址等信息由TSS提供。 这种方式可能会引起多次内存访问(来获取这些切换信息),因此,从PentiumII开始,IA-32引入了新指 令:SYSENTER/SYSEXIT。 SYSENTER/SYSEXIT 这对指令专门用于实现系统调用。从用户级到特权级的堆栈以及指令指针的转换,可以通过这一条指令来 实现,并且,需要切换到的新堆栈的地址,以及相应过程的第一条指令的位置,都有一组特殊寄存器来实 现,这类特殊寄存器在IA-32中称为MSR(Model Specific Register)。这里牵涉到3个特殊寄存器:
SYSENTER_CS_MSR: New code segment selector 0x174 SYSENTER_ESP_MSR: New Stack Pointer 0x175 SYSENTER_EIP_MSR: New Instruction Pointer 0x176
这里标出的3个16进制数分别对应这3个寄存器的地址,该地址用于Kernel debug时,通过rdmsr/wrmsr指 令来读/写这3个寄存器。上面的注释也很明显地解释了这3个寄存器的作用。 因此,在Windows XP/2003以上的系统,都会优先考虑这种方式来实现系统调用。当然,如果是在 PentiumII以前的机器上运行的话,那么仍旧使用原来的那套机制。
说明:在Intel实现这对指令的同时,AMD也提供了一对相似的指令:SYSCALL/SYSRET,其工作方式与IA-32的 这套类似,不过寄存器有些不同,由于手头没有相关资料,所以具体的区别就不是很清楚了。Windows XP/2003同样支持AMD的这套指令。 January 08 StackIA-32的stack是由高地址向低地址延伸的,所以PUSH指令会将栈顶指针递减,POP指令将栈顶指针递增。
有2个寄存器与stack相关,分别为EBP和ESP。 EBP指向当前stack frame的栈底位置,按照IA-32的Manual上的称法,EBP是“Pointer to data on the stack”,其实应该是一个Base Pointer。由它决定了当前栈的起始位置。
ESP指向当前的栈顶,准确地说是指向当前栈里最顶端的那个数据。
PUSH指令会先将ESP递增(根据栈是2字节对齐还是4字节对齐,相应地加2或者加4),然后将要PUSH的数据放入栈中。POP指令执行相反的操作。
按照IA-32的Manual上对于过程调用(以call/ret方式实现)的说明,基本过程如下:
call 1. 将EIP(即过程返回地址)PUSH到stack上; 2. 将ESP的值存入EBP,即切换到新的stack; 3. 跳转到相应的地址执行被调用过程的指令; ret 1. 将EBP的值存入ESP; 2. 将当前栈顶(即EBP所指位置)POP到EIP中; 3. 执行EIP地址的指令,也就是完成return; 从这个过程里,可以看到EIP的保存和切换到新stack的过程。但是这里有个问题,就是ret的时候,如何恢复原先的EBP呢?这个问题在IA-32的Manual上没有找到答案,那么就通过实际的程序来试验一下吧。
通过查看程序的汇编代码,发现新过程一开始总会执行下面的指令:
push ebp mov ebp, esp 对应的过程结束部分有下面的指令: mov esp, ebp pop ebp ret 这就对了嘛。而且也发现实际栈的EBP并不是像IA-32的Manual上说的那样指向保存的返回地址的,而是指向返回地址的下一项,也就是这里代码所显示的这样。 ok,过程调用的stack情况了解了,那么接下去看看关于参数传递的问题吧。
对于参数传递,可以有多种方式,比如通过通用寄存器来传递,或者用栈来传递。这里就讨论栈传递的方式。为了便于比较,这里就讨论c/c++ call convention和std call convention两种情况。 这里我就不讨论这两者的一些背景知识了,将注意力focus汇编指令如何实现这两种不同的方式。
前者是由调用者来负责参数的清理,而后者是由被调者来清理栈上的参数。 IA-32的RET指令可以带上一个参数,例如:
ret n ;ret的时候,将ESP + n 这个参数的作用就是为了给被调者用来清理堆栈上的参数的。 而对于c/c++ call的情况,被调者就ret,而调用者会在ret回来的地方执行下面指令: add esp, n 这条指令就将栈顶指针指到正确的位置(即跳过了那些参数)。 那么,最后说一句为什么会需要调用者清理的这种情况呢?其实这种方式是为了对应于c中的可变长参数列表的情况,这时候只有调用者知道有多少参数,而被调者编译时不知道有多少参数传递进来了。 January 07 一个小case这段时间看inside,有稍微试用了一下debug工具,结果晚上回寝室就派上用场了。
我们清纯的Maoer同学,近期新买的那个mp3,结果回来插到他自己机器上,机器就崩溃重起了……
虽然这不是什么好事,不过对我来说正好是个可以试验的机会,而且还是真实环境的蓝屏。
于是乎,从Maoer那里要来了他的mini dump文件,装上了debug工具,就想尝试看看。
结果,一方面由于是mini dump,本身所含信息量很少,然后又由于寝室机器上没有symbol,该死的中江网络又超慢,导致花了不少时间都没找出问题所在……
在多次尝试自动下载symbol后,终于把几个基本的kernel symbol给load进来了。
然后查看一下加载的driver,哈哈,终于找到了那个罪魁祸首了。
于是让毛儿在注册表里删掉那个driver,再把对应的文件也删掉了,而且,一开始毛儿就想到了是那个东西上自带的软件里面包含这个driver的,于是把mp3上的那个自带软件整个删除了。再把它插到机器上,哈哈,这回没问题了。
这些搞定了后,我还想进一步查找解决方法,于是搜了一下google和ms的kb,发现有这个driver的bug信息,并且在那个driver的厂商主页上找到了一个update。嗯,问题算是基本都解决了。不过毛儿由于已经在玩游戏了,所以没有测试一下那个update的补丁,不知道最后是否会可行,呵呵。 |
|
|