青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪了。
 
今日:0    总帖:355
admin
12348
    首先,我们先来说明下Print Spooler这个服务的用途是什么    服务名称: Spooler    显示名称: Print Spooler    服务描述: 管理所有本地和网络打印队列及控制所有打印工作。如果此服务被停用,本地计算机上的打印将不可用。如果此服务被禁用,任何依赖于它的服务将无法启用。    可执行文件路径: C:\WINDOWS\system32\spoolsv.exe    由此我们可以看出,这个服务的用途就是用于提供打印服务的,如果意外停止了,那么将会导致无法打印,有时候意外停止后虽然我们手动启动了,但会发现马上这个服务又停止了,或者一安装打印机驱动打印服务就意外停止,或者想打印的时候,点击打印就意外停止服务等等    今天我们就来说下这个问题,不知道大家有没有遇到过,有时候启动Word或者Excel,会发现异常的慢,如果试图点击,还会看到程序无响应,大家不要觉得这里说的跟主题没有任何关系,实际上有时候启动Word卡死,往往就是打印服务的原因,当然这个占的比例不是很大,细心的网友,如果遇到启动Word卡死,点击后弹出程序无响应的时候可以试试点击查看详细信息,如果看到“spooler.exe”之类的字样,那么很明白的告诉你,这就是由于打印机的原因照成的。     当然也有人会遇到如开头所说的那样,服务意外停止了,重新启动以后,很快就又停止了,那么遇到这种情况该如何解决呢?     首先,如果你的电脑,启动该服务以后,不操作打印的相关任务下,打印服务不会停止的话,那么你可以尝试下将打印机页面中多余或已经不使用的打印机删除,看是否可以解决      如果不能解决,或者不操作的情况下,也会自动停止服务的情况,这个就需要到注册表中去清理打印机的残留数据。      方法: 1.按下键盘上的Win+R键,或在开始菜单找到“运行”,在弹出的窗口中,输入“regedit”,点击确定 2.在弹出的窗口中,我们定位到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers”     在这里,我们所看到的所有名称就是我们电脑上已经安装了的打印机,在这里,如果你能确定是哪台打印机引起的,你可以直接在这里把相关打印机的信息删除即可,如果不确定,那么把所有的删除了,也不会影响什么的,当然如果不放心,可以先做一个备份后,再做删除,一般情况下,我们删完以后,再回去重启打印服务,基本就不会再出现意外停止的问题了。
