自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

velscode

伟大不因天赋,勤奋不设时限,开创不曾畏惧

  • 博客(24)
  • 问答 (1)
  • 收藏
  • 关注

原创 python内实现不短路的三元运算符

那如何实现一个不短路的三元运算符呢?即无论条件表达式的结果是True还是False,我们希望a、b两个函数都能被执行,但只会取其中一个的结果。其中a和b可以是函数,根据condition是True还是False,该表达式最终返回a或b的值。这里可以利用元组下标来实现,形如。

2024-05-08 11:03:57 101

原创 One Test to Rule Them All-一种通过规范化减少语义复杂性从而简化用例集的方法

本文发表于 ISSTA 2017。

2024-02-07 16:52:53 337

原创 lseek + SET_SEEK_END 与 open + O_APPEND 的区别杂谈

lseek + SET_SEEK_END标志位和 open + O_APPEND标志位都可以实现“向文件末尾追加写入”,他们有什么不同?

2022-09-05 21:09:43 278 1

原创 迷宫生成算法详解+源码+动画演示

经典迷宫生成算法

2022-02-07 17:18:33 350

原创 docker里用top的一个坑

业务背景使用 top + grep 来判断一个进程是否退出。如果grep不到了,就说明退出里,否则等待1秒钟重新判断测试进程process_abc,sleep 5秒钟后自动退出#include <stdio.h>int main(){ sleep(5); return 0;}检测脚本velscode@velscode:~/test$ cat check.sh#/bin/bashwhile truedo top -n 1

2021-11-03 19:08:45 859

原创 docker 报错 error checking context: ‘no permission to read from ‘/home/velscode/.bash_history‘‘

错误现象执行docker build时报错velscode@velscode:~$ docker build -f Dockerfile . -t ubuntu/test:1.0error checking context: 'no permission to read from '/home/velscode/.bash_history''.错误原因docker在build时会尝试对整个目录进行tar压缩,包括.开头的文件。我在主目录~进行build操作,而目录下的.bash_history没

2021-11-03 18:34:11 2160

原创 编程中的正交性思考

背景描述我有2块磁盘,并要求设计一个函数 cal() 用于计算一块磁盘中文件的数量我们很容易写出#define DISK1 1#define DISK2 2int cal(int disk){ int size = 0; if (disk == DISK1) { size = ...; // 计算磁盘1大小 return size; } if (disk == DISK2) { size = ...; // 计算磁盘2大小 return size; }}这样用户如

2021-08-28 18:01:32 272

翻译 How To Write Shared Libraries 中文翻译

文章目录概述1 前言1.1 一些历史1.2 转向 ELF1.3 ELF 是如何实现的?1.4 启动:在内核中概述如今,动态链接库无处不在。开发者有很多原因来使用并且创建他们。然而,这是个问题,因为在许多平台必须应用一些额外的技术才能生成体面的代码1 前言长时间依赖,程序收集通用的代码到库中,这样他们就可以被复用。这节省了开发者的时间并且减少了错误,因为被服用的代码已经被调试过一遍。随着系统同时运行成百个进程,在链接时服用这些代码仅仅解决了问题中的一部分。许多程序会使用他们导入到库中的相同片段的代码。

2021-08-24 22:07:12 216

原创 矩形的面积为什么是长乘以宽

首先,一个矩形,最容易测量的物理量就是长宽即x,y,所以面积会定义为一个与长宽有关的函数S = f(x, y)几个公理:1、全等的图形面积应该相同,而长宽相同的矩形,是全等的所以有f(x,y) = f(y,x)2、面积恒正而x和y都是大于0的数所以f(x,y) 不会出现形如 x - y的定义3、面积具有可加性,把两个宽相同的矩形拼在一起,可以得到一个新的矩形,长为两者之和f(x1+x2,y) = f(x1,y) + f(x2,y)从3可以进一步得出:f关于x或者y单调递增对于任意有

2021-08-16 20:41:23 1709

原创 Finding Crash-Consistency Bugs with Bounded Black-Box Crash Testing

文章目录Abstract介绍Abstract我们提出了一种测试文件系统崩溃一致性的新方法:有界黑盒崩溃测试(bound black-box crash testing,简称B3)B3用黑盒的方式测试文件系统,使用文件系统操作作为负载。由于可能的负载空间是无限的,B3限定了空间,基于参数,例如文件系统的操作数量或者包含什么操作,并且在有限的负载空间中进行穷尽。每个工作负载都在目标文件系统上被测试,通过模拟断电崩溃,并检测文件系统在每次crash是否恢复到了一个正确的状态。B3建立我们在过去五年,li

2021-06-17 22:24:36 320

原创 [故障注入]基于LD_PRELOAD对open进行故障注入

上一篇文章讲解了环境变量LD_PRELOAD在故障注入中的用法。下面进行一个实战,对open进行故障注入被注入程序velscode@ubuntu:~/code$ cat open.c #include <stdio.h>#include <errno.h>#include <string.h>#include <sys/stat.h>#include <fcntl.h>int main(){ int fd = open(".

2021-06-04 15:17:52 391

原创 [故障注入技术]环境变量LD_PRELOAD

有时候,我们希望程序里的strcmp、open等libc库函数出错,来检验我们的程序是否健壮但是实际去构造这些错误,往往有些困难利用libc是动态库的特性,我们可以结合环境变量LD_PRELOAD来进行故障注入。一个小例子velscode@ubuntu:~$ cat passwd.c #include <stdio.h>#include <string.h>int main(int argc, char* argv[]){ if (strcmp(argv[1],

2021-06-03 15:58:56 312

原创 [PATCH 5.10 089/252]一个经典的内存泄漏场景

