![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术杂谈
文章平均质量分 60
fanged
野生程序员。。。这里主要是一些学习笔记和心得。。。
展开
-
BusyBox
这个题目挂了很久了,一直想写一点但是又觉得没什么好写的。因为从原理来说,busybox真的不难,没有太多特别的东西,就是一个进程完成了之前很多进程干的活。这样减少了空间暂用。然后比较有趣的一点,是可以用busybox制作构建最小系统。其实后面去看看各个命令的实现,我觉得还是很有趣味的。用法其实也很简单,把以前的命令作为参数就可以了。不幸的是加载fs的时候失败了,空了再研究吧。看了下编译出来1.1M,确实挺感人的。创建初始化脚本inittab。原创 2024-03-27 14:41:07 · 251 阅读 · 0 评论 -
ELF文件格式
2.2 读取程序头表 根据ELF文件头中的信息,内核读取程序头表(Program Header Table),这表明了哪些部分需要加载到内存中以及它们的属性(可读、可写、可执行)。2.5 动态链接器(ld-linux) 如果ELF文件是动态链接的可执行文件,内核会查找并加载动态链接器(通常为ld-linux.so或类似名称),并将控制权交给动态链接器。3.1 加载共享库 动态链接器读取可执行文件的动态段(Dynamic Section),找到所需的共享库(动态库),并将它们加载到内存中。原创 2024-07-22 01:54:55 · 386 阅读 · 0 评论 -
C++的智能指针
说实话以前用这个很少,一个指针打天下,不过都智能了,分配了就不管了,想来还是很方便。。。原创 2024-07-22 17:27:28 · 164 阅读 · 1 评论 -
JNI示例
其实可以看到,JNI整个也并没有做太多东西,整个也没有对操作系统,语言做一些很深层次的定制,大部分还是基于语言的特性来弄的。有空可以看看JNI那几个宏,就一切都明白了。中间可能会提示Java没有装,装下面几个就可以了。也不用全装,headless装一个就行了。Linux下,没有在Andorid下面搞,安卓开发效率太低了。这里会生成HelloJNI.class。之后会生成头文件,HelloJNI.h。之后就会生成libhello.so。原创 2024-02-21 01:53:44 · 114 阅读 · 0 评论 -
用Docker来辅助开发
现在好像用Docker是越来越多了。之前其实也看过docker的原理,大概就是cgroup那些,不过现在就不看原理了,不谈理论,只看实际中怎么用,解决眼前问题。用docker来做开发,其实就是解决的编译环境的差异,就像关大象进冰箱有几步,这里也有两步。1 创建docker。2 使用docker编译。原创 2024-07-17 13:41:17 · 220 阅读 · 0 评论 -
Ninja小结
它的代码量小、功能集中,避免了多余的复杂性,确保所有设计决策都以速度为优先。默认支持并行构建,可以利用多核 CPU 的优势,加快构建速度。从结构上来看,和Makefile,CMake,Meson,Android.bp那些基本上没啥区别。有时候真的觉得IT行业中某些方面真的太多分支了,功能差不多,搞一堆不同的语法,真的大大的增加了码农的学习负担。参照网上的,要创建一个build.ninja。当然,是不是这么快我不知道,起码现在编译Android是慢成翔了。参数,可以控制并行任务的数量,从而充分利用硬件资源。原创 2024-02-12 02:08:17 · 112 阅读 · 1 评论 -
Rust Hello
这篇文章抽空再看看特性吧,否则内容很少。就是~/.cargo/config。经过我的测试,清华那个速度还可以。安装中有个选择,直接选1就行了。一定要换源,否则真的太慢了。就直接可以看到结果了。然后用rustc编译。原创 2024-07-09 11:44:35 · 178 阅读 · 0 评论 -
Openssl制作证书
在出厂之前,生产方会用私钥对bootloader,分区这些做签名。调用之前会对这些分区进行校验,就像上面的Verify OK之后才下一步。有一个小疑问,假如签名,目标文件都改了,那么可以校验通过吗?GPT答复是不会,因为做签名要私钥,如果这个私钥和公钥不匹配,也是不会通过的。所以在设备上,包整公钥不能被更改就欧了。写这个还是因为之前Android的Secure Boot,本质上就是如此。然后根据之前的私钥,从这个文件生成验证证书。对方此时就拿到了文件,验证证书,还有你的公钥。如果没有篡改,就是OK。原创 2024-06-17 15:35:02 · 424 阅读 · 0 评论 -
Linux shell技巧(持续更新)
这个工具挺好用的,主要解决量大痛点,一个是分屏,这样就不用开很多窗口然后手动切换。唯一麻烦点就是所有操作都要用快捷键,用Ctrl+B开始,要记的东西很多。这个工具还是可以,挺实用的。可以实现类似TOP的效果。打开鼠标:命令行,set -g mouse on。加入会话:tmux attach -t x。切换会话:tmux switch -t x。窗口全屏:命令行,z。分屏:快捷键,%(左右)/"(上下)。查看会话:tmux ls。切换窗口:快捷键,箭头。关闭窗口:快捷键,x。分离会话:命令行,b。原创 2024-05-15 15:42:44 · 323 阅读 · 0 评论 -
C++新特性复习1 版本11
老实说,我是毕业不久就开始用C++,原因就是VC++,当时用来做界面。还好吧,不是觉得太难,起码对数学底子没有要求,后面偶尔也用用,但是整体还是C居多。现在项目又要用,但是很多语法有点看不懂了,所以复习一下下。先从11开始吧,从特性上看:指针方面unique_ptr,shared_ptr,weak_ptr。条件语句 for − range-for。初始化initializer_list。原创 2024-06-17 13:35:27 · 178 阅读 · 0 评论 -
一个很好用的scp免密方法
命令ssh-copy-id,真的太好用了。user远程远端用户名,target_host是远端服务器。一般来说都有公钥,如果没有,生成一个就行。感觉生活又更美好了一丢丢。原创 2024-03-25 20:25:56 · 94 阅读 · 0 评论 -
CMake小结
网上很多教程都是做成动态库或者静态库,但是以前的工程是使用变量的,所以这里还是使用变量。本质还是一个文本的处理。以前的工程本来是有完整的makefile,PM给改成CMAKE,然后大吹什么做成了组件式。在没有跨平台的需求时,有没有必要切换CMAKE,我觉得也是值得商榷的。1 使用cmake的时候可以加一个-B build,指定在build,完了直接删也很方便。3 里面还是有一些高级函数,比如function,foreach等,用的好也能玩出一些花。首先还是回忆了一下以前的工程,写了一个简单的复盘工程。原创 2024-02-12 01:49:14 · 482 阅读 · 1 评论 -
恩尼格玛密码机(Enigma)Python实现
技术改变历史,决定无数人生死的典型案例。现在只用一点点python代码就实现了,不由得感叹上帝跌落凡间。该代码的原始出处不详。原始信息: Attack at nine o 'clock tomorrow morning。加密信息: Gpzlwo ub heck w 'ewrfo ufvpvlnj ergaaki。解密信息: Attack at nine o 'clock tomorrow morning。转载 2024-05-03 20:19:17 · 154 阅读 · 0 评论 -
正则表达式学习
综上可以看到,在一些复杂条件的判断,正则表达式还是很有优势。写代码去判断真的要搞半天,有些复杂的估计可以进leetcode了。最后,所有的表达式其实可以用GPT生成,也不用自己去写。。。懂一些基本概念即可。原创 2024-02-17 12:28:20 · 108 阅读 · 1 评论 -
VSCode奇技淫巧(持续更新)
打开文件之后再打开新文件,会自动覆盖。这个问题困扰了我很久,原因其实是VSCode中文件打开分为预览状态和编辑状态。预览状态标题是斜的,这时新打开就会覆盖,有两个解决办法。直接点着文件然后右键,select for compare,我觉得挺好用的。如果我们多次按下快捷键,编辑器会继续往下找到相同的单词,然后自动选中。1 使用双击打开,就是编辑状态。我一直想找能自动生成流程图的插件,可惜还没找到。不过感觉这个方式也不是很好,会占用很多空间。Ctrl + /(这个真的很棒。这个不用多说了,嵌入式开发必用。原创 2024-03-27 01:46:01 · 334 阅读 · 0 评论 -
Git学习2 -- VSCode中的Git
在第一栏source control,可以进行基本的git操作。主要的git操作都是在这里,pull,push,commit这些。第一个是自带的Source Control。第二个是Gitlens,第三个是Git Graph。最后还有个Git History,我觉得也是挺有用的。特别是merge版本,升级版本啥的。第四栏的remotes,应该是可以看到远端的各个分支。第三栏的branches,应该是可以看到各个分支。第六栏的TAGS,则是可以看到之前打的tag。第五栏的stash,可以看到本地缓存。原创 2024-06-16 16:56:53 · 264 阅读 · 0 评论 -
Git学习1 -- 常用命令(持续更新)
将生成的 patch 文件传输给其他人或应用程序。不确定远端仓库名和分支名的话,可以用git remote -v和git branch -r查看。:确定要生成 patch 的提交范围,可以是单个提交、一系列连续的提交,或者两个提交之间的差异。Git rebase和Git merge区别,然后rebase会丢失提交,所以一般用merge。是要生成 patch 的提交范围的最后一个提交。的文件,其中包含了从指定提交到当前 HEAD 的所有更改。或者使用git fetch也可以,完了再merge一下。原创 2024-05-03 21:31:02 · 308 阅读 · 1 评论 -
一些不错的技术网站(持续更新)
基础:原创 2024-05-03 21:37:16 · 683 阅读 · 1 评论