自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 【开发记录】arm v7配置青龙面板

【代码】【开发记录】arm v7配置青龙面板。

2024-04-27 02:51:22 33

原创 【知识总结】WASI

是讲解WASI的一篇文章,其中的插图非常精彩,存档以备后看。

2024-04-14 12:51:04 152

原创 【代码碎片】WebAssembly实战第八章

运行了一下作者在上述链接中贴出的例子,似乎可以运行,看起来是在主模块中调用了副模块造成的无法正确链接的问题,但是对于这种情况,不知道多个主模块能否适用,已提交Github,蹲个后续。来说明这个问题,看起来似乎没有得到准确的回复。仍然无法通过编译正确运行。作者在Github上也提交了一个。这一章,作者提供的最新。

2024-04-12 17:37:49 212

原创 【代码碎片】《WebAssembly实战》WebAssembly in action第三章作业二

在阅读《WebAssembly实战》时,笔者发现第三章中作者使用的副模块的例子只能通过作者提供的模块运行成功,无法根据现有版本(2024年4月,emcc 3.1.56)编译运行成功,根据浏览器反馈的提示可知,是指定的importObjec的内容缺少,笔者猜测是在WebAssembly的后续更新中增加了某些必填的字段。另外还有一个问题就是使用.c文件中编写的函数时,不需要’_'开头,这也可以通过打印result.instance.exports查看。在英文版的官方论坛中也有类似的问题,贴一下。

2024-04-10 10:31:34 110

原创 【编译分析】MSVC编译器函数修饰的返回值问题