教程与文档 5 0 2358天前
admin
11642
名称:路由侠 大小:6.75 MB 语言:中文 授权:免费软件 更新:2017-02-06 官网:http://www.luyouxia.com/ 平台:Windows介绍:      路由侠官方版是一款功能十分强大的路由穿透软件,软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。路由侠官方版可以支持内网穿透、IP代理、端口隧道转发等功能,专门为MC内网开服做了深度网络优化, 游戏专线高响应,并且给你提供免费的动态域名申请,实现外网轻松访问内网。应用场景:       家中建站  我是站长:无需公网IP、不用机房托管、虚拟主机的价格,独立服务器的配置。建网站,私有云。  远程桌面  我常出差:连接系统远程桌面。在外操纵家中电脑,手机也能远程桌面,调取资料简单快捷。  游戏服务器  我是玩家:我的世界……邀请朋友加入联机,内网开服,一起沉迷历险与创作,分享伟大造物主的荣耀。  ERP互连互通  我是账务:支持OA办公/财务软件/连锁店管理,把分支办公室连起来。还支持远程操作打印机。  SVN代码库  我是程序猿:抱上笔记本,来一场说走就走的旅行。知你如知己,正如写到这,想到了你此刻的目光。运行截图: 下载地址:官方下载     本地下载同类推荐:蒲公英VPN
工具 4 0 2361天前
admin
7020
很多人为了学习的方便给电脑安装Windows Server 2012,但是在浏览网页的时候经常会弹一个IE增强安全配置的提示框,使用起来很不方便,这种情况我们只需禁用IE增强的安全配置即可。还有就是在浏览一些一些视频网站时,会一直提示需要安装Adobe Flash Player插件,但点击安装后又无法成功安装。下面将介绍如何在Windows Server 2012中安装Adobe Flash Player。1、Windows Server 2012,IE 默认是没有安装 Flash Player 的,有的用户尝试去下载安装 Flash Player,可是怎么也装不上,其原因也是因为 Server 2012 同样内置了这个特殊的 Flash Player,只是默认没有启用。提示Flash Player安装遇到错误2、启用Flash Player 方法。打开服务器管理器,选择“添加角色和功能”。3、打开向导后保持默认,一直点“下一步”,直到功能选择页面,找到“用户界面和基础结构”,勾选“桌面体验”并添加所需功能,完成后续安装。5、安装完成后重启电脑,打开控制面板可以看到Flash Player成功安装,也可以在视频网站观看视频。
维护 3 0 2362天前
admin
8096
这次主要想跟大家探讨一下Windows系统下开机时按下F8键之后系统进行的一系列操作。了解了这些操作之后,相信大家就能对很多无法正常开机的原因“有所行动”了。引用微软官方解释:    “高级引导选项”屏幕使您能够以高级疑难解答模式启动 Windows。可以通过打开计算机并在 Windows 启动之前按 F8 键访问该菜单。    某些选项(如安全模式)将以限定状态启动 Windows,其中只会启动空白的基本内容。如果在安全模式下启动时没有再出现问题,您可以将默认设置和基本设备驱动程序和服务排除在可能的故障原因之外。其他选项将启动带有供系统管理员和 IT 专业人员使用的高级功能的 Windows。  修复计算机    显示可以用于修复启动问题的系统恢复工具的列表,运行诊断或恢复系统。此选项仅在计算机硬盘上安装了这些工具之后才可用。如果您使用 Windows 安装光盘,则系统恢复工具位于该光盘上。  安全模式    以一组最少的驱动程序和服务启动 Windows。  网络安全模式    在安全模式下启动 Windows,包括访问 Internet 或网络上的其他计算机所需的网络驱动程序和服务。  带命令提示符的安全模式    使用安全模式下的命令提示符窗口启动 Windows,而不是通过一般的 Windows 界面启动。此选项适用于 IT 专业人士和管理员。  启用引导日志    创建文件 ntbtlog.txt,该文件列出所有在启动过程安装并可能对高级疑难解答非常有用的驱动程序。  启用低分辨率视频(640x480)    使用当前视频驱动程序和低分辨率及刷新率设置启动 Windows。可以使用此模式重置显示设置。  最后一次的正确配置(高级)    使用最后一次正常运行的注册表和驱动程序配置启动 Windows。  目录服务还原模式    启动运行 Active Directory 的Windows域控制器,以便可以还原目录服务。此选项适用于 IT 专业人士和管理员。  调试模式    以供 IT 专业人员和系统管理员使用的高级疑难解答模式启动 Windows。  禁用系统失败时自动重新启动    因错误导致 Windows 失败时,阻止 Windows 自动重新启动。仅当 Windows 陷入循环状态时,即 Windows 启动失败,重新启动后再次失败,使用此选项。  禁用强制驱动程序签名    允许安装包含了不恰当签名的驱动程序。  正常启动 Windows    以正常模式启动 Windows。问题引出:    上面是微软对“高级启动选项”下各个选项的讲解,同时也相信大家大都在开机时按过F8键,XP时代很多人使用F8键主要是用来进入安全模式,进入安全模式的理由也很简单:对系统崩溃或出现问题后使用“系统还原”功能还原系统。诚然,这是一个非常适合大家快速解决一些误操作问题的方法。但是,大家除了这个安全模式下的“系统还原”功能外,对F8的其他功能使用过吗?想必大家同样大都用过“高级启动选项”下的“最后一次的正确配置(高级)”功能。大家在使用这一功能的时候,起过作用么?或者说,使用这个功能的时候,是不是也遇到过没有起作用的情况?那到底什么情况下应该起作用,什么情况下就是解决不了问题呢?另外,为什么有时候“安全模式”也无法进入呢?下面,我将同大家详细了解一下“最后一次的正确配置”和“安全模式”模型的原理。以帮助大家诊断启动过程中出现的问题。最后一次的正确配置:  原理:    “最后一次的正确配置”(Last Known Good)是解决启动过程中遇到的系统崩溃问题的非常好的解决方法。因为系统的配置信息都是储存在注册表HKLM\SYSTEM\CurrentControlSet\Control下,而驱动和服务的配置信息存储在注册表HKLM\SYSTEM\CurrentControlSet\Services下,对注册表中这些位置键值的修改可能会导致无法正常启动系统的问题。比如,如果你安装了一个设备的驱动程序,而这个驱动程序存在BUG,这时,这个驱动程序可能会导致系统崩溃,此时,您可以再开机时按下F8,然后从列出的菜单选项中选择“最后一次的正确配置”。这时,系统会通过设置HKLM\SYSTEM\Select中Failed的值来标记这组ControlSet在启动系统时失败了,然后,系统会将存储在HKLM\SYSTEM\Select\LastKnownGood中的值传递给HKLM\SYSTEM\Select\Current。同时,系统会将HKLM\SYSTEM\CurrentControlSet数据指向“最后一次的正确配置”的所指向的ControlSet。由于刚更新的驱动键值并没有存储在“最后一次的正确配置”的Services子键下面,所以系统会成功启动。    上面介绍的便是详细的理论原理,可能您会有些不明白,我用图片描述一下您就能明白这里面的意思了:    如图,在HKLM\SYSTEM\注册表项中是有三个ControlSet的,这就是用于启动系统的三个最常见的控件组(有时候可能会存在额外的一组控件组),这些控件组中包含了操作系统配置的信息,比如服务、驱动、系统控制、枚举信息等等。    默认情况下,ControlSet控件组中存储的是上次正常关机时的系统配置信息,在系统正常开机过程中(未使用“最后一次的正确配置”的情况下),Windows会从ControlSet001复制一份副本,作为操作系统当前的配置信息,也就是CurrentControlSet。我们对于计算机配置信息所作的任何修改都是直接写入到CurrentControlSet,而在重启过程中,Windows会用CurrentControlSet的内容覆盖掉ControlSet001,以保证这两个控件组一致。    而当操作系统每成功启动一次(指成功登录),Windows都会将CurrentControlSet中的数据复制到ControlSet002中。这样,ControlSet002就成了“最后一次的正确配置”,而这就是按下F8键“高级启动选项”界面的选项。    如上图所示,正常情况下,HKLM\SYSTEM\Select子键,其中有Current、Default、Failed和LastKnownGood四个DWORD键。    “Current”数据项目表示Windows在这次启动过程中使用的控件组。     “Default”数据项目表示Windows在下次启动时将使用的控件组,它与这次启动使用的控件组相同。     “LastKnownGood”数据项目表示您在启动过程中选择“最近一次的正确配置”时 Windows将使用的控件组。     “Failed”数据项表示Windows在其中保存失败启动产生的数据的控件组。此控件组在用户第一次调用“最近一次的正确配置”选项之前并不实际存在。     需要指出的是,在使用“最后一次的正确配置”的时候,Windows会在Failed数据项中将ControlSet001进行标记,将ControlSet001进行封存,同时从ControlSet002复制一份副本,作为操作系统当前的配置信息。但是,这里会出现一个问题,在正常启动的时候,启动成功之后,Windows会从CurrentControlSet控件组复制一份副本,存储在ControlSet002中,然而在使用“最后一次的正确配置”的时候ControlSet002中存储的信息变成了系统真实的信息,所以,此时,只能将CurrentControlSet的信息复制一份到一个新的控件组作为新的“最近一次的正确配置”,也就是ControlSet003。此时,在HKLM\SYSTEM\注册表项中便同时有四个ControlSet存在。最后一次的正确配置的“威力”范围:    通过上面的讲解,大家应该对“最后一次的正确配置”功能有了比较深入的了解了吧。“最后一次的正确配置”功能只还原注册表顶HKLM\System\CurrentControlset 中的信息,任何在其它注册表项中所做的更改均保持不变。所以,对其他注册表项进行的误操作造成的启动问题,“最后一次的正确配置”功能是无法解决的。同时由于只涉及了注册表的还原操作,故它不能用于解决由于驱动程序或文件被损坏或丢失所导致的启动问题。   但是,“最后一次的正确配置”功能是能够用来解决诸如“新添加的驱动程序与硬件不相符”等相关问题的。
维护 5 0 2363天前
admin
5256
转载自:http://mp.weixin.qq.com/s/9GN0cxATX56GY8iss8HE3A作者 | 小九来源 | 每日七言(ID:mrqy88)================================================================离家的路有千万条外面的世界复杂又精彩可在家的爸妈心里只有一个期盼等你早日回家团圆中秋前夕,71岁的山西老两口抓紧推石磨准备辣椒酱,盘算着给六个孩子回家返程带上。没想到,一连接到几个电话,得知儿女都回不来,大爷忍不住哭了:“哪怕回来一个呢。”我们总以为,多挣点钱,有能力给爸妈买点好的是尽孝。可爸妈最期盼的,却是儿女能常回家看看,一起吃顿团圆饭。爸妈准备了一桌好菜,你夸一句好吃,他们就会喜笑颜开;饭后聊聊工作和生活,再琐碎的事儿,他们都听得津津有味。作为这个世界上最疼你、最关心你的人,他们不图你的回报,却始终处处为你着想。来时欣喜,走时伤感,再次离家时,总是不忘让你带上家乡的味道。塞得满满当当的行李箱里,都是爸妈沉甸甸的牵挂和爱。 01 南京禄口国际机场一位大叔行李箱超重30斤里面装的是母亲亲手做的煎饼和咸菜▼每一只临走的行囊都装着沉甸甸的亲情每一个游子的心里都有着暖融融的不舍 02 早上回无锡妈妈说给你煮两个鸡蛋带着我说可以啊结果煮了17个让我带着@Leo—JI▼父母能给你的不一定是全世界最好的但一定是竭尽全力给了你全部还生怕不够 03 省吃俭用一年全攒给儿女了@朱小桃happy▼只要和孩子有关哪怕一口吃的都是父母心目中的大事 04 随口抱怨了一句在外地吃不到口味正宗的火锅妈妈就在我行李箱里塞了好几袋火锅调料@中书护法▼不管走多远都别忘了家乡的味道不管走多久都别忽视爸妈的牵挂 05 我妈觉得外地消费高能省一点是一点给我装了很多吃的还塞了一把衣架@特蕾莎的浅笑▼离家之后才明白之前的岁月静好都是父母在替你负重前行 06 奶奶给我带的饺子不会写字的她画了图让我区分馅料@simple-小璐▼如果一个人真的爱你一定会想尽办法,竭尽所能 07 和老公开了一辆越野车回家回来的时候其余的座位和后备箱全部塞得严严实实@陈帅哥的鸡宝宝乖乖▼在这个世界上没有人比爸妈更爱你 08  爸妈非要给我带的土鸡蛋用米小心翼翼地保护好坐地铁的时候摔了几个心疼得要死不过没有扔,都打出来准备全部吃掉@圆圆嘀我▼无论你在哪儿背后都有父母默默的关心 09 我妈一个夏天照的节龟(知了的幼虫)冻在冰箱里临走前一天连夜炒熟让我在火车上吃@老乡开门我们真的是八路▼分明已经立业成家父母却永远把你宠成孩子 10 爷爷给拿了满满一行李箱土鸡蛋和咸蛋怕区分不开还做了标注@臭屁篓的小兽兽▼从来不说“我爱你”却一直用行动爱着你 11 回家一趟带回来的东西能装满冰箱@一层一层一层剥开你的皮▼可怜天下父母心心甘情愿地付出却从来没有想过回报 12 妈妈提前两个月给我做腊肉还装了快60斤自家种的大米满满的都是爱@泡泡蛮可▼衣裳再添几件饭菜多吃几口儿行千里母担忧 13 我妈给我装的葡萄干家里种的葡萄一滴农药没喷过不加催干剂,自然风干吃起来特别甜,特别放心@我和燕子的日常▼爸妈不求别的只要你健康快乐你的小幸福就是他们的大幸福 14 我爸偷塞给我的钱@请call我刘大菲▼“多吃点好的,多吃点菜别委屈自己没钱了跟爸妈说” 15 别人送给奶奶的嘉顿饼干她没见过,觉得很珍贵藏了快一年舍不得吃等着我回去给我其实饼干都过期了怕她心疼,我还是带着了@喵安安_▼他们比想象中更爱你 16 临走之前爸妈给我塞了一大袋核桃每一个都已经夹好了@周嘉人▼家再远爱都在身边从未让你们骄傲你们却始终待我如宝  17 在外很少能吃到手工拽面回家之后妈妈身体不舒服还执意自己磨面粉教我怎么做@Wa玖月▼只有她这样担心你甚至忘了她自己 18 装不下还要硬装想把整个家装进去@NaNa酱strawberry▼你喜欢吃的你爱喝的都像小时候一样给你留着呢 19 我爱吃山上的小樱桃和小草莓姥姥在它们最红的时候天天去给我摘然后一个一个洗干净放冰箱冻上等我放假回来就能吃到@吴百变-▼这是我吃过最好吃而且用钱买不到的宝贝 20 爸妈来找我过节回家之前妈妈准备了很多好吃的冻在冰箱还把菜板贴好了小标签一边切肉,一边切肉@Jessie_JM▼父母在哪里,家就在哪里你在哪里,牵挂就在哪里 21 昨天跟妈说,我今天要回去老妈说让我再待一天,今天给我做锅包肉,给我炖鸡。我就没走!今天晚饭时我说明天回去老妈又说明天给我烙饼吃!让我再待一天!老妈已经各种理由留了我4天了!其实我并不是很想吃,可是我就是舍不得,妈妈以为我是为了吃她做的饭,其实我就是还想陪陪她。@大女人嫌你美世间的爱,唯有父母之爱指向别离。就像龙应台在《目送》里说的:“我慢慢地、慢慢地了解到,所谓父女母子一场,只不过意味着,你和他的缘分就是今生今世不断地目送他的背影渐行渐远。你站在小路的这一端,看着他逐渐消失在小路转弯的地方,而且,他用背影告诉你:不必追。 ”父母的确不必追,子女却要慢点走、多回头。等你拖着重重的行李箱,走到外面的世界,也许必须去做一个坚强独立的大人,应对世界的风霜雨雪。但是打开行李箱,尝一口家乡的味道,心里就像是有了依靠:在远方的家里,永远有人牵挂着你,担心着你,爱着你。总有一顿饭,让你吃得泪流满面。这顿饭里,包含着太多我们无以为报的爱。树欲静而风不止,子欲养而亲不待,不要让父母的等待熬成遗憾,不要让自己的孝心变成后悔。当我们还有时间、还有机会的时候,常回家看看。父母在,人生尚有来处。父母去,人生只剩归途。
休闲 4 0 2363天前
admin
6452
      Win10各版本号如何区分?Win10操作系统发布差不多有两年了,到目前为止,总共有四个版本,相信很多用户都不懂如何区分这几个版本,别着急,今天小编将给大家普及Win10各个版本号的相关知识,让大家轻松辨别Win10版本号!Win10各版本号如何区分?教你轻松辨别!  Win10四大版本如下:  1、Win10 RTM版,即首个正式版:  开发代号:Threshold Release 1,简称th1,版本号1507(在我印象中这个版本号,并未在发布的时候使用过,是用户根据微软后面版本发布习惯给这个版本取的名字,1507表示2015年7月发布的版本,下同),操作系统内部版本号:build 10240。  2、Win10首个重大更新:  开发代号:Threshold Release 2,简称th2,版本号1511,操作系统内部版本号:build 10586。从这个版本起,每个版本都按发布年月确定一个版本号。  3、Win10一周年更新(Windows 10 Anniversary Update):  开发代号:Red Stone 1(红石1),简称rs1,版本号1607,操作系统内部版本号:build 14393。前两个版本好像都没有正式的发行名称,从这一版开始,每个版本正式发行的时候,都会取一个名字,这个版本发布时间刚好是Win10正式版发布一周年的时间,所以取名“一周年更新”。  4、Win10创意者更新(Creators Update):  开发代号:Red Stone 2(红石2),简称rs2,版本号1703,操作系统内部版本号:build 15063。从这个版本起,微软确认,每年的两次重大更新分别安排在三月和九月,所以基本可以确定,下一个版本号是1709,而版本名称已经在四月的//build 2017开发者大会上确定:秋季创意者更新(Fall Creators Update)。  总结:  以上的版本,都叫正式版。每个正式版,还会有许多小版本的安全累积补丁更新,当前的Win10最新正式版的完整版本号就是Windows 10.0.15063.413。  除了正式版,Win10还有一个内部版本计划(Insider Program),是用于测试Win10即将发布的各种新功能,新功能稳定了,就集成在正式版里面发布。这种版本一般会在正式版发布一段时间后开启测试,一般一星期推送一次更新。  既然是测试版,当然会有很多不稳定性,包括各种蓝屏、死机、卡顿,应用闪退等,所以微软是不推荐在主力机上安装测试版本的。而且安装这种版本是需要申请的,虽然门槛很低,只要一个邮箱验证登录,然后加入“Windows预览体验计划”就可以了。遇到问题,最好的办法,就是去反馈中心(Feedback)反馈,有好的创意或建议,也可以去那里提,只要你的想法好,支持你的人多,你的建议就有可能被微软采纳。  要是你在主力机主安装预览版本,碰到各种问题又骂微软,或者看到新版本推送,吐槽“又在推送了”,这样是会被大神BS的。折腾预览版,是很多人的乐趣。  PS:查看你的电脑当前运行的版本方法:  点开开始菜单,在英文状态下输入winver回车确认,就会打开“关于Windows”窗口,里面会显示各种版本信息。   关于Win10各个版本号的知识就介绍到这里了,相信大家对于Win10版本号有更深一步的了解了吧?再也不用向大神求教现在最新版本号是多少等问题了!