https://www.spinics.net/lists/kernel/msg3959269.html看到一个经典的内存泄漏的补丁drivers/net/usb/smsc75xx.cdev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc75xx_priv), GFP_KERNEL); pdata = (struct smsc75xx_priv *)(dev->data[0]);backtrac.

2021-06-01 11:47:28 122

翻译 性能基准评估检查表

[TOP]做、评估一个基准测试时,思考以下问题1、为什么不翻倍呢如果基准测试报告一秒钟执行20000次,你应该问:为什么不是每秒40000次呢。这里面真正的问题是**“限制是什么?”**这就像一个纯学术价值的家庭作业。找到“为什么不加倍”的答案,可能会激励每个人取寻找和修复这个限制,并使基准测试的结果加倍!回答这个问题,通常需要在基准运行时,同时使用其他可观察性工具进行分析(我称之为“主动基准测试”)2、是否突破了限制?这是一个明智的测试。我曾经批评了很多基准测试,指出他们需要的网络吞吐量已经

2021-05-31 22:29:15 118

原创 【C语言面试题】结构体大小计算相关问题

文章目录从一个简单的例子说起复杂了一点测试环境为64位系统,32/64位系统仅部分类型大小不同,结构体大小计算方式没有差别从一个简单的例子说起 struct{ int v_int; }s; s.v_int = 0x12345678; printf("sizoef(int) is %ld\n", sizeof(int)); printf("sizoef(s) is %ld\n", sizeof(s));输出结果velscode@ubuntu:~$ gcc struct.c

2021-05-31 19:41:11 539

原创 main函数入参简介

main函数的参数详解周末回了一趟学校参加科协第一期招新考试,有一个学弟说他还没有使用过main函数的参数,那么就来讲解以下main函数的参数是什么,怎么用。大家写main函数时,可能一般写成int main(void) { return 0;}int main() { return 0;}这其实就是不向main函数传入参数。如果要传入参数,需要这样写int main(int argc, char* argv[]) { return 0;}之所以大家平时没使

2021-05-28 16:11:42 2549

原创 Linux内核调度子系统入门

文章目录CPU 调度器简介O(1)调度器CPU 调度器简介1)在任务之间共享CPU2)(在每个CPU上)选择下一个要执行的任务,当:正在运行的任务终止了正在运行的任务睡眠了(等待一个事件)一个新任务被创建,或者一个睡眠的任务被唤醒了正在运行的任务时间片用光了3)目标:公平基于优先级的时间片分配低任务响应时间高(任务完成)吞吐量CPU之间的负载平衡功耗控制低开销(运行调度代码)4)能够在大型机/服务器/笔记本/嵌入式设备/手机上工作O(1)调度器140个优先级。0

2021-05-24 10:55:25 72

原创 【LTP-open_posix_testsuite用例分析】mmap/1-1

简介mmap用于在文件内存间建立一种映射。该用例主要用户检查映射的正确性用例思路分析创建一个临时文件,向里面写入内容x然后映射该文件到内存检查内存里是否是刚才写入文件的内容源码分析 * * Test Steps: * 1. Create a tmp file; * 2. mmap it to memory using mmap(); * */这里说明了测试步骤1、创建一个临时文件2、调用mmap将它映射到内存int main(void){ char tmpfname[

2021-05-20 21:17:09 933

原创 如何正确的写加减乘除函数

有符号数加减法,存在溢出问题,经常被用于攻击构造。那么如何编写一个可以防止溢出的“正确的”函数呢?加法运算错误写法signed int func(signed int a, signed int b) { return a + b;}分析:a与b相加可能溢出(又分为上溢和下溢)上溢条件:a + b > INT_MAX下溢条件:a + b < INT_MIN正确写法signed int func(signed int a, signed int b){ if (((b &

2021-05-17 19:01:15 363 2

原创 【测试随想录】Fault-->Error-->Bug

文章目录BUGErrorFault消减系统性风险后记BUGBug,一个可以被观测到的错误现象。通常意味着一个接口调用失败、甚至系统崩溃。例如,对一个空指针进行了解引用访问。那么,什么导致了BUG呢?ErrorError,程序中出现的不合理、不合法状态。Error一定导致BUG吗?不一定。程序中可能有一个指针错误的指向NULL,这是一个ERROR,但只要不对它进行解引用访问,它就不会导致程序崩溃,甚至,你无法观测到它。那么,又是什么导致了Error?FaultFault,我愿定义为一种人为

2021-05-14 17:25:23 130

原创 麻省理工6.S081操作系统工程 -Tools

工具安装Ubuntu确认Ubuntu版本为bullseye或者sidcat /etc/debian_version然后运行sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu 如果提示有些找不到,把Ubuntu的镜像源替换成阿里云参考 https://www.cnblogs.com/yjp3729285

2021-05-12 09:51:56 146

原创 extern “C“ 之1:函数编译方式区别

int func1(int a, int b, int c, float d, double e){ return 0;}extern "C" { int func2(int a, int b, int c, float d, double e) { return 0; }}int main(){ return 0;}我们使用nm命令查看编译出来的二进制中的符号表可以看到,C++风格的func1函数,符号表中带有了参数类型信息。而C风格的func2函数则没有。实际

2021-04-29 09:50:46 42

原创 pthread_create传入参数的一个问题

背景题目有一个线程函数thread_func,它的入参是一个整数,它的功能是打印出这个整数。要求循环启动10个线程,打印出1~10错误写法#include <pthread.h>#define MAXN 10void* thread_func(void* arg){ printf("arg = %d\n", *(int*)arg);}int main(){ pthread_t tid[MAXN]; for (int i = 0; i < MAXN; i++)

2021-04-28 20:11:48 429

原创 利用C语言宏进行断言

使用C语言中的宏实现一个可以断言表达式并决定是否编译的功能

2021-04-27 15:06:49 257

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除