比特派官方网站|cpy
如何评价CPY停止D加密破解活动? - 知乎
如何评价CPY停止D加密破解活动? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册单机游戏盗版0daySteamdenuvo如何评价CPY停止D加密破解活动?昨天《尼尔机械纪元》与《狙击手3》来自俄罗斯小组BALDMAN放出了D加密64位的破解补丁,但玩家们试验过后发现破解并不完美,尼尔运行时有较大的问题,…显示全部 关注者89被浏览128,170关注问题写回答邀请回答好问题 22 条评论分享9 个回答默认排序知乎用户说一些关于0day组的流言(太神秘没法证实=。=,如果有圈内人士欢迎补充):0day组发布资源根本不是直接发布到bt/pt渠道的,而是发布到私密ftp,然后有ftp帐号的人下载了之后传播到pt站,然后流出到公网。其中0day ftp的帐号是非常非常难弄的,审核极其严格,因为以前0day组成员有过被抓的经历 由于盗版组织的“提供组”成员渗入EA公司内部,致使母盘外流,结果盗版FIFA2000比正版提前出了1个月。EA公司愤怒之中在俄国、英国和德国分别将DD、MYTH和CLASS告上法庭。俄国DD组织成员被抓,判刑,后来司法部门收受贿赂,将该组织成员释放。英国法院则认为MYTH只在网上传播硬盘版,自己并没有网站和广告,没有万维网(WWW)的链接,没有赢利,所以判定MYTH组织无罪。德国的CLASS则只是罚款了事,没有追究任何刑事责任。但是现在的盗版组织都不敢碰EA这样的大公司,他们总是等EA的正版游戏出品了再做破解版。因为这种公司的势力实在太大了。其他的时候盗版总是比正版出得快,《暗黑破坏神Ⅱ》(DIABLOⅡ)的盗版(光盘破解版)比美国本土正式版提早两天上市而且破解得相当完美!其原因正如上所述,正版从业者中有些本身就是“WAREZ”成员。 能直接接触到0day的圈子是非常非常小的,想抓到0day组也是很难的,CPY根本不担心被抓。再说0day组是完全的技术分享社区,根本不盈利,谣言里说的CPY把技术卖给BaldMan就说明造谣的人根本就不了解0day这个圈子。而且0day的传播是FTP-PT-BT,公开的BT站已经是第三手数据了(国内3dm已经是第四手了),欧洲那个bt站被关和cpy半毛钱关系都没有。发布于 2017-05-09 14:16赞同 369 条评论分享收藏喜欢收起苏哥混乱中立,喜欢看戏 关注应该是假消息人家又没有庙,跑得比谁都快,谁来追查,怎么追查发布于 2017-05-08 15:25赞同 2添加评论分享收藏喜欢
知名游戏破解团队CODEX宣布解散,临走时顺手破解了老头环_腾讯新闻
知名游戏破解团队CODEX宣布解散,临走时顺手破解了老头环_腾讯新闻
知名游戏破解团队CODEX宣布解散,临走时顺手破解了老头环
即使你没有玩过破解版游戏,那么你应该也听说过CODEX这个小组的名头
即使你没有玩过破解版游戏,那么你应该也听说过CODEX这个小组的名头,2016年,当国内的3DM宣布他们无法处理最新的游戏D加密的时候,正是CODEX与CPY相互合作,第一个破解了被D加密的游戏《古墓丽影:崛起》,打破了D加密不可战胜的神话。
此后,D加密被破解的速度越来越快,《生化危机7》发售的时候,不到一周就遭到了破解,《铁拳7》四天就被破解,到了《全面战争:战锤2》的时候,破解小组仅用数小时就完成了破解工作。
这些事情基本宣告了D加密的失败,而在失去了保护的功能后,这个还会影响游戏运行效率的D加密彻底遭到了玩家的唾弃,无论是正版还是盗版玩家。而这一切,都源于2016年的CODEX最初对D加密的破解。
而在CODEX最新发布的《模拟人生4:婚旅奇缘》DLC破解版中(该DLC是2月23号发布的),他们宣布了一个重要的决定,婚旅奇缘将是他们最后一个游戏破解,此后CODEX小组就将彻底解散。
对于解散破解组的原因,CODEX给出了较为详细的解释。一开始,CODEX只是由一群喜欢挑战的网友组建而成,最初的目的也只是为了与当时占据主导地位的PC游戏破解组RELOADED竞争。这个过程非常的有趣,遗憾的是,很快RLD开发崩溃,并慢慢分崩离析,破解就变得没那么有趣了。
经过多年的风风雨雨,CODEX已经成长为行业里的主导者。平台,D加密,这些都无法再给他们带来什么挑战,CODEX在游戏破解行业已经发展到头了,他们已经完成了最初的目标,是时候继续前进了。因此,感谢旅途中陪伴和支持CODEX的所有人,但是,是时候离开了。
CODEX是游戏破解的传奇,从2014成立到如今,八年期间,他们大约破解了7500个不同的游戏,让许多玩家接触到了更多单机游戏作品,虽然游戏破解是不尊重知识产权的违法行为,但是他们的离去也让众多玩家感到惋惜。
恰逢《艾尔登法环》发售,有玩家就向CODEX提议,为什么不将《艾尔登法环》当作他们的最后一个破解更新呢?于是,CODEX的子组PLAZA决定回应网友们的期待,在解散之前,顺手把老头环也给破解了,当作给CODEX的礼物。
云游姬以前也玩过盗版,现在虽然是一名坚定的正版玩家,不喜欢到处宣传盗版的行为,但是也不会像网上某些人那样全面否定盗版的价值。
也许会显得有些强词夺理,但是Codex这样的盗版游戏组织的出现,也是如今中国能拥有这么多正版游戏玩家的原因之一。
由于国情不同,在Steam进入中国市场前,许多游戏缺乏价格合适的正版购买渠道,一些玩家只能玩盗版。
如果学生时期的中国玩家没能接触到那些优秀的免费的单机游戏,而是被中国网游手游所吸引,没有见识过单机游戏的魅力,国外单机游戏在中国也没有很高的知名度,国外厂商也懒得发展中国市场,国内玩家长大工作以后顺理成章的继续往那些画质与玩法都远逊于3A的骗氪网游手游里氪金,这种场面,想一想都感到“触目惊心”。
开发了《刺客信条》的育碧,其CEO Yves Guillemot就曾谈到过刺客信条在中国被盗版的问题,他所表现出来的态度非常淡然。在他看来,过去十数年的刺客信条盗版,为育碧的品牌创造了知名度,当他们通过Steam面向中国市场发售那些作品时,有很多玩家会为自己多年前玩过的游戏最新版本付费,重要的是,当玩家有付费能力的时候,为了省去下载盗版会遇到的麻烦,也会自然而然地购买正版。
有趣的是,开发了《天国拯救》的战马工作室,还将CODEX破解他们游戏的NFO玩家裱了起来,挂在了办公室里。
而且,就算是现在,盗版游戏的存在也有一定的合理性。玩过黑魂3的都知道,除了PVE和PVP外,大量优秀的mod也是游戏的乐趣之一,然而,打mod可能会导致游戏账号被ban,就算离线游玩,上线的时候没卸载干净可能也会被封,因此许多魂3玩家都是正版打联机,下盗版打mod玩。
不过,盗版的存在确实损害了游戏厂商的利益,进而影响玩家,中国早年间许多优秀的游戏作品,比如《仙剑奇侠传四》,就因为盗版泛滥销量惨淡,国产单机沉寂那么多年,除了网络游戏的兴盛外,与盗版泛滥脱不开关系。
好在近些年中国正版玩家越来越多,盗版玩家的底线也有所提高,因此国内许多发布盗版游戏的网站,最起码都不会破解国产游戏了。
因此,对于CODEX的解散,云游姬的心里非常的复杂,一些媒体报道此事,都评价其“臭名昭著”,但是从玩家的角度、特别是中国玩家,我们还是不能否认盗版游戏曾经的价值与合理性。
当然,以上这些也只是称赞其对中国单机游戏市场发展的“历史贡献”,并不是无脑支持游戏盗版。云游姬认可盗版的原因,是因为许多中国单机游戏玩家都是盗版玩家出身,“浪子回头”是褒义,并不代表“浪子”这个词本身是褒义词,如果因为某些原因暂时无力购买正版游戏的话,希望你也不要到处宣传,这并不是值得骄傲的事情,如果以后有能力的话,还请上车补票,也算是自己喜爱的游戏的支持。
盗版游戏从哪来?都被这几个游戏破解组承包了 - 知乎
盗版游戏从哪来?都被这几个游戏破解组承包了 - 知乎切换模式写文章登录/注册盗版游戏从哪来?都被这几个游戏破解组承包了07073单机游戏在国内盗版游戏横行的年代,中国玩家基本被全世界的游戏厂商抛弃,想要官方中文版?不可能的。随着这几年国内玩家正版意识的提高,游戏厂商对中国玩家的印象开始改变,连顽固的任天堂都将对《口袋妖怪:日月》进行官方汉化。这就像李海鹏说的“这本就是用一根针挖井的工作。”,好在这针终于变成变成一把铁锨,一台打井机。相比正版用户的增多,更重要的是价值观的转变:游戏付费天经地义,玩盗版游戏不再理所应当。早年间,因为国内盗版用户庞大,很多人会有种国内的游戏破解水平很高的错觉,其实,破解游戏这种事,大部分都是欧洲人干的。世界上绝大部分的盗版游戏,都被下面这几家外国破解组承包了。RELOADEDRELOADED成立于2004年,前身是传奇破解组DEVIANCE,曾经在2次重大的政府扫荡中生存下来,由于竞争对手HOODLUM和VENGEANCE被端掉,RELOADED从此称霸PC游戏破解圈,在新游的首发破解上,RELOADED能占据80%。RELOADED也是国内最常见的PC游戏破解组,你在各个资源站看到标题写着某某游戏“R组”破解,就是他们的“杰作”。高光时刻:1、各大破解组都在追求游戏发售前破解游戏,而RELOADED最著名的应该就是2008年对《刺客信条》的破解了,R组在游戏发售1个月之前就放出破解版。2、修复了《彩虹六号:维加斯2》数字版的BUG,育碧当年对《彩虹六号:维加斯2》数字版无法运行的BUG毫无办法,最终只能给玩家发放RELOADED的游戏破解补丁...这次事件让育碧颜面扫地,却成就了RELOADED。3、打破《分裂细胞:混沌理论》424天不被破解的记录。SkidrowSkidrow 是来自美国的游戏破解组,成立时间大概是上个世纪90年代,主要作品有《猎杀潜艇5》、《刺客信条2》等,之后由于人员解散,直到2007年 Skidrow才重新开始活跃。Skidrow在同行中的口碑一般,被RELOADED等破解组爆出过盗用其他破解组代码的料。高光时刻:1、 Skidrow成名于DRM事件,DRM是育碧的反破解系统,Skidrow破解组成功破解了育碧两袋DRM系统,最著名的作品是对《刺客信条2》的破解。2、2017年,Skidrow继CPY之后,成功破解了最新的Denuvo64加密技术。Razor1911 Razor1911 是来自挪威的破解组,成立于1985年,最初由3个年轻的计算机爱好者组成,主要是破解Commodore64和amiga机种的游戏软件,名称中的1911是因为1991在16进制里写作777,代表不朽。作为老牌破解组之一, Razor1911在2001年和2004年的FBI两次反盗版行动中幸存下来,不知道是不是因为名字带来的好运。在业内,如果说RELOADED是以高产著称,那么Razor1911就是以技术见长。Razor1911破解组最著名的作品应该是《星际争霸:母巢之战》的硬盘版,间接导致了星际争霸在全世界的流行。高光时刻:1、制作《星际争霸:母巢之战》硬盘版,在这一版的星际争霸中,所有文件的体积加起来只有100m多一点,而最为经典的地方就在于他们把光盘版中两个600m左右的install.exe文件压缩到了只有22m的大小。2、破解《GTA4》和该游戏价值20万美元的SecuRom反破解系统。3、破解EA origin平台的加密技术。4、破解《孤岛危机》和《上古卷轴5:天际》。CPYCPY全名conspiracy,是来自于意大利的破解组,成立于1999年,相比上面的三大破解组成立较晚。但是最近几年,CPY在破解了Denuvo加密技术(D加密)后名声大噪,俨然已超越了上面三大破解组。在国内有CPY掌握核心技术的说法,Steam、EA origin、Denuvo等加密技术先后被CPY破解。高光时刻:1、2015年,继Steam平台后,EA origin平台加密技术被破解,宣布了这套加密系统彻底完蛋。2、破解D加密技术,随后一系列热门游戏遭到破解,包括:《合金装备5 幻痛》《古墓丽影 崛起》《毁灭战士4》《看门狗2》等等。微信公众号:pc07073发布于 2017-08-09 10:49盗版破解游戏赞同 984 条评论分享喜欢收藏申请
如何看待CPY宣布破解denuvo? - 知乎
如何看待CPY宣布破解denuvo? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册游戏破解Steamdenuvo如何看待CPY宣布破解denuvo?就在刚刚,reddit上传出消息,一个叫CPY的破解组成功破解了denuvo,免除了steam运行了ROTR。这跟VOKSI绕过denuvo的方法失效…显示全部 关注者141被浏览139,689关注问题写回答邀请回答好问题添加评论分享15 个回答默认排序知乎用户CPY破解denuvo是用了最原始的方法:把游戏里面所有的加密检测点、激活授权检测点以及反调试检测点一个个找出来,然后全部在内存里patch掉。但是这是个体力活,每个D加密的游戏加密的地方都不一样,Steam/EA/Uplay这3个平台的加密方式也有较大的差别,所以他们破解一个游戏要花很多时间。但破解是真破解,不是之前的那种利用漏洞绕过D加密的方式。顺便吐槽下楼上几位的渣翻编辑于 2016-10-11 07:58赞同 115 条评论分享收藏喜欢收起匿名用户自从入了steam坑以后就没动过玩盗版的心思...倒不是优越感,而是因为steam上玩游戏太方便了,一键安装下载最新版本不发愁,没有奇怪的bug也不会报毒心烦。但是看到这个新闻其实我还是很高兴,如果这能给厂商一个“不要盲目依赖D加密”的信号也挺好的,所以说,好好做游戏才是正道,优秀的游戏绝不会受到亏待,别老是像防贼一样防你的玩家,何况防贼的成本都被好好支持正版游戏的玩家承担了,本末倒置。我一直觉得,在产业链完整的游戏行业,让正版服务更优秀才是遏制盗版的正确打开方式,像steam这样的就属于正确的打开方式。会被付费挡住的人压根就不可能成为潜在的市场对象,甚至大部分都不是真心喜欢玩这些游戏....而是因为其他人都玩所以我也要玩,反正不要钱.....这点上,就算我并不是特别喜欢巫师系列也要给波兰蠢驴们点一个大大的赞。编辑于 2016-08-11 13:10赞同 133 条评论分享收藏喜欢
如何评价CPY停止D加密破解活动? - 知乎
如何评价CPY停止D加密破解活动? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册单机游戏盗版0daySteamdenuvo如何评价CPY停止D加密破解活动?昨天《尼尔机械纪元》与《狙击手3》来自俄罗斯小组BALDMAN放出了D加密64位的破解补丁,但玩家们试验过后发现破解并不完美,尼尔运行时有较大的问题,…显示全部 关注者89被浏览128,170关注问题写回答邀请回答好问题 22 条评论分享9 个回答按时间排序wsz987 关注别的不说 d加密我们玩家简直正版受害者之前玩鬼泣5 玩到一半更新去除d加密没记错200多m的启动文件直接缩减到几m启动速度大大加快,帧数也明显提升发布于 2021-07-26 20:42赞同 3添加评论分享收藏喜欢收起三姨君 关注对于游戏厂商、特别是以单机游戏为核心业务的厂商而言,有什么事是他们最不愿意看到的?显然答案只有一个,就是游戏的销量不佳。在整个游戏行业漫长的历史中,游戏销量无疑是厂商的核心收入来源,而盗版作为最能够影响销量的一大因素,在相当长的时间里一直都是游戏厂商的大敌。从电子游戏开始流行,盗版与反盗版、加密和破解之间的斗争,几乎就从来就没有停歇过。从光盘加密、全程联网,到算法加密,再到集大成的D加密(Denuvo Anti-Tamper),曾经猖獗一时的盗版也已不复当年。然而“狡兔死、走狗烹;飞鸟尽、良弓藏",曾经扮演过游戏厂商“救世主”的D加密,如今却开始陆续被打入另册。关注游戏行业新闻的朋友近来或许会发现,从PC版的《尼尔:机械纪元》、《质量效应:传奇版》、《勇者斗恶龙11S》,到《无主之地3》、《蝙蝠侠:阿卡姆骑士》,都先后专门上线补丁移除D加密,甚至于世嘉即将发布的新作《人类》更是不再使用D加密。为什么能让游戏免受盗版侵扰的D加密,最终被越来越多厂商束之高阁,看起来确实是一件非常奇怪的事情。如今,许多游戏厂商对于D加密的用法,都是在游戏发售前高调宣称将采用这一技术,但在度过了最初的销售期后就上线补丁移除,几乎是将其作为了一次性的道具在使用。在届时这一“奇怪”的现象之前,首先需要知道什么是D加密。据悉,这是一项反篡改(Anti-Tamper)技术,早在2014年就被奥地利公司Denuvo提出,对可执行文件进行调试(Debugging)、反编译(Reverse Engineering)和修改(Modifying)的工具,能够用于保护DRM(数字版权管理系统)不被绕过。而在D加密出现前,针对游戏破解往往采用的是直接修改游戏的exe或dll文件,绕过其对DRM的验证,然后再模拟正版环境,让厂商的系统认为游戏是正版的。D加密出现的契机,则是DRM这一基于信息授权中心的正版授权验证系统,已经在不适合互联网时代了。事实上,DRM加密是一种横跨游戏、视频流媒体、音乐流媒体等一切数字内容的安全加密算法,可以将其理解为是一个综合性的反盗版同盟,但这就意味着只要其中一个平台被破解,其他平台的防御就旋即宣告失效。但D加密的出现是为了保护DRM,而不是保护游戏内容。虽然D加密的具体原理目前依处于高度保密的状态,但经过近年来包括意大利破解小组CPY、美国破解小组Skidrow,以及俄罗斯黑客与这一技术的斗智斗勇,我们也得以能够一窥D加密的皮毛。D加密是由基于源码混淆加密软件/虚拟机保护软件VMProtect的授权认证模块和篡改检测模块组成,能够保护游戏中有关DRM模块的二进制文件不被修改,从而避免游戏本身被逆向。在玩家首次启动带有D加密功能的游戏时,其就会将玩家的硬件和系统信息发送至Denuvo公司的服务器,以取得唯一密钥存储在本地,并且集成于可执行文件的D加密还会根据不同的游戏,在游戏进程中设置不同的触发机制来进行实时校验。总的来说,D加密是一个用反编译软件来保护自己的代码,而其自身的代码又根植于游戏程序的任意角落来保护DRM,由此形成了一个三重防护体系。因此在2016年夏天之前,D加密保护了相当多的游戏免于被盗版侵扰,也顺势让steam租号产业得以蓬勃发展。但最终在2016年8月9日,意大利CPY小组发布了《古墓丽影:崛起》的完美破解补丁,并在接下来连续攻破了EA与育碧旗下的多款大作,到了2017年年初的《生化危机7》,更是在发布后仅5天就告破。时至今日,D加密俨然已经成为了纸糊的“马奇诺防线”。另一方面,将加密代码混合到游戏代码工作机制,会造成CPU的多线程性能出现巨大的开销,甚至导致使用了D加密的游戏在性能方面受到极大的影响。在移除了D加密后,特别是使用寒霜3和虚幻4引擎的游戏在帧数上的提升相当明显,例如在《生化危机:村庄》上,破解后的游戏反而会更加流畅。玩家不喜欢D加密,则是因为这一技术使得其几乎成为了“正版游戏受害者”,而厂商对于D加密态度的变化,则在于这一加密技术已经不再滴水不漏,并且还不便宜。根据去年破解小组从育碧方面获得的信息显示,D加密在第一年的使用费为14万欧元,一年后的月费是2000欧元,如果游戏在30天内独立激活次数超过50万,则还需要额外支付6万欧元,这样的价格对于中小型游戏开发商或独立开发者来说,显然有些不堪重负了。当然,D加密在游戏厂商处失宠还有一个时代背景变化的原因。众所周知,游戏的销售与电影类似,都是发售后的一到两周是高峰期,往往能够占据整体销售的一大半,所以首销成绩通常决定了一款游戏是大获成功还是暴死。而曾经游戏厂商钟爱D加密,则是因为这一技术能够在与破解小组的赛跑中取得先机。但可惜的是时代变了,在移动互联网已经高度成熟的当下,特别是在手游的冲击下,单机游戏也开始发生改变,从最传统靠卖拷贝挣钱到如今充斥着微交易元素的服务型游戏,或者说游戏即服务(GaaS)已经逐渐成为主流。现在相当多的传统游戏厂商开始模仿国内网游厂商的策略,试图从一锤子的买卖变为细水长流地从玩家身上挣钱,甚至相当多的游戏改为了免费发售。既然游戏首发销量的重要性在不断下降,甚至由于防御能力下降导致确保初期销量的作用都难以实现的情况下,以牺牲一定性能为代价来让游戏免遭破解的D加密也就显得愈发鸡肋起来。或许《人类》开发商这种顺应了玩家呼声取消D加密的情况,在未来会越来越频繁。发布于 2021-07-26 20:21赞同 42 条评论分享收藏喜欢收起1 个回答被折叠(为什
cpy: Cpy 是一种跨平台的通用脚本语言,具有类似 C 的语法
cpy: Cpy 是一种跨平台的通用脚本语言,具有类似 C 的语法
登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
Gitee AI
NEW
我知道了
查看详情
登录
注册
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
3
Star
0
Fork
0
Gitee 极速下载 / cpy
代码
Wiki
统计
流水线
服务
Gitee Pages
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
我知道了,不再自动展开
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号?
立即登录
返回
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。
原始仓库:
https://github.com/ideawu/cpy
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
管理
管理
分支 (1)
master
克隆/下载
克隆/下载
HTTPS
SSH
SVN
SVN+SSH
下载ZIP
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
git config --global user.name userName
git config --global user.email userEmail
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1
生成 RSA 密钥
2
获取 RSA 公钥内容,并配置到 SSH公钥 中
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com':
#
私人令牌
新建文件
新建子模块
上传文件
分支 1
标签 0
贡献代码
同步代码
创建 Pull Request
了解更多
对比差异
通过 Pull Request 同步
同步更新到分支
通过 Pull Request 同步
将会在向当前分支创建一个 Pull Request,合入后将完成同步
ideawu
up to date
f014d1a
13 次提交
提交
取消
提示:
由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
antlr3
保存
取消
samples
保存
取消
.gitignore
保存
取消
Eval.g
保存
取消
Eval.py
保存
取消
Eval.tokens
保存
取消
Expr.g
保存
取消
Expr.tokens
保存
取消
ExprLexer.py
保存
取消
ExprParser.py
保存
取消
Makefile
保存
取消
README.md
保存
取消
Readme.txt
保存
取消
cpy
保存
取消
cpy.bat
保存
取消
cpy.py
保存
取消
engine.py
保存
取消
test.cpy
保存
取消
Loading...
README
Cpy - A C-like scripting language
Cpy is the real general purposed dynamic c-like syntax scripting language. Cpy provides you a way to write Python codes in C syntax!
Hello World!
// file: hello.cpy
printf("Hello World!\n");
$ cpy hello
Hello World!
$
Reading from stdin
// file: stdin.cpy
print "input 'q' to quit:";
while(true){
printf("> ");
line = stdin.readline();
line = line.strip().lower();
if(line == 'q'){
print "bye.";
break;
}else{
print 'your input:', repr(line);
}
}
classes and functions
class A{
public a = 0;
public static s = 1;
function init(a){
this.a = a;
print 'A init', a;
}
function f(a, b=1){
return a + b;
}
}
print A.s; // 1
a = new A(1); // A init 1
print a.f(1, 2); // 3
Reusing Python codes
import time; // Python's built-in time module
time.sleep(1);
C-like vs Pythonic
Whitespace indentation to delimit block is bad
Python’s syntax is said to be clear and elegant. It is good for small piece of codes, but not good for more than 100 lines of codes. I usually mis-understand the number of indents when first glance at a more than 10 lines block of codes after an if.
And TAB vs SPACE is particularly annoying!
The curly braces are quit clear and elegant, most people feel comfortable at curly braces.
i++
i++ is very usefull.
"this" is that!
Python requires you to put an unnecessary “self” as the first argument of a function definition in a class, but to omit it when invoking that function. What’s the meaning of that? It’s total garbage.
Confusing expression of calling function in parent class
Couldn’t it be as simple as “parent.f()”? Why multi-inheritance?
Useless lambda expression
The lambda body can only be a single expression – useless! Ah-ha, now you are regret for discriminating curly braces, aren’t you? Look at the really ELEGANT syntax of JavaScript’s anonymous function.
Unwelcomed None/True/False
Just let those be: null, true, false. “i is None” is no more elegant than “i == null”.
Implicit static variable(Non-primative default argument)
Non-primative default arguments in function definitions are implicitly static, that cause many hidden bugs by mistake.
Cpy – The comfortable way to write Python codes in C syntax
Cpy is a C-like scripting language. Cpy codes are converted into python code first, then run by Python at the same time.
Relax and enjoy!
空文件
Starred
0
Star
0
Fork
0
捐赠
0 人次
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
举报类型
请选择举报类型
举报原因
取消
发送
误判申诉
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
取消
提交
简介
Cpy 是一种跨平台的通用脚本语言,具有类似 C 的语法
展开
收起
暂无标签
https://www.oschina.net/p/cpy
Python
等 3 种语言
Python
98.0%
GAP
1.9%
Other
0.1%
保存更改
取消
发行版
暂无发行版
贡献者
全部
近期动态
加载更多
不能加载更多了
编辑仓库简介
简介内容
Cpy 是一种跨平台的通用脚本语言,具有类似 C 的语法
主页
取消
保存更改
Python
1
https://gitee.com/mirrors/cpy.git
git@gitee.com:mirrors/cpy.git
mirrors
cpy
cpy
master
深圳市奥思网络科技有限公司版权所有
Git 大全
Git 命令学习
CopyCat 代码克隆检测
APP与插件下载
Gitee Reward
Gitee 封面人物
GVP 项目
Gitee 博客
Gitee 公益计划
Gitee 持续集成
OpenAPI
帮助文档
在线自助服务
更新日志
关于我们
加入我们
使用条款
意见建议
合作伙伴
售前咨询客服
技术交流QQ群
微信服务号
client#oschina.cn
企业版在线使用:400-606-0201
专业版私有部署:
13670252304
13352947997
开放原子开源基金会
合作代码托管平台
违法和不良信息举报中心
粤ICP备12009483号
简 体
/
繁 體
/
English
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册
c语言str_cpy和strn_cpy实现_str手写cpy-CSDN博客
>c语言str_cpy和strn_cpy实现_str手写cpy-CSDN博客
c语言str_cpy和strn_cpy实现
最新推荐文章于 2023-03-07 09:56:54 发布
scgillian
最新推荐文章于 2023-03-07 09:56:54 发布
阅读量2.2k
收藏
点赞数
分类专栏:
c
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanglei0107/article/details/12775911
版权
c
专栏收录该内容
12 篇文章
0 订阅
订阅专栏
#include
#include
char* my_strcpy(char *dest,const char* source){
assert(dest!=NULL||source!=NULL);
//store the address start of the dest string
char* res=dest;
while((*dest++=*source++)!='\0');
return res;
}
int main(){
char src[10]="qwertyuio";
char dest[13];
printf("%s",my_strcpy(dest,src));
return 0;
}
char * strncpy ( char * destination, const char * source, size_t num );
Copy characters from string
Copies the first
num characters of
source to
destination. If the end of the
source C string (which is signaled by a null-character) is found before
num characters have been copied,
destination is padded with zeros until a total of
num characters have been written to it.
No null-character is implicitly appended at the end of
destination if
source is longer than
num. Thus, in this case,
destination shall not be considered a null terminated C string (reading it as such would overflow).英文描述引用自
http://www.cplusplus.com/reference/cstring/strncpy/
从source字符串中拷贝num个字符到目标字符窜。如果在拷贝完num个字符之前源字符串的末尾(即'\0'空字符)就遇到了(src字符串长度比num小),那么目标字符串将用0填充直到填满num个字符
如果源字符串比num长,那么非空字符'\0'不会附加到目标字符串。这种情形下,目标字符串不应该被认为是以空字符结束的字符串
#include
char *my_strncpy(char * dest,const char * source,size_t num){
char *res=dest;
while(num--&&(*dest++=*source++)!='\0');
while(num--)
*dest++='\0';
return res;
}
int main(){
char src[10]="qwertyuio";
char dest[13];
printf("%s",my_strncpy(dest,src,12));
return 0;
}
优惠劵
scgillian
关注
关注
0
点赞
踩
0
收藏
觉得还不错?
一键收藏
知道了
1
评论
c语言str_cpy和strn_cpy实现
char * strncpy ( char * destination, const char * source, size_t num );Copy characters from stringCopies the first num characters of source to destination. If the end of the source C string (w
复制链接
扫一扫
专栏目录
c语言 字符指针的理解,如何理解C语言指针
weixin_42350606的博客
05-17
243
如何理解C语言指针cprstr (char *pss,char *pds){while (*pdss++=*pss++);}表达式的意义可解释为,源字符向目标字符赋值, 移动指针,若所赋值为非0则循环,否则结束循环。这样使程序更加简洁。简化后的程序如下所示。cpystr(char *pss,char *pds){while(*pds++=*pss++);}main(){char *pa="CHIN...
一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
Hacynn的博客
09-26
1309
不能字符串自己追加自己,因为当自己追加自己的时候,追加的过程中会将目标字符串的 '\0' 覆盖掉,而有因为此时目标字符串就是源字符串,就会导致源字符没有 '\0' ,将会一直拼接下去导致死循环。2、因为strlen返回的是 '\0' 前面的字符个数,如果字符串中间本身就一个'\0',那么返回的值就会返回字符串中的'\0'之前的字符个数。在实际开发中,我们不一定知道这个字符串是怎样的,这个字符串需要切割几次的,因此手动设置切割几次将代码写死的方式是不可取,而应该使用。如果真有自己追加自己的场景,建议使用。
1 条评论
您还未登录,请先
登录
后发表或查看评论
str(n)cpy的注意事项以及memset的简单使用
qq_52572621的博客
12-06
654
目录strcpystrncpymemset我们先看strcpy函数:
注意使用strcpy需要在第一行加上#define _CRT_SECURE_NO_WARNINGS一定要是第一行,其他地方不行;然后输出一下字符串: 没有问题,我们单个输出name数组的每个成员的ascii码值试一下:运行: 我们可以看到,因为我们并没有初始化,所以strcpy函数是帮我们把hello后的第六个元素置为0了,因为有\0才是字符串嘛; 如果我们的name只有五个元素,但是我们依旧赋值给他hello,那么还会不会补充\0
自学C语言 - strcpy和strcat
Night_dreams的博客
03-07
629
strcpy函数和strcat函数介绍
关于链式表达式
X-Weidong’s Blog
09-19
1121
已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数
strcpy char *strcpy(char *strDest, const char *strSrc);
{
assert((strDe
stdc_cpy
02-09
传感器驱动程序和示例均使用C编程语言编写。 该存储库包含两种类型的文件夹,可以使用以下命名约定来识别: 包含传感器驱动程序的文件夹,名为xxxxxxx_STdC ,其中xxxxxxx标识传感器部件号, 包含演示项目_prj_...
RC522_BSP_V2_CPY.rar
04-12
RC522 Nano130 新唐 对应 csdn博文《nano130 小黄板 连接 RFID-RC522模块》
Cpy和Python的效率对比
09-22
主要介绍了Cpy和Python的效率对比,本文用一个循环 100000000 遍的代码对比了Cpy和Python运行效率测试,需要的朋友可以参考下
out_txt-cpy.py
04-13
该脚本的功能为删除txt文本中的特定行,例如url.txt中包含大量gov关键词的域名,只需要执行脚本,根据步骤输入gov即可删除包含gov的域名
usb_dev_serial_cpu1_cpy8.4us.zip_F2837xS_dsp_uart_upward492
09-20
这是一个基于F2837xS平台的USB模拟串口程序,经过优化占用空间不到4000字,而且发送10个字节只需54us。
【C语言进阶】字符函数和字符串函数
Anton的博客
10-28
577
前言
在文章之前我们要知道C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中 或者字符数组中。 字符串常量适用于那些对它不做修改的字符串函数.
介绍常用字符串函数
1.strlen(字符串长度)
2.strcpy
3.strcat
4.strcmp
5.strncpy
6.strncat
7.strncmp
8.strstr(字符串查找)
9.strtok
10.strerror(错误信息报告)
内存操作函数
11.memcpy
12.memmove
13.m
c语言cpy(str c),c语言str_cpy和strn_cpy实现
weixin_36411269的博客
05-24
919
#include#includechar* my_strcpy(char *dest,const char* source){assert(dest!=NULL||source!=NULL);//store the address start of the dest stringchar* res=dest;while((*dest++=*source++)!='\0');return res;}...
strcpy函数详解看这一篇就够了-C语言(函数实现、使用用法举例、与strncpy的区别)
热门推荐
kim的博客
04-05
5万+
首先要明确strcpy的功能是:将参数src字符串拷贝至参数dest所指的地址
目录
函数介绍
与strncpy的区别
函数实现1:
函数实现2 改进:
用法示例:
函数介绍
函数原型:char*strcpy(char*dest,const char*src) //将src复制到dest字符数组中
头 文 件:#include
返 回 值:char* 类型,返回的是第一个参数的值,即一个目的字符的首地址;
注 意:
1、strcpy...
华为C语言笔试题集合
tianmo2010的专栏
08-14
3万+
①华为笔试题搜集
1.static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在
c语言拓展apche开发,Apache模块开发/用C语言扩展apache(2:APR编程介绍)
weixin_35513122的博客
05-20
243
/*** Get the elements from a table* @param t The table* @return An array containing the contents of the table*/APR_DECLARE(const apr_array_header_t *) apr_table_elts(const apr_table_t *t);/*** Determi...
Apache中多任务并发处理机制研究(1)
lionzl的专栏
03-15
775
//转载请注明来源:http://blog.csdn.net/tingya
//版权声明:
//本书是《Apache源代码全景分析》的草稿部分,
//读者可以自由浏览和打印
//未经本文允许,不得以任何形式出现在盈利印刷品中,否则将追究法律责任!!!
6.1 多进程并发处理概述
6.1.1
概述
第五章中我们讨论Apache主程序的时候,当主程序调用了函数ap_mpm_run
c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量
weixin_36478447的博客
05-19
650
一、多维数组地址的表示方法设有整型二维数组a[3][4]如下:0 1 2 34 5 6 78 9 10 11设数组a的首地址为1000,各下标变量的首地址及其值如图所示。在前面曾经介绍过, /data/c/C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1...
C语言中void cpy,关于C/C++ void指针,使用void指针拷贝int 数组
weixin_26879037的博客
05-24
770
在C/C++中void代表的就是无类型或者为空,作为void *p这样的定义则说明这个指针只包含了指针位置而不包含指针的类型,一般的指针包含2个属性指针位置和类型,其中类型就能判断出其长度。借用网友的总结如下,我觉得总结得非常好。1.void指针是一种特别的指针void *vp//说它特别是因为它没有类型//或者说这个类型不能判断出指向对象的长度2.任何指针都可以赋值给void指针int *p;v...
[笔记] C语言 轻量级字符串操作 函数 CpyString,CpyBytes,CatString,StrLen
aijie099的专栏
08-15
604
/*****************复制字符串***************************/
void CpyString( char * des,char * src,unsigned char len)
{
while(len--)
{
*des=*src;
des++;
src++;
}
}
SavePath=%DEFAULT_CPY_DIR%\E:\Yakuza 0\Yakuza 0\
最新发布
10-21
很抱歉,根据提供的引用内容,我...这些引用内容主要是关于TensorFlow中的模型保存和恢复的函数和方法,与SavePath=%DEFAULT_CPY_DIR%\E:\Yakuza 0\Yakuza 0\无关。请提供更多相关信息或者明确你的问题,我将尽力回答。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
scgillian
博客等级
码龄16年
166
原创
37
点赞
92
收藏
79
粉丝
关注
私信
热门文章
向量在另一个向量上的投影
57605
java利用SHA1withRSA进行签名与验签
27758
mpi中MPI_Isend()与MPI_Send()的一点区别
21892
The Eclipse executable launcher was unable to locate its companion launcher jar的解决方法
15171
LATEX学习
14597
分类专栏
编程之美
15篇
C++
57篇
c
12篇
c++ primer
1篇
CUDA
8篇
baidu面试题
3篇
Linux
13篇
MPI
7篇
java
6篇
沉思录
1篇
算法导论
3篇
动态规划
2篇
fortran
11篇
shell
1篇
逆序数
1篇
分治法
1篇
数学
4篇
微积分
1篇
openmp
1篇
SICP
2篇
LISP
2篇
LATEX
1篇
matlab
Python
2篇
car
careercup
9篇
google python class
IDL
1篇
dynamic programming
1篇
dp
1篇
poj
1篇
vi
1篇
文件操作
1篇
project euler
1篇
二分搜索
1篇
100题
2篇
编译错误
1篇
编程珠玑
4篇
排序
1篇
快速排序
1篇
堆
1篇
heap
1篇
算法笔试题
2篇
面试题
1篇
最新评论
MPI矩阵与向量乘法
m0_58509014:
什么是卷帘划分啊请问?
LATEX学习
磁悬浮青蛙呱呱呱:
使用\bigl(,\bigl[,\bigl{ 以及 \bigr),\bigr],\bigr}就能避免\left \right不在同一行导致的报错了。
提取出某日访问百度次数最多的那个IP(Java实现)
hh15384666158:
没错,代码里一次读了两行,我说结果咋像是正确答案的一半。
分治法求逆序数
不是我 我不爱他:
是的
fortran中的一些函数
Hawk-white :
minloc和maxloc的返回结果是数组,所以你的pois需声明为integer ::pois(1)。
另一解决思路是对结果求和而不是直接赋值:pois=sum(minloc(data))
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
spring多例模式
java利用SHA1withRSA进行签名与验签
eclipse编译时的一些问题
2023年1篇
2016年4篇
2015年2篇
2013年70篇
2012年82篇
2011年1篇
2010年1篇
2009年25篇
目录
目录
分类专栏
编程之美
15篇
C++
57篇
c
12篇
c++ primer
1篇
CUDA
8篇
baidu面试题
3篇
Linux
13篇
MPI
7篇
java
6篇
沉思录
1篇
算法导论
3篇
动态规划
2篇
fortran
11篇
shell
1篇
逆序数
1篇
分治法
1篇
数学
4篇
微积分
1篇
openmp
1篇
SICP
2篇
LISP
2篇
LATEX
1篇
matlab
Python
2篇
car
careercup
9篇
google python class
IDL
1篇
dynamic programming
1篇
dp
1篇
poj
1篇
vi
1篇
文件操作
1篇
project euler
1篇
二分搜索
1篇
100题
2篇
编译错误
1篇
编程珠玑
4篇
排序
1篇
快速排序
1篇
堆
1篇
heap
1篇
算法笔试题
2篇
面试题
1篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
知识挖掘机:国外的破解组织有多牛?游戏还没发售,他们就提前1个月完成破解_网络游戏新闻_17173.com中国游戏门户站
知识挖掘机:国外的破解组织有多牛?游戏还没发售,他们就提前1个月完成破解_网络游戏新闻_17173.com中国游戏门户站
17173全新怀旧频道已上线!推荐怀旧网游,重温老玩家故事。>>>点此进入怀旧频道
0
知识挖掘机:国外的破解组织有多牛?游戏还没发售,他们就提前1个月完成破解
2020-12-03 15:40:55
神评论
Hi~ o(* ̄▽ ̄*)ブ ,这里是正惊游戏,我是正惊小弟!
说到破解组织,在不少玩家们看来是既神秘又酷炫的存在,比较知名的组织像Skidrow 、Razor1911、CPY、RELOADED,这些对于资深玩家肯定都耳熟能详。他们是一群隐藏在互联网角落中的技术大神,曾经以一己之力对抗游戏巨头,将那些售价高达几百元的游戏免费分享给所有囊中羞涩的游戏玩家。
这些破解组织如同为人类盗取圣火的普罗米修斯,为人类带来光明和温暖,但这几年众多游戏破解组织的头目锒铛入狱,却也好似普罗米修斯后来遭受到的惩罚一般。所以,今天小弟我呢想要来和大家说说这些游戏破解组织背后的故事,以及他们的传奇经历!
早在上个世纪70年代的欧洲,就已经开始有破解组织了,但那时候个人电脑和互联网还不普及,所以他们破解的都是各个不同种类计算机中的软件比如:C64,Amiga,NES这些,并且通过电话线来传输软件。
当然了,在那个年代,能接触到计算机的人基本上都是研究员或者大学生这一类高学历的人,他们破解软件或者游戏也纯粹是自己的爱好。所以,当时还会经常举办一些计算机大会进行线下交流技术,这对于那些人来说就相当于超级大party哈哈。
后来到了90年代,互联网和PC的快速发展也带动了游戏产业的快速发展,这些人就慢慢地从线下交流转移到了线上,并且有不少人开始专注于破解游戏软件这一个方向。有意思的是,这些热爱破解游戏的人在组织中定下了几条公约:不设网站(当然了,后来为了方便识别不同组织大家也都设立了自己的网站),不赚钱,破解的游戏只用FTP上传以供下载,并通过论坛交流信息。
↑↑↑现在知名的电竞比赛DreamHack也是一个破解组的交流大会
而破解组也随之而生,有几个志同道合的破解爱好者会自发地形成组织,不同组织之间就会比拼谁的破解速度更快!当年竞争最激烈的时候,一款游戏发售当天就马上有破解组发布破解文件。
其中在效率上,最知名的一个组织就是“RELOADED”,这个破解组织效率高到什么程度呢,80%以上的新游戏首发破解都是他们完成的。
在2004年的时候RELOADED第一次出现在网络上,有不少人认为这个组织的前身是DEVIANCE,因为RELOADED在发布了第一款破解游戏以后,DEVIANCE就没有在发布过破解游戏了。据说是当时DEVIANCE的首脑被捕后,其他成员组建了RELOADED(重新装填),也代表了他们重新回归的意思。
RELOADED不仅以他们的高效闻名,他们的技术在业界也是得到认可的,2008年,《刺客信条》还没发售的时候,他们就提前1个月把盗版资源放出来了,这可把育碧气得不轻。
而搞笑的是,同样是育碧家的游戏《彩虹六号:维加斯2》,数字版存在一个非常严重的BUG,导致玩家无法运行。育碧弄了许久都无法解决这个问题,但RELOADED发布了一个破解补丁直接解决这个问题,从此正版受害者梗开始在玩家之间流传。
有意思的是,破解组他们虽然破解游戏,但同样也看不起那些搞“盗版”的人。比如Skidrow这个破解组织,他们的成立时间要远远早于RELOADED,同RELOADED一样,他们也有不少高光时刻,破解了《猎杀潜艇5》、《刺客信条2》等游戏。但是后来,RELOADED在论坛中直接谴责Skidrow盗用其他破解组的代码,并重新封包以后当做是自己做的。
然而更逗的是,后来Skidrow却又指责过另一家破解组织CODEX盗用他们《特技摩托:聚变》的破解代码,这真的是天道好轮回,苍天绕过谁啊哈哈哈哈。
另一家破解组Razor1911则是以他们的“运气”而著称,或许是因为他们平时比较低调的缘故,成功躲过了2001年和2004年FBI的两次反盗版围剿行动。
当然了,只靠运气Razor1911是不会被玩家们铭记的,他们当年比较大的成就就是破解了暴雪的《星际争霸》,而且成功将游戏压缩到只有22MB的压缩包,这在当时下载速度只有10k/s的年代,简直就是玩家们的超级福音啊!
不过,慢慢地游戏厂商们开始越来越重视反盗版技术,自从Denuvo加密技术出现后,大幅度减缓了破解组织的速度。曾经一度有人认为D加密的出现象征了游戏破解时代的终结,但是这时候一家名为CPY的意大利破解组站了出来。
他们成功攻克了这个号称不可能的难题,后来甚至再接再厉接连攻破了Steam、EA origin的防护,如今CPY已经成为了破解界技术的扛把子,在国内玩家间还流传这一个梗“CPY掌握核心技术”!
但是,在这些组织里,也出现了一个离经叛道者,那就是Team Xecuter,因为他们打破了曾经定下的不盈利的公约。Team Xecuter公然将自己对于NS的破解硬件进行销售,他们的这种行为被同行所不齿。
不过,没卖两年这个组织的首脑就被逮捕了。
现如今还在活跃的破解组已经没有过去那么多了,像国内的几个知名网站在多年前也都宣布正式退出破解行业。大家对于正版游戏的接受程度也越来越高,而这背后也是游戏产业在不断成熟的结果。
最后小弟有话说:
不知道大家有没有发现,这两年国内盗版游戏的问题其实已经没有过去那么猖獗了,大部分又回到了一种比较小规模的状态。这其中的原因除了游戏中需要联网的多人玩法崛起外,还有就是steam这种能够提供优质服务以及便捷下载方式的平台出现,让玩家们能够以更低廉的价格获得更好的体验,这让大家就更容易去接受正版游戏。
当然了,小弟我也清楚,盗版问题肯定是不可能断绝的,但是将盗版游戏只是限制在一个很小的范围内其实也对于游戏行业有一定的意义,毕竟在某些地区,依然有不少人玩不到正版游戏,比如巴西、缅甸、越南这些发展中国家。
但是,经济毕竟会发展,为这些地区培养大量的游戏玩家的意义也是非常重要的,中国不就是最好的例子么?随着steam在中国的崛起,有不少玩家已经为曾经的游戏补票了呢!
最后一个正惊问题:
你还知道哪些知名破解组织么?
【编辑:麦大麦】
关于游戏,破解的新闻
(2024-03-07) 奥比岛2.8版本「春日复苏」开启!春日主题时装、家具上线
(2024-03-06) 《超进化物语2》1.3版本明日上线!新怪兽技能、活动、福利抢先看!
(2024-03-05) 不明信号入侵《超进化物语2》?集合!拯救第三世界!
(2024-03-04) 《地下城堡2》新遗迹BOSS爆照!玩家:有一种融合的美~
(2024-03-02) 游戏史上最离谱的记录!在自己做的地图里卡关7年?
网页
新闻
新闻推荐
新网游
一看吓一跳:雷死人不偿命的囧图集(689)
一看吓一跳:雷死人不偿命的囧图集(688)
正惊GIF:这就是魅力吗?美女抚脸娇羞模样太动人,看呆旁边老爷们
亡命欧罗巴
类型:射击
特征:吃鸡
星级:
克鲁兹佩尔
类型:ARPG
特征:奇幻
星级:
升腾:无限领域
类型:射击
特征:蒸汽朋克
星级:
Project TL
类型:大型RPG
特征:魔幻
星级:
0 +1
为你推荐
游戏X博士
正惊游戏
哔哔
侠义相对论
171柒叁
返回顶部
猜你喜欢:
→ 是你想要的样子吗?《剑灵怀旧服》近期相关爆料与资讯汇总
→ 防不胜防割粉丝韭菜!DNF反诈第一人被捕入狱,两年诈骗400万元
>>>点击查看更多怀旧游戏视频<<<
刺客信条:英灵殿
动作角色扮演
专区
预订激活码、礼包
本周正惊游戏TOP5
1
一看吓一跳:雷死人不偿命的囧图集(688)
2
一看吓一跳:雷死人不偿命的囧图集(689)
3
正惊GIF:这就是魅力吗?美女抚脸娇羞模样太动人,看呆旁边老爷们
4
一看吓一跳:雷死人不偿命的囧图集(687)
5
一看吓一跳:雷死人不偿命的囧图集(686)
热门新闻排行
每周
每月
1 一看吓一跳:雷死人不偿命的囧图集(688)
2 一看吓一跳:雷死人不偿命的囧图集(689)
3 大湿级COS:顶级肉感实力让你欲罢不能 韩国COSer欣赏(52)
4 正惊GIF:这就是魅力吗?美女抚脸娇羞模样太动人,看呆旁边老爷们
5 热点预告:聚焦3月7日周四!腾讯将推一款全新“3亿鼠标梦想”?
6 魔兽2月大事件:3个月内必开魔兽国服?暴雪股东再度反对微软收购案!
7 一看吓一跳:雷死人不偿命的囧图集(687)
8 一看吓一跳:雷死人不偿命的囧图集(686)
9 热游情报:腾讯怀旧新游开测引热议 网易高调宣称五大赛道拿第一
10 类魔兽双端游戏《塔瑞斯世界》前夕终测消息汇总
1 一看吓一跳:雷死人不偿命的囧图集(688)
2 一看吓一跳:雷死人不偿命的囧图集(689)
3 大湿级COS:顶级肉感实力让你欲罢不能 韩国COSer欣赏(52)
4 正惊GIF:这就是魅力吗?美女抚脸娇羞模样太动人,看呆旁边老爷们
5 热点预告:聚焦3月7日周四!腾讯将推一款全新“3亿鼠标梦想”?
6 魔兽2月大事件:3个月内必开魔兽国服?暴雪股东再度反对微软收购案!
7 一看吓一跳:雷死人不偿命的囧图集(687)
8 一看吓一跳:雷死人不偿命的囧图集(686)
9 热游情报:腾讯怀旧新游开测引热议 网易高调宣称五大赛道拿第一
10 类魔兽双端游戏《塔瑞斯世界》前夕终测消息汇总
你不知道点进去会是什么
更多»
对性感艺术化诠释
玩游戏告别单身
Wan网页游戏免费玩
更多»
盗墓新游进入
谁是首富进入
关于17173 |
人才招聘 |
广告服务 |
商务洽谈 |
联系方式 |
客服中心 |
网站导航
Copyright © 2001-2024 17173. All rights reserved.
重新认识 Python(7)CPython初探 - 知乎
重新认识 Python(7)CPython初探 - 知乎首发于软件工程狮切换模式写文章登录/注册重新认识 Python(7)CPython初探泛程序员天津大学 结构工程博士CPython 是 Python 社区的标准,其他版本的 Python,比如 pypy,都会遵行 CPython 的标准API实现。想要更深入的认识 Python,就需要了解 CPython 实现。这一期,我就带大家认识一下 CPython 源代码,为日后改造 Python 做准备。首先,展示如何本地编译最新的 CPython代码。然后,展示如何 debug 编译好的解释器。最后我们会利用 CPython 实现简单的函数调用。本文会为你揭开 CPython 的面纱,带你进入 C + Python 的世界。文章的最后,你也会对 Python 中最重要的概念:一切皆对象(object)有更深刻的认识;你还会发现一点点线索,为什么Python用起来比其他语言,比如 C 慢很多。请打开编辑器和命令行,我们开始。(本文主要使用MacOS,Windows 不一定可以直接实现)。当我们再说 Python,我们在说什么?在我还是小小白的时候,我经常会想:当我们说 Python 的时候,我们到底在说什么?后来当我学了编译原理,我变成了一个小白,我知道了,当我们说 Python 的时候,我们其实再说两个东西:语言的语法和语言的运行时。语法主要规定了如何表达程序,比如我们写 a = 1 是合法的,且有语义;而当我写 for i in 1: 的时候,是不合法的,语义也就无法确定。运行时(run time)是指运行我们写好的代码的另一个“程序”。也就是当我们输入 python test.py 的时候,这里面的 python 就是我们的“程序”,这个运行时负责执行我们的代码。而这个 runtime,可以有很多不同的实现,比如 CPython 实现就是一个用 C 语言实现运行时,而 pypy 则是用 RPython 实现的运行时等等。这个 runtime 可以理解我们写的 python 代码,并且把它编译成 python 的字节码,然后执行。比如:a = 1
print(a)
上面的代码在屏幕打印1。如何实现的呢?其实是我们的运行时“程序” python 实现的。首先,python 会把上面的源代码翻译成字节码:import dis
dis.dis("a=1;print(1)") # 这一行会把源代码编译成字节码,就是 python 认识的操作。
## 结果
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (a)
4 LOAD_NAME 1 (print)
6 LOAD_NAME 0 (a)
8 CALL_FUNCTION 1
10 POP_TOP
12 LOAD_CONST 1 (None)
14 RETURN_VALUE
上面的字节码,背后就是 python 程序提供的一些基本操作。比如 LOAD_CONST,加载常数 1 进入内存。你可以在这里找到所有的字节码。一句话总结,CPython 就是一个可以执行你写的python代码的另一个由 C 语言写的程序。编译 CPython首先,我们要去 github fork CPython 的代码到自己的账户下:https://github.com/python/cpython 。然后我们作如下操作:xcode-select --install
brew install git
brew install openssl
brew install readline
# mac 需要 xcode 才能编译
git clone git@github.com:{你的账户。。}/cpython.git
cd cpython
git remote add upstream git@github.com:python/cpython.git
# 把原始仓库加入
# 编译 python,加入debug选项,方便我们后面进一步探索。
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix readline)/include" \
LDFLAGS="-L$(brew --prefix readline)/lib" \
./configure --with-pydebug \
&& make
很快编译就会成功,此时你的当前目录下会出现一个 python.exe 的可执行文件,这就是我们编译好的 Python!输入 ./python.exe 就会看见熟悉的python解释器了提示符了。Python 3.10.0a6+ (heads/master:f00e82f8b8, Mar 13 2021, 23:26:48) [Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Debug CPython编译完成后,我们就可以来看看 CPython 内部的“秘密”了。这里我用的 lldb 因为 Mac 的安装 gdb 比较复杂。基本步骤是一样的。输入 lldb python.ext。接下来,我们需要在 Programs/python.c 的 main 函数处设置一个断点。这个函数就整个解释器的入口。(lldb) b main
Breakpoint 1: where = python.exe`main + 22 at python.c:15:25, address = 0x0000000100000856
(lldb) r
Process 43373 launched: '/Users/zhewang/Projects/cpython/python.exe' (x86_64)
Process 43373 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000856 python.exe`main(argc=1, argv=0x00007ffeefbff330) at python.c:15:25
12 int
13 main(int argc, char **argv)
14 {
-> 15 return Py_BytesMain(argc, argv);
16 }
17 #endif
好,现在我们就停留在了 CPython 世界的入口了!简单的加法!现在我们在 debug 环境下,用 CPython 来实现一个整数的加法。首先,我们来看一下 int 这个 object。我把部分 int object 的代码放在下面。可以看出,python 里面连最基本的 int 对象都别有洞天!要知道python运行的时候,每一个整数在内存里其实都包含了下面结构体所有的变量。具体文件可以在 Objects/longobject.c 找到。PyVarObject_HEAD_INIT 定义了 int 的类型,int 的类型其实叫 PyLong_Type,他的基类是一个叫 PyType_Type 的类型。比如在python中,type(1) 会返回 int,即下面的 tp_name,而 type(type(1)) 则返回 type,即PyType_Type。当然 python 的整数做的这么复杂主要是为了保持所有对象类型协调统一,即无论是复杂的类型还是简单的类型,他们的内存结构都是样的!( 这里插一嘴,python的int是long,也就是说可以是任意大的整数,不会溢出!)PyTypeObject PyLong_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"int", /* tp_name */
offsetof(PyLongObject, ob_digit), /* tp_basicsize */
sizeof(digit), /* tp_itemsize */
0, /* tp_dealloc */
0, /* tp_vectorcall_offset */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_as_async */
long_to_decimal_string, /* tp_repr */
&long_as_number, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
(hashfunc)long_hash, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_LONG_SUBCLASS |
_Py_TPFLAGS_MATCH_SELF, /* tp_flags */
long_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
long_richcompare, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
long_methods, /* tp_methods */
0, /* tp_members */
long_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
long_new, /* tp_new */
PyObject_Del, /* tp_free */
};
我们现在在debug 环境里面可以尝试创造一个 int 对象!(lldb) b pymain_import_readline
Breakpoint 1: where = python.exe`pymain_import_readline + 12 at main.c:205:9, address = 0x000000010032ad1c
(lldb) r
Process 54697 launched: '/Users/zhewang/Projects/cpython/python.exe' (x86_64)
Python 3.10.0a6+ (heads/master:f00e82f8b8, Mar 20 2021, 21:50:27) [Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Process 54697 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x000000010032ad1c python.exe`pymain_import_readline(config=0x00000001007503d0) at main.c:205:9
202 static void
203 pymain_import_readline(const PyConfig *config)
204 {
-> 205 if (config->isolated) {
206 return;
207 }
208 if (!config->inspect && config_run_code(config))
我们停在这里,Python已经完成一些初始化设置,但是还没有进入 >>> 交互环境。这时,我们使用 CPython 的底层函数创建两个 int 对象。(lldb) call PyLong_FromLong(10)
(PyObject *) $0 = 0x00000001007a8500
(lldb) call PyLong_FromLong(20)
(PyObject *) $1 = 0x00000001007a8780
可以看到,返回的是一个指向 PyObject 的指针。其实这个就是一切皆对象中的对象啦,就是这个 PyObject,Python中所有类型实例化后都是这个这个 PyObject。来看一下这两对象的内存:(lldb) p *$0
(PyObject) $2 = {
ob_refcnt = 10
ob_type = 0x00000001004936f0
}
(lldb) p *$1
(PyObject) $3 = {
ob_refcnt = 8
ob_type = 0x00000001004936f0
}
可以看到,他们有两个field,一个是 refcnt 用来管理垃圾回收,另一个是 ob_type 指向对象类型的内存。通过访问 ob_type 可以看到该类型的内存:(lldb) p *$1->ob_type
(PyTypeObject) $5 = {
ob_base = {
ob_base = {
ob_refcnt = 68
ob_type = 0x000000010049a620
}
ob_size = 0
}
tp_name = 0x0000000100407b51 "int"
tp_basicsize = 24
tp_itemsize = 4
tp_dealloc = 0x00000001001707c0 (python.exe`object_dealloc at typeobject.c:4062)
tp_vectorcall_offset = 0
。。。省略
接下来我们看看我们的 PyLong_Type 支持哪些运算:(lldb) p *PyLong_Type->tp_as_number
(PyNumberMethods) $9 = {
nb_add = 0x000000010011b180 (python.exe`long_add at longobject.c:3065)
nb_subtract = 0x000000010011ae00 (python.exe`long_sub at longobject.c:3099)
nb_multiply = 0x000000010011dac0 (python.exe`long_mul at longobject.c:3533)
nb_remainder = 0x000000010011dda0 (python.exe`long_mod at longobject.c:3966)
nb_divmod = 0x000000010011dee0 (python.exe`long_divmod at longobject.c:3982)
nb_power = 0x000000010011e0b0 (python.exe`long_pow at longobject.c:4098)
nb_negative = 0x000000010011aca0 (python.exe`long_neg at longobject.c:4318)
nb_positive = 0x000000010011c570 (python.exe`long_long at longobject.c:4692)
...
我们来试一下加法!(lldb) p *PyLong_Typp.tp_as_number->nb_add
(PyObject *(*)(PyObject *, PyObject *)) $10 = 0x000000010011b180 (python.exe`long_add at longobject.c:3065)
可以看到,加法的函数签名是:(PyObject *(*)(PyObject *, PyObject *))。(lldb) p PyLong_Type.tp_as_number->nb_add((PyObject *) 0x00000001007a8500,(PyObject *) 0x00000001007a8780)
(PyObject *) $15 = 0x00000001007a8a00
我们得到了另一个 PyObject 的指针,0x00000001007a8a00。这个理论上就是 10+20 的结果,30。我们来验证一下。(lldb) p *(PyLongObject *) 0x00000001007a8a00
(PyLongObject) $30 = {
ob_base = {
ob_base = {
ob_refcnt = 8
ob_type = 0x00000001004936f0
}
ob_size = 1
}
ob_digit = ([0] = 30) # <--- 这里就是我们的答案。。
}
总结这一篇 CPython 初探就到这里,我们学会了如何编译、debug我们的Python解释器,用CPython的API实现了简答的加法。有了这些基础知识我们就可以开始进一步探索CPython的世界了!编辑于 2021-03-21 22:19PythonPython源码剖析(书籍)C / C++赞同 835 条评论分享喜欢收藏申请转载文章被以下专栏收录软件工程狮软件工程也