维护 3 0 2364天前
admin
6097
原文转自:https://bbs.pediy.com/thread-221236.htm  作者:mrMORE Windows操作系统作为PC上最普及的操作系统,面向的用户各种各样,因此在版本升级时,对比其它操作系统,兼容性都要做得好,不需要用户费神DIY处理一些BUG。64位windows上市后大多以前32位的程序依旧正常地运行,当然这里主要指用户态程序。那64位windows是如何支持32位程序运行的呢?之前在看《windows核心编程》一书时只知道这个机制的名字叫wow64,但是具体如何实现的一无所知。为此我上网查阅资料,结果相关文章都讲得很笼统,包括Microsoft官方文档也是从很上层架构上进行了介绍,对于搞逆向的人来说,只了解架构不看代码怎么能忍,windows就在手边,何不亲自研究窥探一把庐山面目呢?说搞就搞,从代码的角度看一下这个wow64的大概。这里插一句,其实在着手了解wow64机制前,是另外一个问题先引起了我的好奇:64位CPU比32位CPU除了每个寄存器宽度多了32bit,还多了几个通用寄存器:R8, R9, R10, R11, R12, R13, R14, R15,那32位程序在win64上运行时这些新加的寄存器就没用了吗?这个问题最后也会得到解决。首先,先从宏观分析一下,32位程序的运行需要软硬件两个大方面的支持:1)硬件上,CPU的解码模式需要是32位模式。64位CPU(我只熟悉INTEL的)是通过GDT表中CS段所对应的表项中L标志位来确定当前解码模式的。这里不展开描述GDT表与CPU运行模式的关系,感兴趣的可以参看 http://www.secbox.cn/hacker/program/9875.html2)软件上,操作系统需要提供32位的用户态运行时环境(C库,WINDOWS API)对32位程序支持,其次因为win64内核是64位模式的,所以32位运行时环境在与64位内核交互时需要有状态转换。当然另外肯定还有大量其它的兼容32位软件所需要实现的功能,比如资源管理,句柄管理,结构化错误管理等等,这些属于细节就不进行研究了,我这里先看一个大体。好了,接下来针对上面的分析进行探索。关于32位运行时环境这点,可以在c:/windows/syswow64中发现许多和c:/windows/system32下同名的动态链接库,如kernel32.dll, ntdll.dll, msvcrt.dll, ws2_32.dll等,其实这些都是32位的版本。像wow64名字所传达的含义一样,syswow64文件夹下的这些库相当于在64位windows中构建了一个32位windows子系统环境,我们32位的程序能正常在win64上运行正是靠这个子环境负责与64位环境进行了交互和兼容,所以需要重点探究下这个32位子环境是如何与win64环境交互的。我这里用到的工具是 PCHunter 与调试器 MDebug,静态分析工具 IDA。了解 windows 的读者都知道 ntdll.dll 是用户态与内核态交互的桥梁,所以我选择从 ntdll.dll 入手,选择了逻辑简单的 NtAllocateVirtualMemory 函数。首先看一下原生32位操作系统里这个函数是什么样的。我手头有个 win8 32bit 版本,利用 MDebug 直接转到 NtAllocateVirtualMemory 函数查看反汇编,可以看到,在设置好调用号 0x19B 之后直接就使用 sysenter 进行了系统调用,中间没有其它操作,下面是相应的反汇编代码:NtAllocateVirtualMemory: 7778F048 mov eax, 0x19B 7778F04D call sub_7778F055(7778F055) 7778F052 ret 0x18 sub_7778F055: 7778F055 mov edx, esp 7778F057 sysenter 7778F059 ret看完原生32位操作系统里的样子,win64 中运行一个 32 位程序时它的进程空间里的NtAllocateVirtualMemory 是一番什么情景呢?我手头有 win7 64bit 版,运行的一个32bit程序进行调试,可以看到 NtAllocateVirtualMemory 的形式如下:NtAllocateVirtualMemory: 77C8FAD0 mov eax,0x15 77C8FAD5 xor ecx,ecx 77C8FAD7 lea edx,[esp+0x4] 77C8FADB call dword ptr fs:[000000C0] 77C8FAE2 add esp,4 77C8FAE5 ret 0x18OK,区别很明显,wow64中的 ntdll.dll 与原生32位 windows 中的 ntdll.dll 有了变动,它不再是与内核交互的最后一个用户态模块,而是call 进了fs:[C0]处的函数,隐约感觉这里就是打开wow64秘密的入口。fs:[C0] 是什么呢?Windows操作系统中,fs寄存器用于记录线程环境块TEB,根据TEB结构体定义可以看出0xC0偏移处的定义为:PVOID WOW32Reserved; // 0C0其实在wow64之前还有wow32机制,用于兼容16位程序在32位windows上运行,与wow64异曲同工。所以 windows 系统在 wow64 中直接也拿这个保留位置用于进行32位64位环境切换的跳板。单步跟进,发现fs:[C0]处只有一行代码:752B2320 jmp 0033:752B271E这里是一个长跳转,目的地址是内存752B271E处,但是MDebug调试器显示752B271E处于未知模块。这时需要借助PCHunter,通过PcHunter发现该地址其实位于一个叫wow64cpu.dll的模块中,值得注意的一点是,该模块来自 system32 而非syswow64 目录,是64位的文件模块,也就是说,wow64下32位程序的进程空间内同时加载了32位与64位的可执行文件模块!在这个32位程序的进程空间里一共有4个来自SYSTEM32 目录64位的“客人”:终于,这里有了真正的64位 ntdll.dll 的出现。所以很容易可以推断,wow64.dll, wow64win.dll, wow64cpu.dll 组成了环境转换模块,而最终依然是ntdll.dll 负责与内核交互,wow64中这4个模块在默默地在后台支持着32位程序的运行。上面说到这里经历了一个长跳转,段寄存器由0x23变换为0x33,在win64中,0x23和0x33所对应的GDT表项中CPU的模式分别为32位与64位。自此,CPU解码模式由32位切换为64位。当然,故事还没结束。不过由于调试器是32位,无法准确捕获接下来发生的事情,单步跟进也没用了,我们转为使用IDA静态分析。找到 752B271E 所对应的 wow64cpu.dll 中的位置:00000000752B271E mov r8d,[esp] //取出返回地址 00000000752B2723 mov [r13+0xBC],r8d //保存返回地址 00000000752B272A mov [r13+0xC8],esp //保存32位环境堆栈指针 00000000752B2731 mov rsp,[r12+0x1480] //切换至64位环境堆栈 00000000752B2739 and qword ptr [r12+0x1480],0x0 00000000752B2742 mov r11d,edx 00000000752B2745 jmp qword ptr [r15+rcx*8]第一句读取[esp]的值其实是把返回地址取出,接着保存到了r13所指向的地方,同时还保存了esp,然后重新赋值了rsp。看了这一小段,我们基本可以猜测到,在wow64中那个幕后的64位环境里其实是有自己的堆栈和执行上下文的,在CPU由32位切换到64位后,堆栈也相应切换。好了,下面要搞最后一句跳向了哪里,也就是[r15+rcx*8]的值,我们上面考察的 NtAllocateVirtualMemory 有 xor ecx, ecx 的操作,所以到这里时rcx = 0,所以就我们考察的例子而言,最后就是跳转到了[r15]。那,r15的值是多少?这是有点棘手的问题。Wow64中32位程序只能由32位调试器调试,但是32位调试器下又无法获得64位模式下才可见的r15的值,怎么办?我这里使用shellcode的方式,利用32位MDebug调试shellcode的功能调试精心准备的一段shellcode,这段shellcode的作用独特而简单:让CPU切换到64位模式下“潇洒走一回”,将R8 ~R15的值记录到堆栈中,接着切换回32位模式。shellcode的二进制为:\x6A\x33\xE8\x00\x00\x00\x00\x83\x04\x24\x05\xCB\x48\xB8\x88\x77\x66\x55\x44\x33\x22\x11\x50\x41\x50\x41\x51\x41\x52\x41\x53\x41\x54\x41\x55\x41\x56\x41\x57\x50\xE8\x00\x00\x00\x00\xC7\x44\x24\x04\x23\x00\x00\x00\x83\x04\x24\x0D\xCB它的反汇编如下:/*开始时CPU处于32位模式*/ Push 0x33 // cs = 0x33 Call L1 L1: add [esp], 5 retf // far ret,切换CPU状态 /*此时CPU处于64位模式*/ mov rax, 1122334455667788h //将r8~r15用特殊值与周边数据隔开,方便查看 push rax push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 push rax Call L2: L2: mov [esp + 4], 0x23 // cs = 0x23 add [esp], 0xd retf虽然32位调试器无法对64位代码运行时下断,但是可以在切换回32位模式后的地方下断点。所以在这段代码后下一个断,运行代码。执行完毕后,查看一下堆栈上的收获: 地址 内容 0018FEA0 1122334455667788 0018FEA8 00000000752B2450 r15 0018FEB0 000000000008EC80 r14 0018FEB8 000000000008FD20 r13 0018FEC0 000000007EFDB000 r12 0018FEC8 0000000000000246 r11 0018FED0 0000000000000000 r10 0018FED8 0000000077C8FAFA r9 0018FEE0 000000000000002B r8 0018FEE8 1122334455667788 Bingo!我们成功获得到了32位程序运行环境下R8~R15的值,根据R15的值定位出它同样位于wow64cpu.dll文件模块内,根据R15的值 找到wow64cpu.dll中相应的位置,发现是指向了一堆函数指针:.text:0000000078B62450 dq offset TurboDispatchJumpAddressEnd .text:0000000078B62458 dq offset sub_78B62DBA .text:0000000078B62460 dq offset sub_78B62BCE .text:0000000078B62468 dq offset sub_78B62D6A //后面还有很多函数指针,此处省略其实在第一次打开wow64cpu.dll寻找752B271E位置时,就可以看到它附近有一个名为CpuSimulate的函数,里面有这样的操作:.text:0000000078B625F9 mov r12, gs:30h .text:0000000078B62602 lea r15, off_78B62450可以看到r15是指向了偏移78B62450处,对应动态加载后就是752B2450。所以这也印证了我们的实验结果。另外还可以看到的一点是r12指向了64位下的TEB(64位下gs段寄存器用于记录TEB结构)。所以很显然,[r15]是指向了TurboDispatchJumpAddressEnd处,就是上文jmp qword ptr [r15+rcx*8]所要跳转到的地方(因为ecx = 0),看一下它的代码:TurboDispatchJumpAddressEnd: .text:0000000078B62749 mov [r13+0A4h], esi .text:0000000078B62750 mov [r13+0A0h], edi .text:0000000078B62757 mov [r13+0A8h], ebx .text:0000000078B6275E mov [r13+0B8h], ebp //保存32位环境下的寄存器 .text:0000000078B62765 pushfq .text:0000000078B62766 pop rbx .text:0000000078B62767 mov [r13+0C4h], ebx //保存32位环境的eflags .text:0000000078B6276E mov ecx, eax //调用号 .text:0000000078B62770 call cs:Wow64SystemServiceEx //继续完成未尽竟的事业 .text:0000000078B62776 mov [r13+0B4h], eax .text:0000000078B6277D jmp loc_78B62611上面的代码最后跳转到78B62611,loc_78B62611的代码如下:text:0000000078B62611 loc_78B62611: .text:0000000078B62611 and dword ptr [r13+2D0h], 1 .text:0000000078B62619 jz loc_78B626CE .text:0000000078B6261F movaps xmm0, xmmword ptr [r13+170h] .text:0000000078B62627 movaps xmm1, xmmword ptr [r13+180h] .text:0000000078B6262F movaps xmm2, xmmword ptr [r13+190h] .text:0000000078B62637 movaps xmm3, xmmword ptr [r13+1A0h] .text:0000000078B6263F movaps xmm4, xmmword ptr [r13+1B0h] .text:0000000078B62647 movaps xmm5, xmmword ptr [r13+1C0h] .text:0000000078B6264F mov ecx, [r13+0B0h] .text:0000000078B62656 mov edx, [r13+0ACh] .text:0000000078B6265D and dword ptr [r13+2D0h], 0FFFFFFFEh .text:0000000078B62665 mov edi, [r13+0A0h] .text:0000000078B6266C mov esi, [r13+0A4h] .text:0000000078B62673 mov ebx, [r13+0A8h] .text:0000000078B6267A mov ebp, [r13+0B8h] .text:0000000078B62681 mov eax, [r13+0B4h] //恢复32位环境寄存器 .text:0000000078B62688 mov [r12+1480h], rsp //保存64位环境堆栈指针 .text:0000000078B62690 mov [rsp+0B8h+var_B0], 23h .text:0000000078B62697 mov [rsp+0B8h+var_98], 2Bh .text:0000000078B6269E mov r8d, [r13+0C4h] //之前保存的32位环境eflags .text:0000000078B626A5 and dword ptr [r13+0C4h], 0FFFFFEFFh .text:0000000078B626B0 mov [rsp+0B8h+var_A8], r8d .text:0000000078B626B5 mov r8d, [r13+0C8h] .text:0000000078B626BC mov [rsp+0B8h+var_A0], r8 .text:0000000078B626C1 mov r8d, [r13+0BCh] .text:0000000078B626C8 mov [rsp+0B8h+var_B8], r8 .text:0000000078B626CC iretq //排好堆栈,返回至32位模式返回地址处可以看到,在 TurboDispatchJumpAddressEnd 代码片段中,调用了一个外部函Wow64SystemServiceEx,由这个函数再继续把下面的事情做完,最终调用64位的 ntdll.dll的 NtAllocateVirtualMemory 来完成整个操作。TurboDispatchJumpAddressEnd 最后跳转至78B62611,将CPU主要寄存器值恢复至之前保存好的32位环境中的值,同时在堆栈中排布好返回地址,cs段寄存器值,eflag值,执行iretq,返回至32位环境中,在我们的例子中,即返回到 NtAllocateVirtualMemory 中 call  dword ptr fs:[C0] 的下一句,看起来像真的执行了一个普通函数一样。上面讲到跳转的函数指针表是根据r15+rcx*8来得到的,在32位进程空间的那个ntdll.dll里面 call  dword ptr fs:[C0] 前都有对ecx的赋值,我们可以推测在wow64中,系统调用被分成多类,类别号存在于rcx中,根据rcx的值来进行不同类别的模拟转换。Wow64SystemServiceEx 做的事情就暂时不详细研究了,感兴趣的可以细细钻研。对这次简单的wow64之旅做个小总结:1) windows/syswow64目录下的大量DLL库与SYSTEM32目录下的wow64.dll, wow64cpu.dll, wow64win.dll, ntdll.dll 支撑着wow64机制。2) Wow64下32位进程中实际有32位和64位两个逻辑子空间,每个子空间都 有各自的数据结构、堆栈,64位子空间负责与操作系统内核交互:32位用户态模式  <--------->  64位用户态模式  <------------------> 64位内核3)Wow64模式下,那些不可见的寄存器并不都是闲置不用的,在切换到64位环境后全部启用,和正常64位程序无差别。且经过分析可以知道有确切作用的寄存器有:R12: 指向64位环境的TEB结构体 R13:指向保存32位环境CPU的状态的位置R15: 指向跳转函数指针列表的起始上面是针对win7下做的一个wow64机制小探索,我也简单看了下在win8和win10下的wow64过程,在反汇编代码上有些小不同,但是逻辑原理是完全相同的,感兴趣的读者可以搞一把。
开发 5 0 2370天前
admin
4590
原文转载自:http://mp.weixin.qq.com/s/_-QDjvNv44Esn9O0EChh4A“不忘初心,方得始终。”只有不忘记自己最初的想法,才能有始有终地去完成自己的梦想。“初心”是什么?是孔子“居之不倦,行之以忠”的为政之道;包拯“清心为治本,直道是身谋”的为官箴言;是毛泽东“埋骨何须桑梓地,人生无处不青山”的豪情壮志;是周恩来“为中华之崛起而读书”的宏大理想。不忘初心,方得始终。只有走过弯路,才更确信当初最想要的是什么。真正重要的不是生命里的岁月,而是岁月中的生活。流光容易把人抛,红了樱桃,绿了芭蕉。曾经莫失莫忘,后来梦里花落。纳兰性德说,“人生若只如初见”。在这个时代,初心常常被我们遗忘,“我们已经走得太远,以至于忘记了为什么出发”。因为忘记了初心,我们已经不知道为什么来,要到哪里去。因为忘记了初心,我们走得十分茫然,多了许多柴米油盐的奔波,少了许多仰望星空的浪漫。因为忘记了初心,时光荏苒之后,我们会经常听到人们的忏悔:假如当初我不随意放弃,要是我愿意刻苦,要是我有恒心和毅力,一定不会是眼前的样子。席慕蓉说:我一直相信,生命的本相,不在表层,而是在极深极深的内里。这里的“内里”即为“初心”,它不常显露,很难用语言文字去清楚形容,只能偶尔透过直觉去感知其存在,但在遇到选择之时,在不断地衡量、判断与取舍之时,往往能感知其存在。林清玄说:回到最单纯的初心,在最空的地方安坐,让世界的吵闹去喧嚣它们自己吧!让湖光山色去清秀它们自己吧!让人群从远处走开或者自身边擦过吧!我们只愿心怀清欢,以清净心看世界,以欢喜心过生活,以平常心生情味,以柔软心除挂碍。白岩松说:在墨西哥,有一个离我们很远却又很近的寓言。 一群人急匆匆地赶路,突然,一个人停了下来。旁边的人很奇怪:为什么不走了? 停下的人一笑:走得太快,灵魂落在了后面,我要等等它。我们都走得太快。然而,谁又打算停下来等一等呢?如果走得太远,会不会忘了当初为什么出发?人生只有一次,生命无法重来,要记得自己的初心。经常回头望一下自己的来路,回忆起当初为什么启程。经常纯净自己的内心,给自己一双澄澈的眼睛。不忘初心,才会找对人生的方向,才会坚定我们的追求,抵达自己的初衷。一窗暖阳,一念心安,初心仍在,岁月无恙。闲看花开,静待花落,冷暖自知,干净如始。我希望,今后能以一朵花的姿态行走世间,穿越季节的轮回,在无声中不颓废,不失色,花开成景,花落成诗。回忆中,总有一些瞬间,能温暖整个远去的曾经。世界上唯一的你,就算没有人懂得欣赏,也要好好爱自己。时间很短,天涯很远。今后的一山一水,一朝一夕,安静的去走完。前尘过往终是浮云,最应该珍惜的便是当下。任岁月流逝,你我初心终不改。淡然安逸,心静如水,肆意而恬淡,这才应该是你的生活。-END-
休闲 5 0 2376天前
admin
5639
原文地址:http://k.sina.cn/article_1708729084_65d922fc001002e56.html?wm=3049_0016&from=qudao      2017年9月10日-13日,由工业和信息化部、科技部和江苏省人民政府主办的世界物联网博览会在无锡举行。博览会开幕首日的高峰论坛上,来自政府、企业的互联网、物联网专家学者围绕物联网主题,从不同角度发表富有创见的精彩演讲,分享对各自领域物联网发展的独到思考,带来一场智慧的碰撞和思想的盛宴。压轴演讲嘉宾阿里巴巴集团董事局主席马云先生的演讲更是颇具深意。        两天前,恰逢阿里巴巴集团成立18周年庆典。18年前,马云创办阿里巴巴,“今天的阿里巴巴不是今天做成的,是18年以前的决定做成的。而18年以后的你、20年以后的你,不是20年以后决定的,而是今天的思考、今天的决定。”马云以惯有的演讲风格挥洒他对物联网和成功学的思考。2009年开始,江苏就进行了物联网的探索,那时候国家,将今天的物联网叫做国家传感网。也是2009年,阿里巴巴启动了阿里云计算,那时候谁也说不出未来云计算到底是怎么一个样子,但是我们相信这是一个未来、这是一个趋势。双方都坚持了八年时间,才有了今天。       马云先生将江苏省对物联网的探索与阿里巴巴的探索进行了分析:江苏省开始探索的时候,我相信大家只是觉得这是一个概念,阿里巴巴在探索云计算的时候,也认为是一个概念,今天的概念越来越多,包括云计算、大数据、智能物流、IOT在内各种各样的说法,其实说明一个问题,人类正在往一个共同的方向去走。就像上一个世纪,有的人讲汽车很重要、有的人说造路很重要、有的人说石油很重要,其实大家都在做一个方向,这就是一个能源时代的到来,而今天的人类将真正开始进入到数据时代。在马云的思想宇宙里,数据化技术足以和社会化生产比肩:人类未来的大数据发展,离不开三个主要的要素,就是互联网、大计算以及云数据。数据将成为最重要的生产资料,大数据涵盖着两个关键,“大”不是“多”的意思,“大”是大计算的意思,大计算加云数据,这才是我们所认为的大数据。首先数据将成为最重要的生产资料,如果说第一次技术革命,煤是主要的生产资料、煤是主要的动能,第二次技术革命,是石油、电,这次技术革命,以创新驱动,数据将成为最重要的生产资料第三次技术革命将以创新驱动,数据将成为最重要的生产资料。 互联网本身是一种生产关系,互联网不是互联网公司的互联网,互联网是全社会的互联网。云计算将成为一种强大的生产力。      的确,当技术的发展不断向外部发展的时候,数据化趋势正在走向我们的内心:过去的两百年,由于科技的发展,我们对外部的世界越了解越多,我们走向外太空,探索月亮、探索火星,不断在向外探索,但是人类对自我的了解越来越少,未来的一两百年,我们在发掘人类的内心世界,这在生命科学方面将会有重大的突破。人活到120岁、150岁,并不是笑谈和奢想,因为人将了解自己越来越多。        我们对于未来的未知远远大于已知,就像阿里巴巴不是今天做成的,是18年以前我们相信有这一天才会做成的。我们今天同样相信未来的世界会是这个样子,并且为之去努力。       马云相信,今天能够定义清楚的东西都不是未来,今天我们怎么想象未来,在他认为都是幼稚的,尽管18年以前,我们知道互联网会发展,知道电子商务会发展,但是我们没有想象到电子商务、互联网18年以后会发展成这个样子。人类一百年以前发现电的时候,认为电就是用于电灯泡的,并没有想到今天还有电饭煲、空调机,今天我们对于数据的理解,所谓的数据垄断,跟二十年以后的数据相比,跟万物相连以后的数据相比,比不上沧海一粟。所以我们今天要思考的是如何面对未来,我们要铺设一个方向,如何坚持,并且不断的去完善。今天的思想碰撞极具意义,甚至是里程碑式的。       时代的变迁在18年前被他和他的团队亲手开拓,18年后的未来,也正在这位传奇人物的预言中慢慢走来:身处IT时代,人类已经从IT走向DT,IT是Information Technology,DT是Data technology,这不是字的区别,也不是技术的区别,而是思想观念的区别,IT是让自己做得越来越强,而DT必须学会共享,必须学会普惠,必须让别人强大起来,你才会强大起来。而整个世界的趋势就走向了普惠、共享和可持续。  
资讯 15 0 2388天前
admin
5346
原文地址:https://jingyan.baidu.com/article/73c3ce28c97bb6e50243d96e.html文章所需使用软件:Mkvmerge GUI    FLVExtract 第一步:提取FLV文件视频流、音频流 打开FLVExtract,出现下面的窗口: 然后将需要处理的FLV文件拖入FLVExtract窗口内,视文件大小等待一会儿,出现下如下窗口: 单击OK,关闭软件,然后你会发现FLV视频文件目录下生成了视频流文件(一般为.264文件、AVI文件等),音频流文件(一般为AAC文件、MP3文件等),以及脚本流文件(TXT文件)这三个文件: 到此,提取FLV文件视频流、音频流这一步完成。 第二步:合并视频流、音频流文件,封装成MKV格式 打开MKVMerge GUI,将刚刚生成的视频流以及音频流文件添加进去(脚本流文件并非必要,一般可以删除): 根据第一步中得到的一些信息设置格式细节选项: 开始混流(时间一般来说在2分钟以内): 混流完成,耗时仅2秒,单击确定: 关闭软件,发现FLV文件目录下已经生成了同名的MKV格式文件(画质及清晰度没有改变,但却缩小了源FLV文件的大小哦): 注意事项 对于F4V格式视频文件,HLV格式视频文件等非FLV格式视频文件的处理,大家可以直接重命名、修改扩展名为FLV(不必担心损坏视频文件)。  
维护 5 0 2398天前
桂公网安备 45010302000666号 桂ICP备14001770-3号
感谢景安网络提供数据空间
本站CDN由七牛云提供支持
网站已接入ipv6
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
如果某些内容侵犯了您的权益,请通过右侧按钮与我们联系
Your IP: 35.173.125.112 , 2024-03-29 14:55:13 , Processed in 4.89272 second(s).
Powered by HadSky 7.12.10
知道创宇云安全