暂无个人介绍
探索免费编译器选项:GCC, Clang( LLVM 前端), Cygwin, MinGW, IBM C/C++ Compiler, Visual Studio, Intel System Studio 和 Oracle Developer Studio。调试工具有GDB, Kdevelop, DDD, Valgrind, Sanitizers, Record and Replay及Windows Debugging Tools。开始你的编程之旅!
该内容是一个关于逆向工程的案例分析,讲述了如何破解财联社登录接口的加密参数`sign`。作者发现`sign`是通过`sha1`和`md5`混合加密的。经过调试,找到了加密算法的过程,并用JavaScript模拟了这个过程,最终成功生成了与接口相同的加密字符串。附有JS代码示例。
进程反应了进程执行的变化。 进程的状态分为三种 ,`运行态`,`阻塞态`,`就绪态` 在五态模型中分为以下几种,新建态,就绪态,运行态,阻塞态,终止态。 运行态:进程占用处理器正在运行。 就绪态:进程已具备运行的条件,等待系统分配处理器运行。 阻塞态 :又称为等待(`wait`)态,或睡眠(`sleep`)态,指进程不具备运行条件,正在等待事件的完成。 新建态:进程已被创建,还未加入就绪队列。
该文介绍了如何使用Selenium将数据直接存入MySQL数据库,以苏宁易购网站为例。首先,优化了JSON数据写入,通过pymysql连接数据库,创建`books`表并读取JSON文件插入数据。接着,整合代码实现直接从网页抓取价格和标题,使用Selenium自动化滚动加载页面,定位元素,清洗数据并使用参数化查询插入到`books`表。主程序循环遍历多页数据,最后关闭数据库连接。
该文介绍了TopK问题的两种解决方案:大小根堆和快排分割。使用大根堆可以找到前K小的元素,小根堆则用于找到前K大的元素。示例代码展示了如何用C++实现这两个方法。快排分割通过不断调整数组结构,找到第K大或第K小的元素。文章提供了相应的代码示例及输出结果。
一致性哈希是一种用于分布式系统的负载均衡算法,旨在减少服务器增减导致的数据迁移。当有N台服务器时,通过哈希环将请求均匀分布到每台服务器,每台处理N/1的请求。若使用缓存如Redis,可进一步处理高并发场景。算法将哈希值空间视为环形,服务器和请求哈希后定位到环上,按顺时针方向找到第一台服务器作为负载目标。提供的C++代码实现了MD5哈希函数,以及一致性哈希算法的物理节点、虚拟节点和算法本身,以实现节点的添加、删除和请求映射。
了解如何实现socket通信以及TCP连接的过程中发生了什么
使用Selenium爬取苏宁易购商品信息,步骤包括打开网页、翻页、获取信息并保存至本地JSON文件。核心功能有滚动页面加载更多商品(模拟鼠标滚动)和抓取每页数据(提取标题和价格)。主程序通过循环实现自动翻页,直到无下一页按钮,最终将所有数据整合到一个JSON文件中。完整代码展示了所需导入的模块、滚动页面及获取数据的函数,以及主程序逻辑。
逆向工程主要关注思维和分析方法,而非仅仅代码。它涉及破解加密数据和处理动态请求参数。常见的加密算法包括线性散列(如MD5)、对称加密(AES, DES)和非对称加密(RSA)。MD5加密是不可逆的,但可通过暴力破解。DES/AES使用相同密钥进行双向加密,而RSA则使用公钥加密,私钥解密。Base64是一种编码而非加密,易于解码。理解加密类型和解密策略是逆向的重点。
安装PyExecJS和Node.js环境,使用Python通过PyExecJS调用JavaScript代码。微信公众号平台案例中,通过抓包分析找到密码加密函数,使用js改写工具修改后保存为weixin.js。利用PyExecJS的execjs.get()、compile()和eval()方法执行加密函数,获取加密后的密码数据。示例代码展示了如何调用weixin.js中的getPwd函数。
本文是关于AES加密算法的逆向分析实战。通过跟栈方式找出加密位置,发现在`jslencode`函数中完成账号和密码加密。使用CryptoJS库,示例代码展示了如何用AES进行加密,其中`397151C04723421F`作为key,加密手机号和密码,并打印结果。
# C++引用 > 引用是C++新增的复合类型,引用是已定义变量的别名。 - 引用的用途:做函数的形参和返回值。 ## 引用的语法 ```c 引用类型 & 引用名 = 原变量名 ``` **案例** ```c++ #include<cstdio> #include<iostream> using namespace std; void swap(int&a,int&b) //通过引用交换数值 { int tmp = a; a = b; b = tmp; } int main() {
# C++中的友元 `friend` > 友元是用关键字声明的函数或类 类的非成员函数可以访问类的保护成员和私有成员(如果它被声明为类的友元),这是通过在外部函数声明的前面加上关键字`friend`完成的 声明方式 ```cpp friend <类型><友元函数名>(<参数表>); ``` ## 友元函数 > 友元函数只是一个普通的函数,而并非一个类的成员函数,它可以在任意地方调用,友元函数通过对象名来访问该类的私有成员或共有成员。 ```c++ #include<iostream> using namespace std; class MYclass { public:
## 标准I/O > input&output 它是一切实现的基础 stdio 标准 IO sysio 系统ui ## 文件IO: 标准IO:优点是可移植性高,缺点是性能比系统 IO 差,且功能没有系统 IO 丰富。 系统IO:因为是内核直接提供的系统调用函数,所以性能比标准 IO 高,但是可移植性比标准 IO 差 如果一个问题的解决需要用到`IO`,而且这个时候标准`IO`和系统`IO`都能解决问题的时候,我们优先使用标准`IO`; 原因 : 移植性好、合并系统调用 ## 虚拟地址空间 内核区:内核区是受保护的,用户不能对其进行读写操作,否则会引发段错误。
# C++ `lamdba` 表达式 > Lambda表达式是C++11引入的一个新特性,它允许我们在需要函数对象的地方,使用一种更加简洁的方式定义匿名函数。Lambda表达式通常用于`STL`中的算法、回调函数、事件处理程序等场合。 Lambda表达式的基本语法为: ```c++ Copy Code[capture list](parameter list) mutable exception -> return type { function body } ``` ## `lamdba`表达式在什么场合下使用 C++11 lambda表达式可以用来创建匿名函数,也就是没有函数名的
在介绍类和对象之前,我们先来简单了解一下面向过程和面向对象的概念。 面向过程是指程序的设计者关注于问题的解决过程,通过将问题分解为多个步骤和函数,并将这些步骤按照顺序组合起来实现程序的功能。这种方法的优点是结构清晰、容易理解和调试。但是随着程序的规模增大,面向过程的程序会变得越来越复杂,难以维护和扩展。 而面向对象则是一种更高级别的程序设计方式,它强调将数据和对数据的操作封装起来,形成一个对象。对象既包含数据又包含操作数据的方法,可以直接对外提供服务。这种方法具有高度的灵活性、可重用性和扩展性,易于维护和修改。