开头,a表示函数名,第一个@表示函数名的结束,第二个@表示命名空间的结束,YA表示调用方式为__cdecl,H表示返回值类型为int,D表示参数类型为char。详细信息可以参考这篇。这也是笔者比较疑惑的一点,既然函数重载不需要考虑返回值类型,那么为什么还要记录这个类型呢?(参数相同且函数名相同但返回值类型不同的函数重载不成立,具体可以参考这个。可以看到,MSVC不仅记录了函数的参数,同时记录了函数的返回值。时,作者提到了MSVC进行函数修饰的结果比较gcc更加复杂。在结果中查看@@可以找到修饰后的函数名。

2024-04-01 21:05:12 239

原创 【开发工具】Ubuntu复制CSDN代码多余符号的去除

通过搜索找到了一种替换为空的删除方式,笔者编写了一个适用于Rust的shell脚本,需要放到Rust的根目录,会自动将src/main.rs中的\u200删除。在Ubuntu中使用CSDN复制的代码时,可能会出现\u200的符号,这个符号会影响代码的编译和运行,因此需要找到一种快速删除这种符号的方法。

2024-03-31 22:09:21 240

原创 【开发总结】Rust的命令行库clap

需要把str转成String,但是在形参部分却不支持.to_string()转换方法,又无法在结构体内部定义变量,查阅GPT发现,可以使用default_value类型直接处理此种情况,因为此时需要传入的是字符串(下一部分将会看到为什么只有字符串才能如此处理)可以看到,default_value默认支持的是OsStr类型的,也即字符串,因此需要将其改为default_value = "1"才能通过编译。最后一段例子3 自定义验证逻辑中有两个->接中文注释的部分,此部分为注释,应该以//开头。

2024-03-31 19:56:35 685

原创 【开发总结】springboot项目创建

时,发现文中创建SpringBoot项目的部分是基于旧的IDEA版本,有些内容已经过时,按照原作者的介绍已经不能正确创建项目,在网上搜索之后发现了。

2024-03-29 11:46:38 174

原创 【开发总结】electron浏览器打开踩坑

遂按照文章中的过程进行复现,原作者的开发环境时mac系统,笔者用的是windows系统,在开发过程中遇到了在浏览器中输入scheme打开应用程序的场景,这个场景在日常生活中也经常用到,例如百度网盘或腾讯会议会从网页跳转到应用。在复现时,笔者的系统发生了报错,遂以为是操作系统的差异性,后来经过测试发现,是由于应用尚未打包并安装到应用程序中,可以理解为一个是Debug版本,一个是Release版本。构建中出现的第二个问题是没有通过编译的问题,采用换源的方法可以解决,具体可以参考。

2024-03-29 11:04:11 602

原创 【语言学习】std::transform函数

如果不理解std::transform的三个参数的关系,就会对第三个参数的lambda表达式理解不了。其实,第三个参数的作用是提供给了一种对第一个参数(std::transform中是前两个参数,分别是begin和end)的一种处理操作。所以第三个参数的lambda表达式的输入对象是第一个参数。时,发现了其中使用了一个函数std::transform(原文对其进行了一层封装)可以看到,对每个元素进行了除2处理。

2024-03-05 21:37:43 298

原创 【语言学习】C++algorithm库的命名空间问题

algorithm中的函数不需要显式地使用std命名空间是因为这些函数通常在标准库头文件中声明。这意味着它们已经位于std命名空间中,因此你可以直接调用它们而无需前缀"std::"。这种设计有助于简化代码并提高可读性,但请注意,这仅适用于标准库中的函数。在定义copy函数的stl_algobase.h中,发现了_GLIBCXX_STD_C::这个宏,其定义在c++config.h中,时,发现一个很有趣的点,原来使用copy和back_inserter时不需要使用std::。可以看到,此处将其定义为std。

2024-03-05 21:20:11 270

原创 学Cuda的一个网站和资源

可以用于对一些cuda的问题进行可视化。

2024-03-05 12:20:36 402

原创 编写LLVM Pass的一个小问题

但是我在使用自己编译的ll文件时,我发现该pass无法正常使用。最后经过测试发现是利用-O0编译产生的ll文件有optnone的flag,需要将其删除,或使用-O1等flag。时发现一个很有趣的细节,官方给出了一个测试用例,此处有一个小问题(%无法复制)。

2024-02-23 20:32:34 227

原创 【LLVM】SCCP设置nuw和nsw的逻辑

可以看到,首先获取两个操作数对应的Range,分别为RangeA和RangeB,然后使用ConstantRange::makeGuaranteedNoWrapRegion方法获取不会溢出的区间范围,判断RangeA是否在该范围内,如果在,则说明不会溢出,可以设置对应的flag。此处注意A的R和L是和直觉相反的,这是因为对于溢出的情况,Upper是比Lower小的,也即Upper反而是左边的。如果第一个是Full或者第二个是empty,直接返回true,这很好理解,同样的,反之返回false。

2024-02-20 19:47:00 616

原创 【LLVM】nsw和nuw的一个例子

nsw和nuw是LLVMIR提供给二元运算的flag。分别表示not signed wrap和not unsigned wrap。在LLVM2.6的中表述如下:给出了和中不同的角度,该flag的添加相当于向编译器提供了一个不溢出的保证,让编译器基于此进行优化。

2024-02-20 00:09:11 727

原创 【LLVM学习】AliasAnalysis框架学习

cclyzer++安装未成功,尝试学习一下LLVM自带的AliasAnalysis框架。

2024-02-19 23:14:29 143

原创 【工具介绍】cclyzer++

项目代码库。

2024-02-19 23:13:56 379

原创 Rust学习心得

理解重影和可变变量的赋值。重影其实就是将一个变量名进行重新定义,这在弱类型的语言中是不存在的,例如C语言不允许在同一个作用域下将某个类型的变量修改为另一个类型。可变变量的赋值类似于C语言中的变量赋值。允许通过下划线分割一个大数的不同段。98_222——和C语言中的98222是一致的,也即下划线在此处的作用相当于大数的逗号。loop的设计loop是Rust提供的一个无限循环结构,可以通过break进行跳出,且break可以带参数以返回循环跳出时的相关变量。

2024-02-16 09:31:59 85

原创 【工具介绍】Herbie:浮点数运算化简工具

在一篇论文的case study部分看到了介绍该工具,可以化简浮点数运算,提供一个更简单的形式。该工具的目的就是解决用浮点数处理实数问题是造成的不准确的问题。分别贴一下项目源代码。

2024-02-05 23:03:40 144

原创 【论文研读】Better Together:Unifying Datalog and Equality Saturation

EqSat本质上是将Rewrite和history同时保存然后获得二者的好处。文章还介绍了一些EqSat的扩展,例如,支持语义分析以增加Soundness。Multi-pattern,看起来是将pattern的过程并行了,有两篇文章是这方面的工作,但还没有达到更优。提高e-matching的效率,最近的技术是relational e-matching。

2024-02-05 22:32:33 718

原创 NonDefUseDependency及例子

的。这可能导致程序在并行执行或重排序时出现问题,因为执行顺序的改变可能会影响到数据的正确性。这种所谓的没有经过明确定义的,也即没有通过限制指令标记两个指令之间是不可移动或不可并行的,但两个指令之间有明显的先后关系,如果并行可能会出现某种失败的情况。

2024-01-30 20:36:54 416

原创 推荐一个AI代码阅读神器

首先他的界面和vscode非常类似,对于vscode的老用户,切换起来开销非常小,此外用起来非常容易,打开项目之后勾选代码片段,然后输入自己的问题:例如需要对某个变量进行解释,或是对某个方面进行解释,回车即可等待AI的回复。最近阅读Reassociate代码时遇到了一个问题,也即自己手动阅读代码或是通过gdb进行调试的方法阅读代码,都不能避免细节过多造成的效率究极落后的情况,因此在网络上查阅相关的工具。唯一要吐槽的就是在笔记本电脑上chat板块的按键太小了,很费眼睛。最后发现了cursor,还挺好用的。

2024-01-29 20:01:15 696

原创 【LLVM Pass解读】Reassociate 重结合优化

首先,ReassociatePass是一个FunctionAnalysis,所以其入口函数为。

2024-01-29 15:05:44 819

原创 【LLVM源码解读】Modifying reassociate for improved CSE

这个patch是我在思考如何判断两个长表达式是否有公共子表达式时发现的。在此。该patch的作用主要是实现对一些复杂的例子通过重结合找到其中的公共子表达式。

2024-01-23 23:31:21 848

原创 Datalog 否定逻辑规则

Datalog 否定逻辑实现

2024-01-23 14:47:58 324

原创 调试LLVM Pass

在学习一个大型系统时,动态的方式(执行和调试)好过静态的方式,因此如果能掌握调试LLVM Pass的方法,也就能更好学习Pass的原理,并编写自己的Pass。本文记录笔者在调试LLVMPass时遇到的问题。

2024-01-14 14:34:01 361

原创 理解Herbrand Equivalence

论文的第二和第三部分分别给出了Herbrand等值关系和值编号的定义。首先来看第二部分。此公式首先定义了某个值到一个表达式的定义,作者的思路是将所有的值都上溯到定义他们的表达式的形式,这样可以比较不同值之间的相等性,带着这样的想法再来看上述公式,第一种情况是t=x的形式(根据后文的描述称为变量表达式),直接将x的表达式传递给t,第二种是t = t1 o t2的二元表达式形式(根据后文的描述称为包含运算符的表达式),将两个二元表达式的操作数的定义进行二元计算。

2024-01-10 15:50:33 1063

原创 一个GVN无法消除的例子

上述例子中,y+c在两个分支中是一致的,也即两个分支的表达式之间是冗余的计算,但LLVM的优化并没有将二者进行消除,而是使用了select结构。为了突出上述例子的严重性,我又造了一个例子,以显示此类问题。贴一个Compiler Explorer的。可以看到,LLVM没有看到两个Phi函数重结合的可能性,从而造成了冗余计算未成功消除。

2024-01-08 20:51:53 804

原创 编写自定义的LLVM Pass

今晚反思了一下,自己最近看的东西太发散了,只有一个模糊的主题——LLVM,然后看了很多作者的一系列文章,但是这些文章比较多而杂,大多数都是一个系列,且较为发散,近来又喜欢发现一个作者便将该作者的一系列文章进行阅读,然后其中引用了另一个作者的文章,又要读一大箩筐,这样铺的太开而没有线,今后还是以一个较为固定且细致的主题发布博文,这样也方便读者查找和掌握重点,用到的资料以链接的形式附在文中,如果某天的资料没有看完,仍可以将链接附在文中,以飨读者。本文主要是阅读LLVM的。

2024-01-06 23:13:36 440

原创 【工作日志】1月6日——LLVM

继续学习LLVM笔记。

2024-01-06 16:09:48 366

原创 【工作日志】1月5日——指针分析 LLVM

在最近学习的过程中总是发现容易发散,没有中心,且很多好的资料,如果只存在本地的话既不容易在多个设备中流转,又不好标记,因此决定写一系列名为工作日志的文章,不奢求阅读数据,权当将好资料集中分享。在这里,但是给出的是makefile的构建方式,不喜欢,以后在看。今天在群里看到一个朋友询问别名分析时为什么使用二元组的形式,而不是使用指针分析中的结合形式,我在CSDN中查阅资料时,发现了。文章1提到的ModRef部分,即4.2.2的3,已经封装到一个单独的文件,附。,好东西,暂存,支持邮件列表。

2024-01-05 19:03:01 791

原创 gdb调试宏定义的方法

逛知乎时刷到了,讲述了如何在GDB中调试宏,笔者在复现的时候未成功,一直显示上下文中找不到对应的符号,用文中的-g3方法仍然无法打印出该符号,使用文中的方法利用readelf查看生成的调试信息,可以看到对应的宏信息,但仍然无法打印该标志。

2024-01-03 17:48:59 652

原创 【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA.

继续研读GVN领域的文章,又是一篇重要的文章,此文提出的算法已经在LLVM中实现为NewGVN。能够找到所有Herbrand等值关系且时间复杂度为polynomial。

2024-01-02 18:10:13 837

原创 【论文复现】Furthering Datalog in the pursuit of program analysis

本文是对同名论文中GVN相关部分的代码进行复现,该论文的研读可以看笔者主页。

2023-12-31 16:25:25 526

原创 【论文研读】Furthering Datalog in the pursuit of program analysis

本文是一篇博士论文,洋洋洒洒,内容丰富。虽然有些图例和程序上的小瑕疵,但本文不乏一篇好的文章。敢于使用LLVM编译器进行对比就是一个很贴近工业界的实验方法。笔者对Datalog和程序分析的相关技术理解尚浅,还需要更进一步的学习和成长!另外笔者主要关注GVN相关的技术,因此并未展开另外两部分,对相关技术感兴趣的读者也可以自行在网络中搜索原文来看。

2023-12-31 16:23:30 972

原创 x86_64在64位模式汇编指令的立即数扩展问题

该问题源自笔者在阅读《汇编语言——基于x86处理器》(基普·R.欧文 著 吴为民 译)(以下简称x86)一书时原作者提到的一个问题,也即在64位模式下处理32位立即数时存在的扩展模式不同的问题。本文使用的是原书第8版的译本,对应页码以此书为准。在该书第161页6.1.10 64位模式下的布尔指令,作者给出了如下一段程序可以看到,此处作者对32位进行and运算时,没有默认将高位看作全0,而是只对低32位进行了运算。当源操作数为32位以下的立即数时,通过0扩展将其扩充为32位。

2023-12-28 13:46:55 989

原创 signed integer overflow对编译器的影响

最开始接触这个问题,是在研究编译器对C和C++中的未定义行为的处理时看到的一篇文章。其中有一部分是对signed integer overflow类型的未定义行为进行介绍。作者举了一个例子,如果考虑溢出的情况,那么对于不等式 i+1 > i,不一定是恒成立的,也即如果编译器不考虑这种情况,直接将i+1>i优化为true,就会造成部分例子的错误。同样的,对于x * 2 / 2和x也存在这样的问题。

2023-12-23 16:09:25 738

原创 int main函数的最大返回值问题

通常情况下,当我们使用int main函数计算某个题目(例如计算10的阶乘)时,通常会将该结果通过printf或std::cout输出到控制台中,但是也可以将该值作为函数的返回值,以return的形式展示。通过汇编代码可以看到,在x86_64的测试机上,该值以常数的形式存储在eax寄存器上,但由[这篇文章][1]可以看到,该寄存器只能存储数字的低16位,也即最大为255。main函数在C语言中起到用户编写程序的入口函数的作用,尝尝以void或int类型作为返回值。

2023-12-19 20:39:41 367

原创 牛客网考研真题KY4 代理服务器——思路代码讲解

本题利用的是贪心算法

2023-03-03 20:08:30 197

原创 WinForm在多个屏幕上创建多个Form

WinForm多屏幕

2022-05-10 14:31:28 526

空空如也

空空如也

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

TA关注的人

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