首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PWN 无符号和有符号整型的绕过漏洞

    本文最后更新于 554 天前,其中的信息可能已经有所发展或是发生改变。 无符号和有符号整型 数据元素类型:unsigned(无符号整型) C语言中,无符号整型数是不带正负表示符号的整型数。...C语言在计算机里编译时数都是用二进制表示的,如果最左边这一位不用来表示正负,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整型数。...("%u\n",-1); 输出:4294967295 printf("%u\n",-6); 输出:4294967290 printf("%u\n",a); 输出:4294967290 有符号整型...漏洞存在 如果在无符号类型中输入-1会被判断成一个很大的正整数,从而会导致出现一些如果判断的情况出现 例题分析 bjdctf_2020_babystack2 bjdctf_2020_babystack2...但是在read中作为参数时被转换为无符号整型(unsiged int),这个时候-1就会被识别成一个很大的整整数,从而导致栈溢出。

    1.7K20

    无符号整型下溢风险识别以及解决

    :TXTAI代码解释i的问题是:size()通常返回size_t(无符号类型)。...当size_t=0时:展开代码语言:TXTAI代码解释0-1=18446744073709551615(无符号整型下溢)最终循环条件:展开代码语言:TXTAI代码解释i无符号类型),而无符号数进行减法会出现下溢,从而导致巨大数值。...3.Go——中风险(int有符号,逻辑可能不符合预期)Go的len()返回int,所以:展开代码语言:TXTAI代码解释len(container)-1=-1range不会执行循环,但依旧存在业务逻辑上的问题...→重大bug在Java、Go、Python中,不会下溢,但仍有逻辑边界缺陷安全第一原则:不要对无符号数做减法作为循环边界最佳实践总结:先判断长度是否大于1使用i+1无符号类型做减法判断避免重复访问

    28130

    C++ 中有符号类型到无符号类型的转换

    这是由于当我们给一个无符号类型赋一个 负值 时,其结果是我们所赋的值与这个无符号类型能表示的数的总个数的和,即 d = -10 + 256,这样一来结果当然是 246 了,显然 246 是在此无符号类型所能表示的数的范围内的...(0 ~ 255),那么,如果相加后倘若仍然不在这个无符号类型所能表示的数的范围内该怎么办呢?...   当我们给一个无符号类型赋一个超过其表示范围的负值时,其最后的结果是该负值与该无符号类型所能表示的数的总个数的和,如果所得结果还是一个不在此类型表示范围的负数,则将所得结果重复以上相加的过程,直到最后得到一个在其表示范围的数...实际上,当我们赋给一个无符号类型一个超出它表示范围的 正值 时,结果是将我们所赋的这个值对此无符号类型所能表示的数的总个数取模后的余数,即 258 % 256 = 2,符合程序运行结果   ( 三 )、...这是因为 这个表达式中无符号数大于有符号数,此种情形下,当把一个有符号类型和无符号类型相加时,需要先将有符号类型的数转换为无符号类型的数后再进行加法运算,(一)(二)中已经详细说明了怎样将一个有符号类型的数转换为一个无符号类型的数

    2.4K00

    由“有符号数”和“无符号数”引发的一个bug!

    一筹莫展之际,老诸突然注意到我们之前忽略的一个改动点,他把某个参数类型从int16_t改为uint_16t,即把原来有符号的16位整型改为无符号的16位整型。...这样一来,这个变量只能表示非负数[0, 2^16-1],但算法过程中该值为负数是有意义的。 有符号数和无符号数 以int8_t和uint8_t为例,分别表示有符号的8位整型和无符号的8位整型。...对无符号数uint8_t: 位全为1表示最大的正数,为2^8-1=255 位全为0表示最小数,为0 对有符号数int8_t: 其最高位(最左边的位)是符号位,符号位为0表示正数,符号位为1表示负数,该位的权重为...有符号数转换为无符号数,会发生什么 C语言允许在各种㓊的数字数据类型之间强制转换,把一个有符号数赋给一个无符号数(或者反过来),结果是各个位不变,但会改变解释这些位的方式。...无符号的0x10001011表示139,但有符号的0x10001011表示的-117,这是因为: 上面公式里的B-二进制,2-to,U-无符号数,8-bit位数为8,T-补码 拷问老诸,为什么要去修改

    1.3K30

    无 Embedding、无向量数据库的 RAG 方法:PageIndex 技术解析

    PageIndex 是一种无向量、基于推理的检索增强生成(RAG)方法,无需 Embedding、分块或向量数据库即可从长文档中检索答案。...多数 RAG 系统依赖 Embedding 和向量数据库:把文档拆成块,转成向量,用余弦相似度找答案。但相似度不是推理。PageIndex 采用了另一个方法,通过文档结构的推理而非语义搜索来检索信息。...文档不再是一堆扁平文本,而是一个带层级的结构体系,类似于一本附有目录的教科书。 下面用经典电影《Sholay》来演示其工作原理。...完整剧本不会被整体发送,不会生成 Embedding,也不会执行向量相似度搜索。LLM 接收到的只有三样东西:用户的问题、层次化映射(JSON 树)、每个节点的摘要。不是完整剧本,只有结构。...PageIndex 与传统 RAG 的差异(针对结构化文档) 传统向量 RAG 系统中,搜索"Thakur 的手臂"可能返回:Jai 和 Veeru 打斗中使用手臂的场景、包含相似词汇的对话,以及"手"

    62310

    C++中的陷阱:`auto`、模板和无符号整数

    在C++编程中,auto关键字和模板是两个强大的工具,它们可以提高代码的灵活性和可重用性。然而,当这两者与无符号整数相结合时,可能会导致一些意外的行为。详情如下。...问题描述 当我们在模板中使用auto关键字定义一个从10到0递减的循环变量,并且这个变量的类型是无符号整数(unsigned int)时,可能会遇到以下问题: 循环条件问题:由于无符号整数不能表示负数,...类型推断问题:使用auto关键字时,循环变量的类型可能被推断为int,而循环条件中的无符号整数可能会导致类型不匹配。...,务必注意以下几点: 避免使用无符号类型作为递减循环变量:使用int类型可以避免递减到负数时的意外行为。...确保类型一致性:在比较时,确保循环变量的类型与比较值的类型一致。 使用适当的类型:在需要时,使用int或其他有符号类型来避免无符号整数的潜在问题。

    95710

    当无符号与有符号整数相遇:C++中的隐式类型转换陷阱

    在C++编程中,整数类型之间的运算是非常常见的操作。然而,当无符号整数和有符号整数混合运算时,可能会产生令人意想不到的结果。让我们通过一个简单的例子来探讨这个问题。...1.整数提升与类型转换在C++中,当表达式中同时包含有符号和无符号整数时,编译器会执行整型提升(integerpromotion),将有符号整数转换为无符号整数,然后再进行计算。...这种转换遵循模算术(modulararithmetic)规则:如果目标类型是无符号的,值会被转换为目标类型的模数范围内的值如果目标类型是有符号的,且原值在目标类型范围内,值保持不变如果原值超出目标类型范围...,结果是实现定义的2.具体转换过程在我们的例子中:u是无符号整数,值为10i是有符号整数,值为-42当执行u+i时:编译器检测到混合类型运算将有符号整数i转换为无符号整数-42转换为无符号整数:由于无符号整数不能表示负数...理解其背后的机制对于编写正确的代码至关重要:有符号到无符号的转换使用模算术规则负数转换为无符号会变成很大的正数循环和比较操作特别容易受到影响作为最佳实践,应该:避免不必要的无符号整数使用在混合运算时显式转换类型启用编译器警告来检测潜在问题在代码审查时特别注意这类问题通过理解这些规则和采取适当的预防措施

    34410

    统计无符号整数二进制中1的个数(Hamming weight)

    查找网上资料,才知道这个问题的正式的名字叫Hamming weight(汉明重量)。 2.问题描述 对于一个无符号整型数,求其二进制表示中1的个数。...比如12的以32位无符号整型来表示,其二进制为:00000000 00000000 00000000 00001100,那么12的二进制中1的个数是两个。...算法的实现原理是将32位无符号整数分成32个段,每个段即1bit,段的取值可表示当前段中1的个数,所以将32个段的数值累加在一起就是二进制中1的个数,如何累加呢?这就是代码做的事情。...方法四:位标记法 巧妙的使用位域结构体来标记32位无符号整数每个位,最后将32个位相加得到1的个数。可见这里的累加方法明显与上面不同,代码也是略显膨胀。...---- 参考文献 [1]求二进制数中1的个数 [2]计算一个无符号整数的二进制中0和1的个数 [3]c语言:统计整数二进制表示中1的个数(汉明重量) [4]HAKMEM.维基百科 [5

    4.8K21

    python笔记74- yaml 使用特殊符号| 解决字符串带换行的问题

    前言 在yaml文件中通过字符串写一行,如果字符串需要换行的,可以使用 yaml中的特殊符号|和>。 管道符 | | 这个控制符的作用是保留文本每一行尾部的换行符 “\n”,等效于 |+。...|+会额外保留整个文本最后的换行符 “\n”。 |-会额外删除整个文本最后的换行符 “\n”。...123@qq.com 实际效果 {'name': 'yoyo', 'key': 'hello\nworld\nwelcome', 'email': '123@qq.com'} >控制符 > 这个控制符的作用是将每一行尾部的换行符...>+ 会额外保留整个文本最后的换行符 “\n”。 >- 会额外删除整个文本最后的换行符 “\n”,当没有显式添加|或>时,这是默认的行为。...,因为最后一项后面的回车符就是控制的整个文本最后的回车符,如果这个回车符不存在,”+”也就无效了。

    4.8K10

    ECMAScript5.1的运算符、类型转换总结

    一、运算符优先级 从高到低 运算符 说明 () 圆括号 . [] new(带参数列表) 字段访问、数组索引、new(带参数列表) () new(无参数列表) 函数调用,无参数列表 ++(后置递增) --...delete typeof void 一无运算符、返回数据类型、对象创建、未定义的值 * / % 相乘、相除、求余 + - + 相加、相减、字符串相加 > >>> 位移 >= instanceof...小于、小于或等于、大于、大于或等于、是否为特定类的实例 == !...转换为数值类型 ToInteger 转换为整型,应该是16类整型 ToInt32 32位有符号整型 ToUint32 32位无符号整型 ToUint16 16位无符号整型 ToString 转换为字符串类型...,其他(Number\Boolean\String\Null\Undefined)等不行 SameValue 两个对象是否相等的算法 提供的方法,可以直接调用 方法 说明 parseInt 转换为整型

    75070

    【C语言指南】数据类型详解(上)——内置类型

    long long或long long int是C99标准引入的,用于表示更大的整数,其大小至少为long的两倍。 无符号整型:在基本整型前加unsigned关键字,表示只能存储非负数值。...无符号整型能表示的正数范围是有符号整型的两倍(因为不需要表示负数)。...有符号整型与无符号整型的转换:在表达式中混合使用有符号和无符号整型时,有符号整型会被隐式转换为无符号整型,这可能导致意外的结果,特别是当有符号整型值为负数时。 2....浮点型(Floating-Point Types) 浮点型用于存储带小数点的数值,包括正数、负数和零。 C语言提供了三种浮点类型。...字符型(char):通常占用1个字节,可以是有符号的(signed char)或无符号的(unsigned char)。默认情况下,char可能是有符号的也可能是无符号的,这取决于编译器和平台。

    56310

    深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

    1、C语言中的有符号数和无符号数   上一篇博客我们给出了C语言中在32位机器和64位机器中支持的整型类型数据,我们这里只给出32位机器上的: ?   ...在一台采用补码的机器上: ①、无符号数转换成有符号数 ? ②、有符号数转换成无符号数 ?   ...因为0u是无符号的,-1是有符号的。那么-1就会被转换成无符号的。   ...当然将一个数据转换为字长更小的数据类型的时候,它的值肯定会发生变化。那么我们只能将较小的数据类型转换为较大的数据类型。比如将短整型short int 转换为整型 int。,那该怎么办呢?   ...我们从上面已经看到了许多无符号运算的特殊性,尤其是有符号数到无符号数的隐式转换会导致错误。而避免这类错误的方法是不使用无符号数。实际上,除了 C 语言,很少有语言支持无符号数。

    2.7K80

    第3章 | 基本数据类型 | 3.1 固定宽度的述职类型

    类型 说明 值 i8、i16、i32、i64、i128、u8、u16、u32、u64、u128 给定位宽的有符号整数和无符号整数 42、-5i8、0x400u16、0o100i16、20_922_789..._888_000u64、b'*'(u8 字节字面量) isize、usize 与机器字(32 位或 64 位)一样大的有符号整数和无符号整数 137、-0b0101_0010isize、0xffff_fc00usize...3.1.1 整型 Rust 的无符号整型会使用它们的完整范围来表示正值和 0,如表 3-3 所示。...表 3-3:Rust 无符号整型 0 到 28-1(0 到 255) Rust 的有符号整型会使用二进制补码表示,使用与相应的无符号类型相同的位模式来覆盖正值和负值的范围,如表 3-4 所示。...如果整型字面量没有带类型后缀,那么 Rust 就会延迟确定其类型,直到找出一处足以认定其类型的使用代码,比如存储在特定类型的变量中、传给期待特定类型的函数、与具有特定类型的另一个值进行比较,等等。

    79810
    领券