晨晓 | Chinsyo

得到的都是侥幸 失去的都是人生

宏定义的黑魔法,C语言模拟命名参数

Macro Magic - Named Parameter

今天翻阅代码时偶然看到函数调用传入命名参数,初看以为是C语言新标准的某个语法,探究了一下源码。PoC代码如下: 代码很简单无需展开探讨,主要思路为通过宏定义将命名参数构造为预先定义好的结构体,留意几个细节即可。 模拟实现的命名参数支持默认参数,这是由C语言结构体自身语法支持的 ...

宏定义的黑魔法,C语言模拟函数重载

Macro Magic - Overload

重载(Overload)是编程语言中具有的一项特性,这项特性允许创建数项名称相同但输入类型或个数不同的子程序(少数语言支持的重载函数返回类型不在本文讨论范围)。此特性很容易和面向对象编程中重写(Override)混淆,理解相关概念时需要有所区分。 不难理解,对于以下两种形式的重载,C语言源文...

Git日志的一些使用技巧

Git log useful tips

2020年1月1日,各位读者新年快乐!本次更新一些《Pro Git》中记录的日志小技巧。 统计贡献者的代码提交次数 1 git shortlog -sne shortlog是用于简化log输出的命令,可以方便的汇总展示不同提交者的提交日志。 参数含义如下: 1 2 3 -s 只输出提...

Git如何下载仓库子目录

How to download git subdirectory?

最近工作内容涉及加密算法日益变多,趁周末休息准备动手写几个OpenSSL 的项目加强学习,OpenSSL 项目很大,即使按照我在之前文章提过的方法 git clone --depth 1 或是下载压缩包也需要不少的时间和空间。 在查阅一些资料后了解到有几个方式可以实现只下载特定目录的效果,需...

GitHub Pages域名劫持的诊断与抢救

DNS Record Troubleshoot

身体抱恙,请假休息。闲来无事打开 Google 检查下博客收录情况,日常查看 Search Console 数据收录页面大概 40 个左右。 今天发现搜索结果有些异常,在搜索栏输入site:chinsyo.com,居然足足有 8 页数据。 事出反常必有妖,当翻到第 3 页尾部的时候发现...

我的书单

My reading list

在最近两个月遇到新的问题和挑战时,我花了很多时间甄别需要怎样的知识和技能去应对,然后不辞辛劳的收集资料和书单。诚然,买书和读书是两件相关性并不强的独立事件,我一度难以理解正版图书、音乐、电影和软件的付费习惯都没有养成的消费市场为什么在知识付费面前表现出空前的积极性。直到后来读到一句话「人们...

CTF入门——从编写简单KeygenMe开始

Get Started CTF, DeadSimple KeygenMe

在前一篇文章《CTF入门——从攻破简单CrackMe开始》中介绍了如何通过填充nop编辑可执行文件的二进制内容绕过校验逻辑,本文会进一步介绍如何通过反汇编代码倒推出注册码生成逻辑,编写一个注册机程序。 注册码生成程序也称为 KeygenMe ,通常 CTF 比赛中相关题目爆破得分最低,获得一...

CTF入门——从攻破简单CrackMe开始

Get Started CTF, DeadSimple CrackMe

也许你还不知道什么是CTF和RE(Reverse Engineer 逆向工程),但你可能已经被韩商言和李现刷屏了几个轮回,最近人气和口碑双丰收的电视剧《亲爱的 热爱的》对CTF这个安全领域的概念做了全民科普。 某天我家那位不知防火墙是何物的人民教师和我闲聊时问起CTF,作为网安公司的研发工程...

米家智能家居选购指南 & 体验报告

Mijia smart home tricks and tips

家是家庭成员的连结点,承载了生产活动之外的几乎所有时间。按照马斯洛需求金字塔,家居的需求也可以分为安全、舒适、美观、享受几个层次,作为一名研发人员,一直期望家能更有科技感。 智能家居作为物联网的一个应用领域不断有产品推陈出新,要在名目繁多的产品中找到自己需要的并不容易。我在2018年中旬思考...

FRP 内网穿透——随时随地SSH连接家中的树莓派

FRP - SSH Connect Raspberry Pi Anywhere

树莓派(Raspberry Pi)是为计算机编程教育设计的廉价电脑,只有信用卡大小。 久闻树莓派盛名,第一次动购买的念头是看了 Kitten Yang 基于 Home Assistant 搭建智能家居的博文后,但装修时最终采用了小米智能家居的整体方案(目前已经使用一年有余,今后会专门写一篇使...