前言前段时间,部门的前端项目迁移到monorepo架构,笔者在其中负责跟git工作流相关的事情,其中就包括githooks相关的工程化的实践。用到了一些常用的相关工具如husky、lint-staged、commitizen、commit-lint等,以此文记录一下整个的实践过程和踩过的坑。注意:下文中的例子以及命令都是基于MacOS,如果你是windows用户,也不用担心,文中也会阐述大致原理和运行逻辑,对应的windows命令可以推理得知。GitHooksGitHooks是什么大多数同学应该都对githooks相当了解,但是笔者还是想在这里详细解释一下。首先是hook,这其实是计算机领域中
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言我以前很喜欢封装组件,什么东西不喜欢别人的,总喜欢自己搞搞,这让人很有成就感,虽然是重复造轮子,但是能从无聊的crud业务中暂时解脱出来,对我来说也算是一种休息,相信有很多人跟我一样有这个习惯。这种习惯在独立开发时无所谓,毕竟没人会关心你咋实现的,但是在跟人合作时就给别人造成了很大的困扰了,毕竟每个人封装的东西都是根据自己习惯来的,别人看着多少会有点不顺眼,而且自己封装的组件大概率也是没有写文档和注释的,所以项目其他成员的使用率也不会太高,所以今天,我试着解决这个问题。另外,我还在一些群里看到有人抱怨vue3不如vue2好用,主要
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言我以前很喜欢封装组件,什么东西不喜欢别人的,总喜欢自己搞搞,这让人很有成就感,虽然是重复造轮子,但是能从无聊的crud业务中暂时解脱出来,对我来说也算是一种休息,相信有很多人跟我一样有这个习惯。这种习惯在独立开发时无所谓,毕竟没人会关心你咋实现的,但是在跟人合作时就给别人造成了很大的困扰了,毕竟每个人封装的东西都是根据自己习惯来的,别人看着多少会有点不顺眼,而且自己封装的组件大概率也是没有写文档和注释的,所以项目其他成员的使用率也不会太高,所以今天,我试着解决这个问题。另外,我还在一些群里看到有人抱怨vue3不如vue2好用,主要
FridaHook可变参数0x00前言:可变参数Hook原理可以参考下我的这篇文章:C++逆向可变参数Hook我在网上搜了好久,都没找到有人写过FridaHook可变参数.........0x01FridaHook可变参数argsOK回归正题,Frida如何Hook可变参数。首先可变参数意味着,他的参数个数不确定,参数类型不确定。在frida中,函数的参数都在args上。我看了官网资料,他说args是一个NativeObject的Array。可是当我用JS去遍历这个Array的时候,总是会报错。。。。(如果有大神知道,请告诉我如何去遍历。谢谢!)而且我就这样直接输出args,他也会报一个arr
FridaHook可变参数0x00前言:可变参数Hook原理可以参考下我的这篇文章:C++逆向可变参数Hook我在网上搜了好久,都没找到有人写过FridaHook可变参数.........0x01FridaHook可变参数argsOK回归正题,Frida如何Hook可变参数。首先可变参数意味着,他的参数个数不确定,参数类型不确定。在frida中,函数的参数都在args上。我看了官网资料,他说args是一个NativeObject的Array。可是当我用JS去遍历这个Array的时候,总是会报错。。。。(如果有大神知道,请告诉我如何去遍历。谢谢!)而且我就这样直接输出args,他也会报一个arr
目录C++逆向可变参数Hook0x00前言:0x01C++可变参数:可变参数简介可变参数代码实战0x02逆向分析C++可变参数原理0x03printfHook实战Pwn菜鸡学习小分队C++逆向可变参数Hook0x00前言:我们在做逆向分析的时候,经常会需要去Hook一个程序的日志输出函数。而这种日志输出函数一般参数都不确定,这就会引起一个问题。我们如何知道参数个数?如何知道他有哪些参数呢?0x01C++可变参数:可变参数简介在C++中,可变参数的函数定义可以写成如下格式。用...来声明可变参数。voidtest(inta,intb,...){//Code...}在调用可变参数的函数时,可以在后
目录C++逆向可变参数Hook0x00前言:0x01C++可变参数:可变参数简介可变参数代码实战0x02逆向分析C++可变参数原理0x03printfHook实战Pwn菜鸡学习小分队C++逆向可变参数Hook0x00前言:我们在做逆向分析的时候,经常会需要去Hook一个程序的日志输出函数。而这种日志输出函数一般参数都不确定,这就会引起一个问题。我们如何知道参数个数?如何知道他有哪些参数呢?0x01C++可变参数:可变参数简介在C++中,可变参数的函数定义可以写成如下格式。用...来声明可变参数。voidtest(inta,intb,...){//Code...}在调用可变参数的函数时,可以在后
前言上篇文章《Android安卓进阶技术分享之AGP工作原理》和大家分析了AGP(AndroidGradlePlugin)做了哪些事,了解到AGP就是为打包这个过程服务的。那么,本篇文章就和大家聊一聊其中的Transform,解决一下为什么在AGP3.x.x的版本可以通过反射获取的transformClassesWithDexBuilderForXXXTask在4.0.0的版本就不灵了?源码走起!Transform的流程读本篇文章以前,相信同学们已经具备Transform的使用基础。相信很多人都看过这张图:Transform过程正如上图中展示的,我们可以看到:•在一个项目中,我们可能既会有自定
前言上篇文章《Android安卓进阶技术分享之AGP工作原理》和大家分析了AGP(AndroidGradlePlugin)做了哪些事,了解到AGP就是为打包这个过程服务的。那么,本篇文章就和大家聊一聊其中的Transform,解决一下为什么在AGP3.x.x的版本可以通过反射获取的transformClassesWithDexBuilderForXXXTask在4.0.0的版本就不灵了?源码走起!Transform的流程读本篇文章以前,相信同学们已经具备Transform的使用基础。相信很多人都看过这张图:Transform过程正如上图中展示的,我们可以看到:•在一个项目中,我们可能既会有自定
在《JS模块化》系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的“四个现代化”:工程化、模块化、规范化、流程化。在该系列文章中已详细介绍了模块化的发展及四种模块化规范。本文简单聊聊规范化中的git规范。1规范化在企业级开发中,“一千个读者有一千个哈姆雷特”是很常见的事,每个程序员对技术的理解、视角和掌握程度参差不齐,导致编写的代码五花八门。规范化包括很多,我在企业实践中重点关注两个方面:代码规范和git提交规范。代码规范最基础的是代码格式,不同的代码格式虽然运行起来没有问题,但代码超级难看,代码乱七八糟、一堆warning,虽然不影响运行,但看着太恶心,就像下面的情形:估计是为